• jsp的servlet容器跳转是出现乱码(转载) 挺经典的


    今天写程序时,用一个Servlet跳转到JSP页面后该JSP页面出现乱码,但是直接在IE运行该JSP不出现乱码

    出问题的代码如下:

    1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2.         // TODO Auto-generated method stub
    3.         
    4.         PrintWriter out = response.getWriter();
    5.         response.setContentType("type=text/html; charset=GBK");
    6.         String username = request.getParameter("username");
    7.         out = response.getWriter();
    8.         out.println("<html><head><title>处理</title></head><body>");
    9.         Check check = new Check();
    10.         check.setName(username);
    11.         System.out.println(check.getName());
    12.         
    13.         if(check.checkName()){
    14.             request.setAttribute("username", check.getName());
    15.             request.getRequestDispatcher("login_success.jsp").forward(request, response);
    16.         }else
    17.             request.getRequestDispatcher("faile.jsp").forward(request, response);
    18.         out.println("</body></html>");
    19.     }      

     问题如下:如果用该servlet运行跳转到JSP页面,就会出现乱码,如果把PrintWriter out去掉,就不会出现乱码。

    具体原因:因为在设置编码之前就获得PrintWriter对象,所以必然出现乱码

    解决办法:在获得PrintWriter对象之前就设置好编码,这样就不会出现问题

    正确代码:

    1. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2.         // TODO Auto-generated method stub
    3.         
    4.         request.setCharacterEncoding("GBK");
    5.         response.setContentType("GBK");
    6.         PrintWriter out = null;
    7.         response.setContentType("type=text/html; charset=GBK");
    8.         String username = request.getParameter("username");
    9.         username = new String(username.getBytes("iso-8859-1"),"GBK");
    10.         out = response.getWriter();
    11.         out.println("<html><head><title>处理</title></head><body>");
    12.         Check check = new Check();
    13.         check.setName(username);
    14.         System.out.println(check.getName());
    15.         
    16.         if(check.checkName()){
    17.             request.setAttribute("username", check.getName());
    18.             request.getRequestDispatcher("login_success.jsp").forward(request, response);
    19.         }else
    20.             request.getRequestDispatcher("faile.jsp").forward(request, response);
    21.         out.println("</body></html>");
    22.     }           

    这样就解决问题了

  • 相关阅读:
    Linux0.11之初识Makefile/build.c
    主机(windows10)虚拟机(ubuntu18)arm板(linux3.4)相互ping通
    windows上利用dhcpsrv搭建DHCP服务器
    《剑指offer》面试题27 二叉搜索树与双向链表 Java版
    《剑指offer》面试题26 复杂链表的复制 Java版
    《剑指offer》面试题25 二叉树中和为某一值的路径 Java版
    《剑指offer》面试题24 二叉搜索树的后序遍历序列 Java版
    异常处理
    三元表达式、列表推导式、生成器表达式、匿名函数、内置函数、递归调用与二分法的简单认识
    迭代器与生成器
  • 原文地址:https://www.cnblogs.com/xiohao/p/3070362.html
Copyright © 2020-2023  润新知