request、session的getparameter、getAttribute、setAttribute方法区别与联系

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

request.getParameter(),页面只跳转一次时才能够取到值,是用来取页面的值,仅取一次,取过以后,就取不到了。通常注册,登录相似的模块用这个。web

session.getAttribute()只要网页不关闭,均可以取到值,能够获取页面上的值,一般是获取放进session中的对象值。若是页面不做声明,默认是对象值是放进request中的。也能够获取session自身里面的对象值。有些对象是放进session里面的经过这个方法,能够获得。服务器

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

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

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

举例:spa

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

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


在manage_kind.jsp中:ip

<%   
 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结合上面所说的用法来传递所需的数值。

相关文章
相关标签/搜索