共计 2483 个字符,预计需要花费 7 分钟才能阅读完成。
HttpServletResponse 对象
Web 服务器收到客户端的 http 申请,会针对每一次申请,别离创立一个用于 代表申请 的 request 对象和 代表响应 的 response 对象。
request 和 response 对象代表申请和响应:获取客户端数据,须要通过 request 对象;向客户端输入数据,须要通过 response 对象。
HttpServletResponse 的次要性能用于服务器对客户端的申请进行响应,将 Web 服务器解决后的后果返回给客户端。service()办法中形参接管的是 HttpServletResponse 接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的办法。
响应数据
接管到客户端申请后,能够通过 HttpServletResponse 对象间接进行响应,响应时须要获取输入流。
有两种模式:
getWriter() 获取字符流(只能响应回字符)
getOutputStream() 获取字节流(能响应所有数据)
响应回的数据到客户端被浏览器解析。
<font color=”red”> 留神:两者不能同时应用。</font>
// 字符输入流
PrintWriter writer = response.getWriter();
writer.write("Hello");
writer.write("<h2>Hello</h2>");
// 字节输入流
ServletOutputStream out = response.getOutputStream();
out.write("Hello".getBytes());
out.write("<h2>Hello</h2>".getBytes());
设置响应类型,默认是字符串
// 设置响应 MIME 类型
response.setHeader("content-type","text/html"); // html
响应乱码问题
在响应中,如果咱们响应的内容中含有中文,则有可能呈现乱码。这是因为服务器响应的数据也会通过网络传输,服务器端有一种编码方式,在客户端也存在一种编码方式,当两端应用的编码方式不同时则呈现乱码。
getWriter()的字符乱码
对于 getWriter()获取到的字符流,响应中文必然出乱码,因为服务器端在进行编码时默认会应用 ISO-8859-1 格局的编码,该编码方式并不反对中文。
要解决该种乱码只能在服务器端 告知服务器 应用一种可能反对中文的编码格局,比方咱们通常用的 ”UTF-8″。
response.setCharacterEncoding("UTF-8");
此时还只实现了一半的工作,要保证数据正确显示,还须要 指定客户端 的解码形式。
response.setHeader("content-type", "text/html;charset=UTF-8");
两端指定编码后,乱码就解决了。一句话:<font color=”red”> 保障发送端和接收端的编码统一 </font>
// 设置服务端的编码
response.setCharacterEncoding("UTF-8");
// 设置客户端的响应类型及编码
response.setHeader("content-type","text/html;charset=UTF-8");
// 失去字符输入流
PrintWriter writer = response.getWriter();
writer.write("<h2> 你好 </h2>");
以上两端编码的指定也能够应用一句代替,同时指定服务器和客户端
response.setContentType("text/html;charset=UTF-8");
getOutputStream()字节乱码
对于 getOutputStream()形式获取到的字节流,响应中文时,因为自身就是传输的字节,所以此时可能呈现乱码,也可能正确显示。当服务器端给的字节恰好和客户端应用的编码方式统一时则文本正确显示,否则呈现乱码。无论如何咱们都应该精确把握服务器和客户端应用的是那种编码格局,以确保数据正确显示。
指定客户端和服务器应用的编码方式统一。
response.setHeader("content-type","text/html;charset=UTF-8");
// 设置客户端的编码及响应类型
ServletOutputStream out = response.getOutputStream();
response.setHeader("content-type","text/html;charset=UTF-8");
out.write("<h2> 你好 </h2>".getBytes("UTF-8"));
同样也能够应用一句代替
// 设置客户端与服务端的编码
response.setContentType("text/html;charset=UTF-8");
总结:要想解决响应的乱码,只须要保障应用反对中文的编码格局。并且保障服务器端 和客户端应用雷同的编码方式即可。
重定向
重定向是一种服务器领导,客户端的行为。客户端收回第一个申请,被服务器接管解决后,服务器会进行响应,在响应的同时,服务器会给客户端一个新的地址(下次申请的地址 response.sendRedirect(url);),当客户端接管到响应后,会立即、马上、主动依据服务器给的新地址发动第二个申请,服务器接管申请并作出响应,重定向实现。
从形容中能够看出重定向当中有两个申请存在,并且属于客户端行为。
// 重定向跳转到 index.jsp
response.sendRedirect("index.jsp");
通过观察浏览器咱们发现第一次申请取得的响应码为 302,并且含有一个 location 头信息。并且地址栏最终看到的地址是和第一次申请地址不同的,地址栏曾经产生了变动。
申请转发与重定向的区别
申请转发和重定向比拟:
两者都可进行跳转,依据理论需要选取即可。
加 VX 理解点我扫码支付
学习更多常识,请退出企鹅群:1080355292,入群暗号(33)