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

  • 相关阅读:
    前端网络安全——其他安全问题
    前端网络安全——密码安全
    前端网络安全——接入层注入
    前端网络安全——点击劫持
    mac重装系统后安装列表
    manjaro踩坑记录
    JavaScript学习过程中遇到的一些坑
    JavaScript学习
    [解决方法] 如何在没有屏幕的情况下训练一些需要显示的程序
    Python中*号的作用详解
  • 原文地址:https://www.cnblogs.com/Acmen/p/2025738.html
Copyright © 2020-2023  润新知