http协议:
概念:是w3c组织(万维网联盟)的一种通信协议。定义
浏览器与web应用之间的数据格式;
包含了请求与响应。
1.请求:浏览器向服务器发送数据
请求数据包含:
请求行:请求方法+请求路径+协议种类+版本
消息头:都是以键值对的形式存储的。
比如: content-type消息头存储字符编码集。
实体内容: 只有post请求才会有数据
2.响应: 服务器向浏览器发送数据
响应数据包含:
状态行:协议种类+版本号+状态码+状态信息
消息头:以键值对的形式存储的
响应数据: 经过业务逻辑运算后要发送给浏览器的数据。
Servlet如何处理HTTP协议
1 )Servlet容器会将接收的信息进行封装。封装到HttpServletRequest这个类型的一个对象上(request)。
我们就可以从request这个对象上获取我们想要的数据。
比如:获取版本号
用户提交的数据
字符集
2)Servlet容器在响应浏览器时,也会将一些数据,封装到
HttpServletResponse类型的一个对象上。发送给浏览器后,浏览器会自动解析
如:绑定消息头
字符集
状态码等。
注意:每一次请求与响应,Servlet容器都会创建一个
request和Response
request.setCharacterEncoding("utf-8"); //在service方法开头指定编码集
// response.setCharacterEncoding("content= text/html; charset=UTF-8");错误
response.setContentType("text/html;charset=utf-8");
参数的处理:
1.请求对象的方法getParameter(" "):
获取浏览器页面的value值。参数要传name属性的值。
返回字符串类型,
页面上没有的name值,返回null.
2.请求方法:
默认的是get请求方式:
特点:提交的数据都会显示在地址栏上,
可以提交数据的大小最多为4k
相对来说不安全
post请求方式:
数据不显示在地址栏上
大小无限制
相对来说安全
处理中文乱码问题: -- 在浏览器或者是html页面可能会出现乱码
1.服务端接收浏览器端的数据时:get请求:
服务端默认用的是ISO-8859-1字符集
String username = request.getParameter("username"); //从请求对象获取请求的消息
byte[] bs = username.getBytes("iso-8859-1");
username = new String(bs,"UTF-8"); //
System.out.println(username);//输出在控制台。
此种方法也适合post请求,也可以直接:request.setCharacterEncoding("utf-8");来代替它.
post请求:
request.setCharacterEncoding("utf-8");
2. 浏览器端接受服务端的数据出现乱码时:
使用response对象设置消息头
response.setContentType("text/html;charset=utf-8");