首页 > 编程语言 > 详细

Java Web 编码问题二:Servlet响应头的的设置

时间:2015-11-02 19:32:40      阅读:573      评论:0      收藏:0      [点我收藏+]

       通过Java Web 编码问题一:jsp的编码,我们知道我们只需要在文件中设置好编码,就基本没有问题了。但是我们们之间使用Servlet的呢?

       下面是一个简单的测试Servlet,如果保存UserInfo.saveUser(phoneNum)返回真就输出成功,否则就输出失败:

public class UserRegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final Logger log  = LogManager.getLogger();
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UserRegisterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String phoneNum = request.getParameter("phoneNum");
        log.info(phoneNum);
        if(UserInfo.saveUser(phoneNum))
            response.getWriter().append("成功");
        else
            response.getWriter().append("失败");
    }

}

          首先先看一看这一句,这是设置浏览器响应的编码:

response.setContentType("text/html;charset=utf-8");

       我们来看一看客服端浏览器在我的的Servlet中有这一句和没有这一句的其别,下面分别是在Servlet中设置了和没有设置的客服端浏览器响应头的的信息(Firefox debug):

技术分享

技术分享

        那么响应头的Content-Type对浏览器的有什么影响呢?请参见浏览器的解码过程:

http://www.w3.org/html/wg/drafts/html/master/syntax.html#parsing-with-a-known-character-encoding

       从文档中我们知道对浏览器Content-Type是有较高优先级的,如果我们服务器用的是utf-8编码,而我们没有在Content-Type中设置,那么浏览器就会使用特定的算法,或者默认的编码或者header中meta中的信息以及其它方式来进行解码,不同的浏览器有所不同。但是显然这样并不一定是正确的,比如在中国一般本地默认的是GBK的编码方式,来解UTF-8显然会出现乱码。所以建议在Servlet要想浏览器输出中文的时候用

response.setContentType("text/html;charset=utf-8");

        来设置浏览器的响应编码,当然charset可以设置为GBK或者GB18030。


Java Web 编码问题二:Servlet响应头的的设置

原文:http://my.oschina.net/u/2474629/blog/524996

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!