`

request.setAttribute()、session.setAttribute()和request.getParameter()的联系与区别

 
阅读更多

原文出处http://blog.163.com/magicc_love/blog/static/185853662201111124510916/

 

1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。

2.request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。

3.request.getParameter()表示接收参数,参数为页面提交的参数。包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter()),而且接收参数返回的不是Object,而是String类型。

举例:

session.setAttribute("kindresult", result);    //result 为StringBuffer类型对象

response.sendRedirect("../manage_kind.jsp");


在manage_kind.jsp中:

<%   
 StringBuffer kindresult=new StringBuffer();
 kindresult=(StringBuffer)session.getAttribute("kindresult");
 %>

<%=kindresult%>

##################################################################

我在servlet中使用了request.setAttribute()存储信息。
 语法如下:request.setAttribute("user","1234");
 然后 response.sendRedirect("/hello.jsp");
 但是在我的hello.jsp中 request.getAttribute("user");
 返回值为null,为什么没有取到String "1234"?

在这里就要注意了,sendRedirect不能传递request对象。使用request.setAttribute时不能使redirect而是forward。即是将请求转发而不是重定向。

你可以使用getServletContext().getRequestDispatcher("/hello.jsp").forward(request,response)转到hello.jsp页面,对客户端而言它意识不到是hello.jsp页面响应它。
 request对象和response对象是一样的,当然你的参数就可以传递过去了。

你使用response.sendRedirect("/hello.jsp");转到hello.jsp之后,request对象是新建的,你的属性值自然没有了。但是如果你使用session代替request就还是可以的。
 session.setAttribute("user","1234");
 session.getAttribute("user");

#####################################################################################

4.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()方法。

拿一个例子来说一下吧,假如两个WEB页面间为链接关系时,就是说要从1.jsp链接到2.jsp时,被链接的是2.jsp可以通过getParameter()方法来获得请求参数.

假如1.jsp里有

<form name="form1" method="post" action="2.jsp">
 请输入用户姓名:<input type="text" name="username">
 <input type="submit" name="Submit" value="提交">
 </form>

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

< % String username=request.getParameter("username"); %>

但是如果两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据,也还是说一个例子吧。

有1.jsp和2.jsp

1.jsp希望向2.jsp传递当前的用户名字,如何传递这一数据呢?先在1.jsp中调用如下setAttribute()方法:

<%
 String username=request.getParameter("username");
 request.setAttribute("username",username);
 %>

<jsp:forward page="2.jsp" />

在2.jsp中通过getAttribute()方法获得用户名字:
 <% String username=(String)request.getAttribute("username"); %>

5.request.getAttribute()与request.setAttribute()

request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。

而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。

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

分享到:
评论

相关推荐

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

    通过上述分析,我们可以清楚地看到`request.getParameter()`与`request.getAttribute()`在功能、用途及使用场景上的区别,这将有助于开发者在实际项目中更加合理地选择和应用这些方法,提高代码的效率和可维护性。

    了解JSP中request属性的用法

    request.getParameter() 和 request.getAttribute() 是两个最常用的方法来获取客户端的请求信息,但是它们的用法和作用域却有很大的区别。 request.getParameter() 方法是用来获取客户端通过 HTTP 协议传递的参数,...

    数据库测试test.sql

    // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // this.login(request,response); // }else if("register".equals(method...

    Jsp的request的用法

    在本篇文章中,我们将深入探讨`request.getParameter()`和`request.setAttribute()`以及`request.getAttribute()`的区别,并提供相关示例来帮助理解它们的用法。 **一、request.getParameter() 和 request....

    访问或添加三个范围的属性与获取Request-Session-ServletContext-Response对象.rar

    通过`request.getParameter()`可以获取URL传递的参数,`request.getAttribute()`和`request.setAttribute()`则可以在请求之间传递数据,但只限于当前请求链路。 2. HttpSession对象: Session对象用于在用户的不同...

    很经典的登录回选。

    // session.setAttribute("redirectUrl", request.getRequestURL().append("?").append(request.getQueryString()).toString()); String url = request.getParameter("url"); URLEncoder.encode(URLDecoder....

    java小项目

    String name = request.getParameter("userName"); String pwd = request.getParameter("pwd"); User u = uDao.findUserByNameAndPwd(name, pwd); MsgDao mDao = new MsgDaoImpl(); List&lt;Message&gt; msgList = ...

    session.getAttribute

    ### `request.getParameter()` 和 `session.getAttribute()` 的区别 #### 1. **作用范围** - **`request.getParameter()`**:此方法用于从当前 HTTP 请求中获取参数的值。这些参数通常来源于 HTML 表单或 URL 查询...

    在JSP中使用Session制作简单的登录模块

    &lt;br&gt;if (Name.equals("mike") && Password.equals("1234")) { session.setAttribute("Login", "OK"); response.sendRedirect("Member.jsp"); } else { out.println("登录错误,请输入正确名称...

    getAttribute和getParameter区别

    ### getAttribute与getParameter的区别 在Java Web开发中,`getAttribute`和`getParameter`是两个非常重要的方法,它们分别用于获取不同的数据。理解这两个方法的区别对于正确处理用户请求和页面间的数据传递至关...

    JSp程序设计作业4.14.docx

    可以使用`session.getAttribute()`和`session.setAttribute()`来获取和设置session中的数据。例如,每次用户访问时,可以增加一个计数器,然后将计数值保存在session中,显示“您是第n位访问者”。 4. **表单验证**...

    基于servlet的购物车

    //得到书号和书本对象 int bookid =Integer.parseInt(request.getParameter("id")); Map, Book&gt; books = (Map, Book&gt;)request.getSession().getServletContext().getAttribute("books"); Book book = books....

    总结JSP与servlet之间的传值

    本文将详细讲解JSP与Servlet之间如何进行数据传递,包括JSP向Servlet传值和Servlet向JSP传值的多种方法。 一、JSP向Servlet传值 1. Form表单传递: 当用户在JSP页面上填写表单并提交时,表单数据会被封装到...

    JSP几种页面间传递参数实现的方法

    需要注意的是,在取得参数时,需要进行类型转换,这是因为放置在session和request中的对象的属性被看作java.lang.Object类型的了,如果不转换,在将直付给value时会报ClassCastException异常。 4. 使用session实现...

    JSP 在servlet中使用session

    Session技术则是在客户端与服务器之间维护状态的一种方式,尤其适用于多页面间的用户信息共享。本篇文章将深入探讨如何在Servlet中使用session,并通过一个猜数字的小游戏来实践这个概念。 首先,理解什么是session...

    pageContext-request-session-application的使用及区别

    ### pageContext-request-session-application的使用及区别 #### 一、概述 在Web开发中,`pageContext`, `request`, `session`, 和 `application` 是四个非常重要的内置对象,它们分别代表了不同作用域内的数据存储...

    jsp页面间通过request/session传值

    本篇文章将详细介绍如何利用 JSP 的 `request` 和 `session` 对象来实现数据的跨页面传递。 #### 二、Request 对象概述 `HttpServletRequest` 是一个标准的 Servlet 接口,用于获取客户端请求中的信息。当用户提交...

    JSP2_0技术学习笔记

    `request.setAttribute()`和`request.getAttribute()`用于在Request范围内操作变量。 3. **Session范围**:Session范围适用于需要在用户会话期间持久化数据的情况。一旦数据被存储在Session中,它可以在用户与...

    session存用户名密码实现用户登录和退出

    session.setAttribute("username", username); // 存储用户名到Session response.sendRedirect("success.jsp"); // 跳转到成功页面 } else { // 错误处理,如重定向到错误页面 } ``` 3. **验证Session**:在...

    计算机基础课程教学平台+毕业设计+源代码

    //sql语句,从user表中选择出username和userpassword与用户填入的一样的数据 String sql = "select * from user where username = '" + username + "' and userpassword = '" + userpassword + "'"; ResultSet ...

Global site tag (gtag.js) - Google Analytics