zoukankan      html  css  js  c++  java
  • JSP 页面传值方法总结

      JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧。

      试着将各种方式总结下来,需要时可以进行权衡利弊选择最合适的方式。

    1. URL 链接后追加参数

    <a href="next.jsp?paramA=A&paramB=B...">URL 后面追加参数</a>
    
    <jsp:include page="next.jsp"><jsp:param name="paramA" value="A"/></jsp:include> 
    
    <jsp:forward page="next.jsp"><jsp:param name="paramA" value="B"/></jsp:forward> 
    
    response.sendRedirect("next.jsp?paramA=A&paramB=B...")
    
    window.location = "next.jsp?paramA=A&paramB=B..."

       上述几种代码执行时都将携带参数跳转到 next.jsp 页面中。

       在 next.jsp 页面中获取对应参数的方式如下:

    //内嵌的 java 代码
    <%String paramA = request.getParameter("paramA"); %>
    
    //如果引入了 EL
    {param.paramA}

       优点:简单性和多浏览器支持(没有浏览器不支持URL)。

    缺点:

       1)传输的数据只能是字符串,对数据类型和大小都有一定的限制;

       2)传输数据的值会在浏览器地址栏里面被看到,安全性等级低。

    2. Form

        <form action="next.jsp" method="post">  
            <input type="text" name="paramA" value="A"> 
            <input type="hidden" name="paramB" value="B">  
            <input type="submit" value="提交">  
        </form>  

         在 next.jsp 页面中获取对应参数的方式与 (1)是类似的。

    优点:

    1)简单性和多浏览器支持(同样没有浏览器不支持 form);

    2) 可以提交的数据量比 URL 方式要大的多;

    3)传输的值会在浏览器的地址栏中显示出来,但是有一点黑手段的同样能从页面源码中将参数列表构造出来;

    缺点:

    1)传输的数据也只能是字符串,对数据类型有一定的限制;

    3. 设置 Cookie

       用客户端的认证凭证小小 Cookie 当然也能实现 JSP 页面的传值。

        <%  
            Cookie c=new Cookie("paramA","A");  
            c.setMaxAge(60*60);  //cookie 有效期1分钟
            response.addCookie(c);  //将cookie 添加到 http响应中
         %>

       想要在 next.jsp 页面读取 cookie,需要调用 request.getCookies() 方法来获得一个javax.servlet.http.Cookie 对象的数组。

       然后遍历这个数组,使用getName()方法和getValue()方法来获取每一个cookie的名称和值。

    //内嵌的 java 代码
    <%
       Cookie cookie = null;
       // 获取cookies的数据,是一个数组
       Cookie[] cookies = request.getCookies();
       if(cookies != null ){
          for (int i = 0; i < cookies.length; i++){
             cookie = cookies[i];
             out.print("参数名 : " + cookie.getName());
             out.print("<br>");
             out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
             out.print("------------------------------------<br>");
          }
      }else{
          out.println("<h2>没有发现 Cookie</h2>");
      }
    %>
    
    //EL 获取方式
    ${cookie.paramA.value}

    优点:

    1)Cookie 的值能够持久化,即使客户端机器关闭,下次打开还是可以得到里面的值;

    2) Cookie 可以帮助服务器端保存多个状态信息,但是不用服务器端专门分配存储资源,减轻了服务器端的负担。

    缺点:

    1)虽然安全性相比 URL 和 Form 要提高了许多,但是也存在黑手段获取客户端 cookie,暴露客户信息。

    4. 设置 Session

       个人认为 session 和 cookie 一个在服务端一个在客户端。

       在它们中添加键值对后,不仅仅是提供了页面之间的传递,其实是一种数据共享的解决方案。

     <%       
        session.setAttribute("paramA","A");  
        response.sendRedirect("next.jsp"); 
     %>

        想要在 next.jsp 读取 session 的方法:

    //内嵌java 片段
    <%=session.getAttribute("paramA") %>
    
    //EL 获取方式
    {session.paramA}

       Session 的优缺点可以参照 Cookie。

  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/java-class/p/6358964.html
Copyright © 2011-2022 走看看