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