浅谈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);
%>

原文地址:https://www.cnblogs.com/Acmen/p/2025738.html