Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据的是HttpServletResponse,从客户端取数据的是HttpServletRequest;HttpServletResponse对象可以向客户端发送三种类型的数据分别为1)响应消息头2)状态码3)消息正文,Servlet API中定义的ServletResponse接口类用于创建响应消息。
HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息,定义了一系列用于描述各种HTTP状态码的常量。在service()方法内部调用HttpServletResponse对象的各种方法来创建响应消息。具体查看HttpServletResponse的API。下面本站素文宅 www.yoodb.com 为大家分享封装源代码,仅供大家学习参考。
在SpringMVC中Controller的某个方法上加@ResponseBody注解,表示该方法的返回结果直接写入HTTP response body中,但是实际使用中发现最后生成的response中"Content-Type"的值不正确,导致浏览器不能正确处理返回的内容,因此此方式不建议使用。
HttpServletResponse对象的帮助工具类,具体代码如下:
package com.portal.app.todo.tools; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author 素文宅 * 来源 www.yoodb.com * HttpServletResponse帮助工具类 */ public final class ResponseUtils { public static final Logger log = LoggerFactory.getLogger(ResponseUtils.class); /** * 发送文本使用UTF-8编码 * @param response * HttpServletResponse * @param text * 发送的字符串 */ public static void renderText(HttpServletResponse response, String text) { render(response, "text/plain;charset=UTF-8", text); } /** * 发送json使用UTF-8编码 * @param response * HttpServletResponse * @param text * 发送的字符串 */ public static void renderJson(HttpServletResponse response, String text) { render(response, "application/json;charset=UTF-8", text); } /** * 发送xml使用UTF-8编码 * @param response * HttpServletResponse * @param text * 发送的字符串 */ public static void renderXml(HttpServletResponse response, String text) { render(response, "text/xml;charset=UTF-8", text); } /** * 发送内容使用UTF-8编码 * @param response * @param contentType * @param text */ public static void render(HttpServletResponse response, String contentType, String text) { response.setContentType(contentType); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); try { response.getWriter().write(text); } catch (IOException e) { log.error(e.getMessage(), e); } } }
本站 www.yoodb.com 总结:
1)ServletResponse接口中定义了setCharacterEncoding、setContentType和setLocale等方法来指定ServletResponse.getWriter方法返回的PrintWriter对象所使用的字符集编码,调用ServletResponse接口中定义的setContentType方法,在HTTP响应消息的Content-Type头字段中指定响应正文的字符集编码。
2)禁止浏览器缓存当前文档内容,具体代码如下:
response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0);
3)Java程序中的字符文本在内存中是以unicode编码的形式存在的,PrintWriter对象在输出字符文本时,需要先将它们转换成其他某种字符集编码的字节数组后输出。
4)浏览器接收到的中文字符并不是中文符号本身,而是它的某种字符集编码的数据,因此浏览器必须使用正确的字符集编码进行查看,才能将它所接收到的数据显示为正确的中文字符。