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