事先说明几个常见的内置对象:
out:用于向客户输出数据
request:主要用于客户端请求的数据信息
response:用于响应客户端请求并向客户端输出信息
session:用于记录会话状态的相关信息
application:类似于系统的全局变量,用于实现web应用中的资源共享
使用session可以保存当前用户的会话状态信息,一个人用户对应一个session,但是如果要访问人数,需要web应用系统中的所有用户共享,这时候就要用到application。
application对象类似于系统的“全局变量”用于同一个应用内的所有用户之间数据共享。
例子:
<%
Integer count=(Integer)application.getAttribute("count");
if(count!=null){
count=count+1;
}else{
count=1;
}
%>
展示页面
<%
Integer i=(Integer)application.getAttribute("count");
out.print("统计访问量:目前有"+i+"个人访问过本网站");
%>
application作用域是针对整个web应用,被该应用下所有用户所共享,在web应用运行期间,所有页面都可以访问application作用域内的变量,其作用域做大,application作用域通过application对象的setAttribute()和getAttribute()方法访问。
例子:
testOne.jsp页面
<%
String app="abc";
String ses="session";
session.setAttribute("sesName",ses);
applicatin.setAttribute("appNmae",app);
response.sendRedirect("xxxxx.jsp");
%>
testTwo.jsp页面:
app:<%=session.getAttribute("sesName")%>
ses:<%=application.getAttribute("appNmae")%>
如果运行testOne页面则输出:
app:abc
ses:session
如果直接运行testTwo.jsp页面
app:abc
ses:null
说明原因:
由于session作用域是针对当前会话,多个会话之间不能共享,所以无法读取ses变量。而application作用域是正对整个应用,所以appName变量可以被再次读取(注:若重启web应用,现有的application作用域会失效)
对比:
1 session在服务器,cookie在客户端
2 session默认被存在在服务器的一个文件里(不是内存)
3 session的运行依赖sessionid,而sessionid是存在cookie中的,也就是说,如果浏览器禁用了cookie ,同时session也会失效,可以通过其它方式实现
4 session可以放在文件、数据库、或内存中都可以。
5 登录验证或保持一段时间登录状态,一般会用session来验证