Http协议
超文本传输协议是一款应用层协议,主要定义了浏览器与服务器之间的通讯过程传输数据的格式.
请求数据包格式
第一部分:请求行
GET /hello HTTP/1.1
请求方式:GET/POST
请求资源路径:/hello
协议的类型与版本: HTTP/1.1
第二部分:若干消息头
包含若干键值对,描述了客户端发送请求数据包时的一些状态,或请求数据包的描述信息.
key:value
key:value
第三部分:请求实体
包含请求数据包中的一些参数(仅限于post请求)
响应数据包格式
第一部分:响应行
HTTP/1.1 2000K
1.协议的类型与版本
2.状态码
响应状态描述:200正常 ;404资源找不到 ;500服务器内部异常
第二部分:若干消息头
这些消息头描述了响应数据包中的一些状态,以及响应数据包中的一些信息.
key:value
key:value
.....
第三部分:响应实体
主要存放服务器端返回给浏览器的数据
可能是html源码,可能是图片.
使用eclipse自带TCP/IP模拟器,查看数据包格式.
只有form表单可以发送post请求
get与post之间区别
1>请求参数存放位置
get:在url后面的?拼接
post:参数放在请求数据包请求实体部分.
2>参数数据量大小
get:url传递数据量大小有限制
post:理论上没有限制(参数在请求实体部分)
3>安全性
get:相对不安全
post:相对安全
4>编码相关
get:不适合传递中文参数
post:比较适合传递中文参数
javaweb开发过程中常见编码问题:
1>在servlet代码中输出中文,结果在页面中查看出现乱码.
原因是tomcat默认输出response编码是iso88591.
解决方案:
在response.getWriter()之前,设置response的内容类型.
resp.setContentType("text/html;charset=utf-8");
的作用是指定对服务器响应进行重新编码的编码
1)告诉tomcat容器,输出的信息是使用编码为utf-8编码.
2)在响应数据包中添加ContentType消息头,
ContentType:text/html;charset=utf-8 浏览器会按照utf-8解析.
2>在表单中输入中文信息,提交后再servlet里面接收后,打印是乱码.
1)若要提交中文参数,必须使用post请求,这样参数会存放再内容部分,tomcat接收之后才可以进行编码处理.
(请求行中不支持asc码中文字符)
2)servlet中,在request.getParameter()获取参数之前需要设置request的参数接收编码:
浏览器发送request时的编码类型<meta charset="UTF-8">
request.setCharecterEncoding("utf-8");(的作用是设置对客户端请求进行重新编码的编码。)
**** 而tomcat服务器是默认采用iso-8859-1来对请求消息进行解码的,如果前后不一就很容易出现乱码问题.如果是post请求只需要设置request.setCharacterEncoding()与请求消息编码前的编码方式一样就可以.
如果是get请求,tomcat默认的是用iso-8859-1来进行解码,此时request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI="true"使得起作用
useBodyEncodingForURI="true" URIEncoding="UTF-8"