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     @Override
10     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 @Override 25 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编译时要指定正确的编码格式。

posted @ 2016-06-05 18:29  becauseCode  阅读(1680)  评论(0编辑  收藏  举报