request.setAttribute()和session.setAttribute()的区别详解

我们在Servlet和页面间传值时,经常会用到request.setAttribute()和session.setAttribute(),下面是两段示例用法

request.setAttribute()

    request.setAttribute("people",people); //第一个people是一个字符串,第二个是一个集合类型对象
            request.getRequestDispatcher("chakan.jsp").forward(request, response);
            //response.sendRedirect("chakan.jsp");   //传过去的值会是null,
            //sendRedirect不能传递request对象。使用request.setAttribute时不能使redirect而是forward。即是将请求转发而不是重定向。

request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。

request.setAttribute这个的生命周期就是request级别的,传输快,生命周期短,只能在特定页面接受。

session.setAttribute()

 HttpSession session = request.getSession();
             session.setAttribute("people",people); //第一个people是一个字符串,第二个是一个集合类型对象
             response.sendRedirect("chakan.jsp"); //发送请求

    (jsp)ArrayList <Information> B = (ArrayList<Information>) session.getAttribute(“people”); //只需要在需要的页面get就好了

session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用,session可以跨越很多页面,session的生命周期也是针对一个客户端,但是却是在别人设置的会话周期内(一般是20-30分钟),session里边的内容将一直存在,即便关闭了这个客户端浏览器 session也不一定会马上释放掉的。session就相当一个全局变量。

session.setAttribute():取得当前HttpSession,在HttpSession范围保存参数,就一直在,随时可以取来用。缺点是比较占用资源。

这些就是我个人的实践和结合阅读其他相似内容的间接,有错误欢迎指正!