注:本文章基于尚硅谷JavaWeb相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!
开篇
什么是HTTP协议:
所谓HTTP协议是指客户端和服务器之间通信时,发送的数据,需要遵守的协议,叫HTTP协议;
HTTP协议中的数据,又叫报文;
请求的HTTP协议格式
客户端给服务器发送数据叫请求;
服务器给客户端传回数据叫响应;
GET请求
(1)请求行
- 请求的方式 GET
- 请求的资源路径 [+?+请求参数]
- 请求的协议版本号 HTTP/1.1
(2)请求头
Accept:告诉服务器,客户端可以接受的数据类型;
Accept-Language:告诉服务器客户端可以接受的语言类型:
zh_CN:中文中国
en_US:英文美国
User-Agent:就是浏览器的信息;
Accept-Encoding:告诉浏览器,客户端可以接受的语言类型;
Host:表示请求服务器的ip和端口号;
Connection:告诉服务器请求连接如何处理:
Keep-Alive:告诉服务器回传数据不要马上关闭,保持一小段时间的连接;
Closed:马上关闭
POST请求
(1)请求行
- 请求的方式 POST
- 请求的资源路径[+?+请求参数]
- 请求的协议版本号: HTTP/1.1
(2)请求头
- 具体和上面GET请求请求头一样
- Referer:表示请求发起时,浏览器地址栏中的地址(记录发送给服务器的信息从哪来)
- Content-Type:表示发送的数据的类型:
* application/x-www-form-urlencoded
表示提交的数据格式是key:value&key:value,然后对其进行url编码
url编码是把非英文的内容转换为%xx%xx- multipart/form-data:
表示已多段的形式提交数据给服务器(以流的 形式提交,用于上传)
- multipart/form-data:
- Content-Lnegth:表示发送的数据的长度
- Cache-Control:表示如何控制缓存,no-cache不缓存
- 空行
(3)请求体(发送给服务器的数据)
响应HTTP的协议格式
(1)响应行
- 响应的协议和版本号 HTTP/1.1
- 响应的状态码
- 响应状态描述符
(2)响应头
- Server: 表示服务器的信息
- Data:请求响应的时间(格林时间)
- 其它属性和请求一致
- 空行
(3)响应体(就是回传给客户端的数据)
-
可以是json数据,也可以是网页源码
常见的响应码:
200:请求成功
302:表示请求重定向;
404:表示请求服务器已经收到了,但是你要的数据不存在(可能请求地址错误);
500:表示服务器已经收到请求,但是服务器内部错误,
MIME类型说明:
MIME是HTTP协议中数据类型。
MIME是多功能Internet邮件扩充服务,MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应;
HttpServletRequest类
HttpServletRequest作用:
每次请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议解析好封装到Request对象 中,然后传递到service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有请求的信息
;
HttpServletRequest类常用的方法:
- getRequestURI():获取请求的资源路径
- getRequestURL():获取请求的统一资源定位符(绝对路径)
- getRemoteHost():获取客户端的ip地址
- getHeader():获取请求头;
- getParameter:获取请求的参数
- getParametervalues获取请求的参数(多个值的时候使用)
- getMethod():获取请求的参数
- setAttribute(key:value):设置域数据
- getAttribute(key):获取域数据
- 10.getRequestDispatcher():获取请求转发对象
在doPost请求中设置请求体的字符集为UTF-8,从而解决post请求中文乱码问题(一定要在获取请求参数之前设置字符集编码);
request.setCharacterEncoding("UTF-8");
请求转发
:
请求转发是指度武器收到请求后,从一个资源跳转到另一个资源的操作叫做转发;
请求转发的特点:
- 浏览器的地址栏没有变化
- 他们是一次的请求
- 他们共享session数据
- 可以转发到WEB-INF目录下(作为服务器访问);
request.getRequestDispatcher("/a/b/c.html")forward(request,response)
base标签设置页面相对路径工作时参照的地址,href属性就是 参数的地址值;
以下代码则表示所有设计到相对路径工作时,都以此路径出发;
<base href="http://localhost:8080/07_servlet/c.html">
web中 / 斜杠的不同意义:
/ 斜杠如果被浏览器解析,得到的地址是:http://ip:port
/ 斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径
HttpServletResponse类
HttpServletResponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序使用,HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有相响应的信息,我们如果需要设置返回给客户的信息,都可以使用HttpServletResponse对象来进行设置;
(1)两个输出流的说明:
- 字节流:getOutputStream()常用于下载(传递二进制数据)
- 字符流:getWriter()常用于回传字符串(常用)
两个流只能使用一个,否则就会报错;
如何回传字符串数据:
//设置服务器字符集为UTF-8(解决中文显示异常)
resp.setCharracterEncoding("UTF-8);
//通过响应头,设置浏览器也使用UTF-8的字符集(解决中文显示异常)
resp.setHeader("Content-Type","text/html;charset=UTF-8")
PrintWriter writer=resp.getWriter();
writer.write("返回写入数据!")
解决返回中文乱码方式2
:
//同时设置服务器和客户端响应都使用UTF-8编码(此方法一定要在获取流之前使用)
resp.setContentType("text/html;charset=UTF-8")
请求重定向
设置响应状态码302,表示重定向;
设置响应头,说明新的响应地址在哪里;
//旧响应servlet
resp.setStatus(302)
resp.setHeader("Location",value:"http://localhost:8080/新的响应地址绝对地址")
请求重定向特点:
- 浏览器地址栏会发生变化;
- 两次请求
- 不会共享session中的数据
- 不能访问WEB-INF中的资源(作为客户端访问),但是可以访问工程以外的资源
实现请求重定向的简单方式:
resp.sendRedirect("访问地址")
总结:
在这一节中,我们首先学习了HTTP请求与响应的基本格式,然后分别学习了httpservletrequest和httpservletresponse两个类的一些功能,了解了请求与响应的一些操作,并响应的解决了响应和返回中的中文乱码问题,最后还分别学习了请求转发和重定向,并分析了其各自的特点;
如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!