zoukankan      html  css  js  c++  java
  • Java EE基础response和request页面跳转问题

    request.setAttribute("flag1","哈哈1");

    request.getSession().setAttribute("flag3", "测试");

    1. response.sendRedirect("/qq/success.jsp");

    PS:如果工程不是在ROOT根目录下,不要忘记加上你的工程名

    success.jsp : 

    <%
    String sessio = (String)request.getSession().getAttribute("session");
    String flag1 = (String)request.getAttribute("flag1");
    String flag2 = request.getParameter("flag2");
    %>
    SESSION : <%=sessio %>。
    FLAG1 : <%=flag1 %>。

    输出:SESSION : 测试。 FLAG1 : null。 显然getAttribute拿不到flag的值,但是Session中flag值能够拿到

    2. response.sendRedirect("/qq/success.jsp?flag2=测试");

    PS:sendRedirect可带参数在JSP前台页面上接收应是request.getParameter("flag");但是显示出来的是乱码。

    解决办法:response.sendRedirect("/qq/success.jsp?flag2="+URLEncoder.encode("哈哈", "UTF-8"));  然后在jsp页面里接收到flag后在此进行URLEncode转码

    这里我又遇到一个问题就是在success.jsp页面接收flag的值时显示是乱码,但是浏览器url里flag参数是中文的。

    于是我便再次对页面上的flag2参数进行转码。。。(蛋疼!) 

    String str = new String(flag2.getBytes("ISO-8859-1"),"UTF-8");   前者是指定按照哪种编码去读取参数,然后再进行UTF-8编码转换(我是一个个试出来的,相当纠结)

    3. request.getRequestDispather(“/success.jsp”).forward(req,resp);-也可带参数,并且不需要URL转码,在页面没有中文乱码。

    SESSION : 测试 FLAG1 : 哈哈1 FLAG2 : 哈哈2

    建议使用编码过滤器,也就没有这么多的编码问题,具体可用jar包提供的过滤器,也可以自己写个过滤器,也就是在doFilter方法里面分别写上  请求和响应传递数据时用什么编码

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    总结:

    1. response中sendRedirect客户端跳转也就是request、response对象不共用,最终导致request对象set的值在页面里拿不到

    2. encodeURL()是本应用级别的,encodeRedirectURL()是跨应用的。 都是对URL进行encode。但是在Servlet中调用不会使页面跳转,如果连续两次调用encodeURL服务器会报java.lang.IllegalArgumentException异常。

    3. 就以上说的页面跳转,如果在Session中设置了值,都可以在页面上拿到对应属性的值。

  • 相关阅读:
    模块-- HASH
    模块 –SYS
    所谓情商高,就是要有分寸感
    20个很有用的CSS技巧
    CSS3中文手册基础知识
    赠书《JavaScript高级程序设计(第三版)》5本
    能走多远,取决于你与谁同行
    谷歌网站
    开发头条精选0724
    开发头条精选0723
  • 原文地址:https://www.cnblogs.com/xmaomao/p/2995604.html
Copyright © 2011-2022 走看看