request
(1)request的setAttribute()与getAttribute()方法一般都是成对出现,首先通过setAttribute()方法设置属性与属性值,然后通过getAttribute()方法根据属性获取到与该属性对应的对象值。setAttribute()与getAttribute()方法都是在服务器端内部执行,客户端并不清楚。(注意:getAttribute()之后需要进行向下类型转换,将属性值转换为真正的对象)
(2)request的getParameter()方法是获取到客户端通过表单或url请求参数所发送过来的参数值,是客户端与服务器之间的交互,服务器要想获取到客户端发送过来的数据,就需要使用getParameter()方法来获取。没有与之对应的setParameter()方法。
Session
(1)session也存在setAttribute()和与之对应的getAttribute()方法。但与request不同的是,session对象内数据的存活范围也就是session对象的存活范围(只要浏览器不关闭,session对象就会一直存在),因此,在同一个浏览器窗口中,无论向服务器端发送多少个请求,session对象只有一个。
(2)Request对象内数据的存活范围就是在request对象的存活范围内,当客户端向服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了;之后再向服务器发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象锁存放的对象无任何关系,因此也无法获得在它之前的request对象所存放的数据。
Application
(1)存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程中application只有一个。
联系与区别:request,session以及application3个对象的范围是逐个增加的;request只在一个请求范围内;session是在浏览器串口的范围内;application则是在整个服务器的运行过程中。
示例:实现一个网页计数器来模拟三种对象作用范围。
request.jsp
<% if (request.getAttribute("counter") == null) { request.setAttribute("counter", "1"); } else { System.out.println("else"); String strnum = null; strnum = (String)request.getAttribute("counter"); int icount = 0; icount = Integer.valueOf(strnum).intValue(); icount++; request.setAttribute("counter", Integer.toString(icount)); } %> 您是第<%= request.getAttribute("counter") %> 位访问者!
request对象下,刷新网站,计数器保持不变。(每刷新一次request对象即请求一次,服务器返回一个响应后即销毁。)
将代码中的request对象统统改为session对象。再次运行。
关闭浏览器之前:
更换浏览器再此运行,session对象的存活范围在关闭浏览器或更换浏览器后便失效。
最后更改代码中session对象为application对象。运行。此时服务器并没有关闭,启用两款浏览器,发现依然有效。
web初学之request,session与application
原文:http://www.cnblogs.com/smithhan/p/5156159.html