1. 程式人生 > 其它 >Servlet在轉發中設定編碼失效,遇到中文亂碼?

Servlet在轉發中設定編碼失效,遇到中文亂碼?

技術標籤:JavaWeb亂碼servlet

看個例子:

在servlet02中設定編碼,可以正常輸出顯示中文。

public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding
("utf-8"); resp.getWriter().print("你好,Servlet02"); } }

在這裡插入圖片描述
此時利用sevlet01轉發到servlet02後編碼失效,出現中文亂碼。

public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.
getWriter().print("你好,Servlet01"); req.getRequestDispatcher("/s02").forward(req,resp); } }

在這裡插入圖片描述
resp.getWriter().print("你好,Servlet01");前加上resp.setContentType("text/html"); resp.setCharacterEncoding("utf-8");或者將resp.getWriter().print("你好,Servlet01");

註釋掉後中文亂碼解決。(如圖)

public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.setContentType("text/html");
       resp.setCharacterEncoding("utf-8");
       resp.getWriter().print("你好,Servlet01");
       req.getRequestDispatcher("/s02").forward(req,resp);
    }
}
public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //resp.getWriter().print("你好,Servlet01");
       req.getRequestDispatcher("/s02").forward(req,resp);
    }
}

這樣Servlet01轉發到Servlet02之後就不會顯示中文亂碼了。
在這裡插入圖片描述
原因:servlet在獲取resp的輸出流的時候,首先檢查頭部資訊的編碼方式,然後根據這個編碼來載入資料,所以只要在獲取輸出流之前修改編碼(也就是resp.getWriter();前面)就不會有中文亂碼啦。