Java Web 編碼問題二:Servlet響應頭的的設置

       經過Java Web 編碼問題一:jsp的編碼,咱們知道咱們只須要在文件中設置好編碼,就基本沒有問題了。可是咱們們之間使用Servlet的呢?
html

       下面是一個簡單的測試Servlet,若是保存UserInfo.saveUser(phoneNum)返回真就輸出成功,不然就輸出失敗:java

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-encodingapp

       從文檔中咱們知道對瀏覽器Content-Type是有較高優先級的,若是咱們服務器用的是utf-8編碼,而咱們沒有在Content-Type中設置,那麼瀏覽器就會使用特定的算法,或者默認的編碼或者header中meta中的信息以及其它方式來進行解碼,不一樣的瀏覽器有所不一樣。可是顯然這樣並不必定是正確的,好比在中國通常本地默認的是GBK的編碼方式,來解UTF-8顯然會出現亂碼。因此建議在Servlet要想瀏覽器輸出中文的時候用
jsp

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

        來設置瀏覽器的響應編碼,固然charset能夠設置爲GBK或者GB18030。
測試

相關文章
相關標籤/搜索