Servlet在轉發中設定編碼失效,遇到中文亂碼?
阿新 • • 發佈:2020-12-29
看個例子:
在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();
前面)就不會有中文亂碼啦。