zoukankan      html  css  js  c++  java
  • 浅谈JSP传值

    http://developer.51cto.com/art/200907/133720.htm

    链接处

    解决方案:

    1.在sendRedirect的请求中,?子句必须手动进行URLEncoding。如:


    String message = URLEncoder.encode("输入成功", "UTF-8");
    response.sendRedirect("A.jsp?message=" + message);

    2.A.jsp接收到的message需要进行一定的处理。如

    <%
    String tmp = request.getParameter("message");
    tmp = new String(tmp.getBytes("ISO-8859-1"), "UTF-8");
    %>
    <%=tmp%>

    如果你用的是Tomcat,在server.xml中设置了Connector的URIencoding标签属性。例如:
    <Connector connectionTimeout="40000" port="8080" protocol="HTTP/1.1"
       URIEncoding="UTF-8" redirectPort="8443"/> ,那么不用第二步就能得到message 的中文值,

    就是说不用再放到字节数组里再设置编码类型了,但是上面两步是准确完整的办法。

    乱码‍原因:sendRedirect里面的URL传参是通过GET方法,会被强行转换成ISO-8859-1来传输,

    sendRedirect之前用response.setCharacterEncoding("GBK")无效

    详细例子

    以下二个jsp文件可以很好的说明问题
    传递参数文件test1.jsp:
    <%@ page language="java" pageEncoding="gbk"%>
    <%
        //‍String user_name=request.getParameter("user_name");

       //‍String user_password=request.getParameter("user_password");

       //这里是对系统登录是的密码检测的跳转页面,不加‍URLEncoder.encode(user_name,"UTF-8")的话就会乱码

       //response.sendRedirect("test2.jsp?user_name="+user_name+"user_password="+user_password);

    String errmsg="传递的中文";

       errmsg=java.net.URLEncoder.encode(errmsg,"UTF-8");
       response.sendRedirect("test2.jsp?errmsg="+errmsg);
    %>

    接收参数文件
    <%@ page language="java" pageEncoding="gbk"%>
    <%
      
    String errmsg=new String((request.getParameter("errmsg")).getBytes("ISO-8859-1"),"utf-8");//重要的方法
    out.print("errmsg="+errmsg);
    %>

  • 相关阅读:
    Linux
    python 鸢尾花数据集报表展示
    python 词云
    毕业设计回顾
    editor.md
    杂记
    垃圾回收器
    杂记
    随笔
    杂记
  • 原文地址:https://www.cnblogs.com/Acmen/p/2025738.html
Copyright © 2011-2022 走看看