你的位置:首页 > Java教程

[Java教程]servlet中文乱码问题之resp.sendError

servlet文件中包含有中文,使用javac进行编译时,要加上-encoding 指定编码格式,才可以编译通过

问题的情况如下:

 1 import java.io.IOException; 2  3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7  8 public class LoginServlet extends HttpServlet { 9   @Override10   protected void doGet(HttpServletRequest req, HttpServletResponse resp)11       throws ServletException, IOException {12     resp.setContentType("text/html;charset=UTF-8");13     14     String name=req.getParameter("username");15     String pwd=req.getParameter("password");16     17     if(name!=null&&pwd!=null&&name.equals("dai")&&pwd.equals("123")){18       resp.sendRedirect("success.html");19     }else{
20 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "服务器忙,请稍后再登录!");21 }22 }23 24 @Override25 protected void doPost(HttpServletRequest req, HttpServletResponse resp)26 throws ServletException, IOException {27 28 doGet(req, resp);29 }30 }

上面的if执行到 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "服务器忙,请稍后再登录!");

时,会返回给浏览器503错误,然而就储出现乱码了:

然后上网百度,然而并没有发现有这种情况的解决方法,只有自己思索,后来经过改代码里面

resp.setContentType("text/html;charset=gb2312");

resp.setCharacterEncoding("UTF-8");

并没有效果。

后来一想难道是编译的时候指定的编码格式GBK不行,因为如果指定的格式不对,中文解析就不会正确,然后改变编译的指定中文编码格式:

然后编译,重启tomcat

总结:servlet中含有中文的情况,javac编译时要指定正确的编码格式。