java封装response_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);

}

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值