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

  • 相关阅读:
    链表和递归
    Async and Await
    Linux下如何对目录中的文件进行统计
    Linux系统添加自定义网卡并更改网卡接口
    运维实战:Linux系统扩展oracle数据库所在的分区
    在Linux命令行发送电子邮件附件的两种方法
    Centos7部署轻量级自动化运维工具pssh
    CentOS7中使用systemctl列出启动失败的服务
    AbstractQueuedSynchronizer详解(转)
    Oracle 11g数据导入到10g
  • 原文地址:https://www.cnblogs.com/Acmen/p/2025738.html
Copyright © 2011-2022 走看看