文档章节

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

trayvon
 trayvon
发布于 2015/11/02 18:21
字数 576
阅读 1546
收藏 2

       通过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。


© 著作权归作者所有

trayvon
粉丝 16
博文 141
码字总数 214168
作品 1
程序员
私信 提问
ContentType,charset和pageEncoding的区别

ContentType 属性指定响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/HTML。   语法  Response.ContentType [= ContentType ]   参数   ContentType pageEncoding是jsp...

Glogo
2013/02/19
205
0
Jsp 和 Servlet 有什么不同?

面试中被问到了 Jsp 和 Servlet 有什么不同?在这里总结分享下。 回答思路先分别进行基本介绍,然后分析说明两者相同点和不同点。 基本介绍 Servlet: Servlet 是一种服务器端的Java应用程序...

几个栗子
2018/08/22
153
3
(JavaEE-07)JSP.md

JSP JSP全称是Java Server Pages,它和Servlet技术一样,都是SUN公司定义的一种用于开发动态Web资源的技术。JSP的编写就像编写HTML一样简单,但是与HTML不同的是,在JSP中,可以编写Java代码...

_-Leon-_
2014/07/04
109
0
jsp简介

Jsp简介 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和...

晨曦之光
2012/05/16
297
0
JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

一、使用eclipse初始化一个JSP WEB项目(即:动态WEB项目),步骤如下: 如上图示注意选择TOMCAT版本 如上图示勾选生成web.xml,当然如果不勾选也行,但后续如果有需要用到配置的地方就需要再单...

编程SHA
04/20
17
0

没有更多内容

加载失败,请刷新页面

加载更多

JS 打印控制

JS 打印控制 var PrintStartString = "<!--打印开始标示符-->";//设置打印开始区域var PrintEndString = "<!--打印结束标示符-->";//设置打印结束区域var HtmlText = window.do......

DrChenXX
19分钟前
5
0
LevelDB:使用介绍

LevelDB 提供的接口其实很简单,下面举例进行简单说明。 安装 git clone https://github.com/google/leveldb cd leveldb mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. ......

slagga
24分钟前
5
0
《JavaScript正则表达式迷你书》读书笔记

正则基础 常见简写形式 字符组 具体含义 记忆方式 \d 表示 [0-9]。表示是一位数字。 其英文是 digit(数字) \D 表示 [^0-9]。表示除数字外的任意字符。 \w 表示 [0-9a-zA-Z_]。表示数字、大小...

muzi131313
29分钟前
4
0
Git的反悔操作

概述 这次主要来讲讲Git的反悔操作,自己平时在写代码的过程中经常会出现想要弃用所有的改动或回滚到上一次commit的情况。Git上的反悔操作有reset、rebase、revert等,每个操作各有区别和对应...

duduYZ
29分钟前
2
0
实现双向绑定Proxy比defineproperty优劣如何?

前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向...

寻找海蓝
41分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部