zoukankan      html  css  js  c++  java
  • request属性 request.getAttribute()

    一、request.getParameter() 和request.getAttribute() 区别

    (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。

    (2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。

    request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部

    还有一点就是,HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。

    拿一个例子来说一下吧,假如

    j1.jsp里有

      1. <!--  j1与j2为链接关系-->  
      2.   <form  method="post" action="j3.jsp">  
      3.     用户名:<input type="text" name="username">  
      4.       <input type="submit" name="submit" value="提交">  
      5. </form>  

    的话在j2.jsp中通过request.getParameter("username")方法来获得请求参数username:

    1. <%   
    2.       String s = request.getParameter("username");  
    3.       %>  
    4.       名字是:<%=s %>  


    或者j1.jsp中有

    1. <href="2.jsp?username=accp">2.jsp</a>  

    在j2.jsp中通过request.getParameter("username")来获得请求参数username。

    但是如果范围内的数据,也还是说一个例子吧。

    有j1.jsp j2.jsp和j3.jsp,   

    j1.jsp月j3.jsp为链接关系,j3.jsp与j2.jsp为转发关系

    从j1.jsp链接到j3.jsp时,被链接的是j3.jsp可以通过getParameter()方法来获得请求参数.

    j3.jsp希望向j2.jsp传递从j1.jsp获取的用户名字,如何传递这一数据呢?先在j3.jsp中调用如下setAttribute()方法:

    j1.jsp

    1. <form  method="post" action="j3.jsp">  
    2.    用户名:<input type="text" name="username">  
    3.      <input type="submit" name="submit" value="提交">  
    4. lt;/form>   

    j3.jsp

    1. <%  
    2. String username=request.getParameter("username");  
    3. request.setAttribute("username",username);  
    4. %>  
    5. <jsp:forward page="j2.jsp" />  
    6.   
    7. <!-- j1到j3,j3到j2是一个request对象, request.setAttribute(),给request对象设置一个属性,然后在另一个页面中获取 -->  


    j2.jsp

    1. <% String username=(String)request.getAttribute("username"); %>  
    2.      j2页面,用户名:<%=username %>  


    二、从更深的层次考虑

    request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端。request.getParameter()方法返回String类型的数据。

    request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。
    getParameter得到的都是String类型的。或者是http://a.jspid=123中的123,或者是某个表单提交过去的数据。

    getAttribute则可以是对象。
    getParameter()是获取POST/GET传递的参数值;
    getAttribute()是获取对象容器中的数据值;
    getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。

    getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。

    setAttribute是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另 一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周 期不一样而已。

    getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。

    另外,JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端,若想使他们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面的用法来传递所需要的参数。

  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/Seachal/p/5389796.html
Copyright © 2011-2022 走看看