原创

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),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信