编辑一个实验类jsp文件,applicationDemo1.jsp
使用application设定两个属性:userName和userPwd,然后使用application的getAttribute的方法获取数据
主要代码如下
<%
application.setAttribute("userName", "admin");
//pageContext.setAttribute("userName", "admin");
%>
<%
application.setAttribute("userPwd", "123");
//pageContext.setAttribute("userPwd", "123");
%>
在这里j里,使用application对象设置了属性和值
请到另一个页面看看是否可以显示这些值
到另外一个页面
当前页面获取
<%
String userName = (String) application.getAttribute("userName");
%>
<%
String userPwd = (String) application.getAttribute("userPwd");
out.println("userName=" + userName + ";userPwd =" + userPwd);
%>
再编辑一个实验类applicationDemo2.jsp
在这个页面中获取,applicationDemo1中的数据
主要代码如下:
显示另外一个页面的application对象传递过来的属性值,为null,不能获取
<%
//获取属性值
String userName = (String) application.getAttribute("userName");
String userPwd = (String) application.getAttribute("userPwd");
out.println("userName=" + userName + ";userPwd =" + userPwd);
%>
运行服务器:
1.applicationDemo1.jsp的结果
当点击另外一个页面的a链接的时候,显示结果为(页面跳转到applicationDemo2.jsp):
application的范围是从服务器一开始执行服务到服务器关闭为止
application的范围最大,停留的时间最长,所以要使用application要注意,甚至要限制使用,不然可能会造成服务器负载越来越重导致服务器奔溃的情况
使用pageContext对象和上述例子一样,使用pageContext对象调用setAttribute方法设定属性:userName和userPwd,并且设定初始值
编辑实验类pageContextDemo1.jsp,主要代码如下:
<%
pageContext.setAttribute("userName", "admin");
%>
<%
pageContext.setAttribute("userPwd", "123");
%>
在这里j里,使用pageContext对象设置了属性和值
请到另一个页面看看是否可以显示这些值
到另外一个页面
当前页面获取
<%
String userName = (String) pageContext.getAttribute("userName");
%>
<%
String userPwd = (String) pageContext.getAttribute("userPwd");
out.println("userName=" + userName + ";userPwd =" + userPwd);
%>
再编辑一个实验类pageContextDemo2.jsp,使用pageContext的getAttribute方法获取数据
主要代码如下:
显示另外一个页面的pageContext对象传递过来的属性值,为null,不能获取
<%
//获取属性值
String userName = (String) pageContext.getAttribute("userName");
String userPwd = (String) pageContext.getAttribute("userPwd");
out.println("userName=" + userName + ";userPwd =" + userPwd);
%>
当点击另外一个页面的时候,使用pageContext对象无法传递当前页面的数据到另外一个页面
request的范围是指在一个jsp网页发出请求到另外一个jsp页面之间,随后这个属性就失效了,设定Request范围的属性时候可以利用setAttribute()和getAttribute()方法.
1.如果使用请求转发,例如:
在当前页面请求转发之前设定了request对象的范围属性,则在requestDemo2.jsp中,使用request的getAttribute()方法获取属性是可以获取到属性的数据的
如果是未请求,直接在浏览器里面获取数据,是不能够获取到属性的数据的,所没有请求关系的页面,是无法获取这些属性
2.如果使用动态包含
在requestDemo3.jsp中同样使用reques对象的getAttribute方法获取request的属性值,同样是可以获取到request中的属性
3.使用request在servlet中使用请求转发也可以使得请求的页面得到servlet中的设定的数据
如果使用重定向,则会造成数据丢失
【重要】跳转页面结论
请求转发跳转页面,地址栏不会变更,可以获取到之前的request的属性
响应重定向跳转页面,地址栏产生变更,不能获取之前的request的属性
总结
方法 | 能否得到request范围属性 |
---|---|
jsp:froward | ture |
jsp:include | ture |
请求转发 request.getRequestDispatcher().forward() | ture |
重定向 response.sendRedirect() | false |
Session作用范围比page和request范围要大
一般情况有四种情况,Session范围属性才会失效
方式一:
调用Session的API的invalidate()方法,强制使得会话失效
方式二:
调用Session的API的setMaxInactiveInterval(int)方法,设置session的最大不活动时间,则在没有任何操作的情况下,多少秒后session对象失效,单位是秒.
代码如下:
session.setMaxInactiveInterval(60);//单位是秒
其他API
session.getCreationTime() //获取session的创建时间
session.getLastAccessedTime() //获取上次与服务器交互的时间
session.getMaxInactiveInterval() //获取session最大的不活动的间隔时间 ,以秒为单位
方式二:
在web.xml中设置session过期时间,和设置session的最大不活动时间效果一样
在web.xml中配置如下:
1
即客户端连续两次与服务器交互间隔时间最长为1分钟,1分钟后使用session.getAttribute()获取的值为null.
当我们使用session设定数据,使用浏览器访问是可以访问到session设定的属性值,但是如果关闭浏览器,再次访问则不会访问到属性的值