session的开始容易判断(浏览器发出第一个HTTP请求即可认为会话开始), 但结束就不好判断了(因为浏览器关闭时不会通知服务器“我关了,会话可以结束了”), 所以只能通过这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。 Tomcat的默认值为120分钟,但这个值也可以通过 HttpSession 的 setMaxInactiveInterval() 方法来设置。
void setMaxInactiveInterval(int interval)
设置会话的超时值。
如果想主动让会话结束,如用户单击“注销”的时候,可以使用HttpSession 的 invalidate() 方法:
void invalidate()
强制结束当前session。
application
application作用域就是服务器启动到关闭的整段时间, 在这个作用域内设置的信息可以被所有应用程序使用。 (餐馆打烊后结帐,用到的即是开张到打烊之间的所有信息。)
还记得上一节提到的ServetContext吗? application作用域上的信息传递就是通过ServetContext实现的。
Object getAttribute(String name)
从application中获取信息。
void setAttribute(String name, Object value)
向application作用域中设置信息。
总结
可以看到,每个作用域除了实现接口不同、意义不同之外,它们的使用方法和作用都是相同的, 都是通过 getAttribute 和 setAttribute 方法进行信息传递。
作用域
意义
实现接口
request
HTTP请求内
HttpServletRequest
session
HTTP会话内
HttpSession
application
服务器生命周期内
ServletContext
示例程序
这一节的示例程序是一个用户登录的模拟程序。文件较多。
•login.html 登录表单
•DoLogin.java 处理登录动作的Servlet
•LoginSuccess.java 用于显示登录成功信息的Servlet
•SessionTest.java 登录后的处理程序
•DoLogout.java 注销的处理程序
为了演示 request、application、session 各个作用域的使用方法, Servlet之间进行了数据传递,数据传递方式如下:
数据产生
数据接受
数据内容
作用域
DoLogin
LoginSuccess
登录时间
request
DoLogin
SessionTest
登录用户名
session
DoLogin
SessionTest
系统登录次数
application
访问 :8080/LearnJSP/sessiontest, 登录时输入用户名 charlee 和密码 123456 即可。
您可能感兴趣的文章: