Request & Response
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表
请求的request对象、和代表响应的response对象。
获取客户机提交过来的数据---->>>request对象
要向客户机输出数据---------->>>response对象
HttpServletResponse
HttpServletResponse对象服务器的响应。
HTTP协议:
状态行
响应头
实体内容
看到HttpServletResponse对象 响应 那么一定有提供关于响应的服务
状态码、响应头、实体数据的方法。
setStatus(int sc)
setHeader(java.lang.String name,java.lang.String value)
getWriter()
getOutputStream()
首先我们要浏览HTTP响应的列表
HTTP/1.1 200 OK----------------------------->状态行用于描述服务器对请求的处理
结果。
Server:Microsoft-IIS/5.0--------------------> 消息头用于描述服务器的基本信息
,以及
Date:Thu,13 Jul 2000 05:46:53 GMT----------->数据的描述,服务器通过这些数据的
描述信
Content-Length:2291------------------------->息,可以通知客户端如何处理等一会
儿它回
Content-Type:text/html---------------------->送的数据。
Cache-control:private----------------------->代表服务器向客户端回送的数据。
响应头和请求头是可以同存在多个同名的。
案例一:向浏览器输出一段数据。
方法一:用getOutputStream()获得一个ServletOutputStream字节流输出数据
此方法按字节输出数据,如果输出的数据是表示一段字段的字节数据,则一定
要只i的那个浏览器以什么码表解码,如果指定错吗表就会有乱码问题,浏览器
默认用平台码表打开。
resposne.setHeader("content-type","text/html;charset=utf-8");
多学一点:可以在html中用
<meta http-equiv="" content=""> 来模拟响应头信息
方法二:用getWriter()获得一个PrintWriter字符输出数据。
response会默认以 ISO8859-1将需要输出到浏览器的字符进行解码,如果
输出的字符在ISO8859-1中不存在,就会导致乱码问题。
明确指定utf-8码表,
response.getOutputStream().write("中国".getBytes("utf-8"));
//你可以设置浏览器的头,让浏览器以utf-8进行查看
response.setHeader("Content-Type","text/html;charset=utf-8");
服务器WEB
response.getWriter().write("北京");
"北京".getByte("iso8859-1");
?0100--
?0100--
客户端
无论采用什么编码格式查看都是编码
解决方案:
response.setCharacterEncoding("gbk");//告诉服务器采用gbk格式进行编码
你可能回想如果用户不采用gbk格式查看呢?
那么采用万无一失的方案:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type","text/html;charset=utf-8");
--->以上两行代码效果等同于--》
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("北京");
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表
请求的request对象、和代表响应的response对象。
获取客户机提交过来的数据---->>>request对象
要向客户机输出数据---------->>>response对象
HttpServletResponse
HttpServletResponse对象服务器的响应。
HTTP协议:
状态行
响应头
实体内容
看到HttpServletResponse对象 响应 那么一定有提供关于响应的服务
状态码、响应头、实体数据的方法。
setStatus(int sc)
setHeader(java.lang.String name,java.lang.String value)
getWriter()
getOutputStream()
首先我们要浏览HTTP响应的列表
HTTP/1.1 200 OK----------------------------->状态行用于描述服务器对请求的处理
结果。
Server:Microsoft-IIS/5.0--------------------> 消息头用于描述服务器的基本信息
,以及
Date:Thu,13 Jul 2000 05:46:53 GMT----------->数据的描述,服务器通过这些数据的
描述信
Content-Length:2291------------------------->息,可以通知客户端如何处理等一会
儿它回
Content-Type:text/html---------------------->送的数据。
Cache-control:private----------------------->代表服务器向客户端回送的数据。
响应头和请求头是可以同存在多个同名的。
案例一:向浏览器输出一段数据。
方法一:用getOutputStream()获得一个ServletOutputStream字节流输出数据
此方法按字节输出数据,如果输出的数据是表示一段字段的字节数据,则一定
要只i的那个浏览器以什么码表解码,如果指定错吗表就会有乱码问题,浏览器
默认用平台码表打开。
resposne.setHeader("content-type","text/html;charset=utf-8");
多学一点:可以在html中用
<meta http-equiv="" content=""> 来模拟响应头信息
方法二:用getWriter()获得一个PrintWriter字符输出数据。
response会默认以 ISO8859-1将需要输出到浏览器的字符进行解码,如果
输出的字符在ISO8859-1中不存在,就会导致乱码问题。
明确指定utf-8码表,
response.getOutputStream().write("中国".getBytes("utf-8"));
//你可以设置浏览器的头,让浏览器以utf-8进行查看
response.setHeader("Content-Type","text/html;charset=utf-8");
服务器WEB
response.getWriter().write("北京");
"北京".getByte("iso8859-1");
?0100--
?0100--
客户端
无论采用什么编码格式查看都是编码
解决方案:
response.setCharacterEncoding("gbk");//告诉服务器采用gbk格式进行编码
你可能回想如果用户不采用gbk格式查看呢?
那么采用万无一失的方案:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type","text/html;charset=utf-8");
--->以上两行代码效果等同于--》
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("北京");