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()的字符乱码html
对于 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>");
以上两端编码的指定也能够使用一句替代,同时指定服务器和客户端java
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 头信息。而且地址栏最终看到的地址是和第一次请求地址不一样的,地址栏已经发生了变化。
请求转发与重定向的区别
请求转发和重定向比较:
二者均可进行跳转,根据实际需求选取便可。网络
学习更多知识,请加入企鹅群:1080355292,入群暗号(33)jsp