原创

Java针对HttpServletResponse对象的帮助类封装分析

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)浏览器接收到的中文字符并不是中文符号本身,而是它的某种字符集编码的数据,因此浏览器必须使用正确的字符集编码进行查看,才能将它所接收到的数据显示为正确的中文字符。

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信