application:上下文对象,是由容器创建和初始化的,它的范围是整个的web应用,而且整个web应用中只会有一个 application对象存在,当web服务器关闭时,就会将application对象销毁
session:是一种保存上下文信息的机制,它是针对每个会话的,它是放在服务器端,通过SessionId区分的,在浏览器和服务器结束后,都会将session销毁
request对象:是当客户端发送请求时,容器就会创建一个ServletRequest对象,来进行封装请求数据,同时会创建一个servletResponse对象来进行封装相应数据,当结束封装请求之后,就会销毁该对象 WEB监听器,就是监听这3个对象的创建,销毁,和它们的属性发生的变化
-
什么是web监听器
-
Web监听器的用途:
1,统计在线人数和在线用户。 2,系统启动时加载初始化信息。 3,统计网站访问量。 4,跟Spring结合。
监听器的用法
实现了ServletContextListener接口,创建一个监听源为ServletContext的监听器,当服务器启动时,便会创建application对象并调用初始化方法.可以通过初始化方法的参数来对application对象做出一些操作.
当服务器关闭,application对象销毁时,也会调用监听器的销毁方法,也可以通过参数来作出一些操作.初始化方法和销毁方法中的参数是ServletContextEvent的对象,因此可以通过参数来获取到application对象来对其操作(获得初始化参数).
1.编写java程序
public class FirstListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
}
2.配置web.xml
<listener>
<listener-class>onetry.Listener.FirstListener<stener-class>
<stener>
-
监听器的执行顺序
-
监听器分类
1.按监听器的对象划分:
a 用户监听应用程序环境对象(ServletContext)的事件监听器
b 用于监听用户会话对象(HttpSession)的事件监听器
c 用于监听请求消息对象(ServletRequest)的事件监听器。
2.按事件划分
a 监听域对象自身的创建和销毁的事件监听器
b 监听域对象中的属性的增加和删除的事件监听器
c 监听绑定到HttpSession域中的某个对象的状态的事件监听器
ServletContext的创建和销毁
实现ServletContextListener接口用于监听它的创建和销毁事件
一个项目中可以有多个ServletContextListener,但是只有一个ServletContext对象
有两个事件处理方法:
(1)contextInitialized方法:
public void contextInitialized( ServletContextEvent sce )
参数 ServletContextEvent 事件对象,可以获取ServletContext对象以及一些初始化参数
例如:
获取ServletContext对象:
ServletContext sc = sce.getServletContext();
获取初始化参数:
sc.getInitParmeter("参数名称");
初始化参数在web.xml中配置:
<context-param>
<param-name>initParam</param-name>
<param-value>imooc</param-value>
</context-param>
2.设置ServletContext属性:sc.setAttribute("name",obj);
然后在其它地方获取getAttribute("name")
(2)contextDestroyed方法:
public void contextDestroyed( ServletContextEvent sce )
ServletContext销毁时调用
主要用于数据库链接关闭时释放一些资源,以免过度的占用。
-
HttpSession的事件监听器
HttpSession的创建和销毁
实现HttpSessionListener接口用于监听它的创建和销毁事件
一个HttpSession可以注册多个HttpSessionListener接口,
一个web应用中可以有多个HttpSession对象
有两个事件处理方法:
sessionCreated方法:
public void sessionCreated(HttpSessionEvent se)
session创建时调用
sessionDestroyed方法:
public void sessionDestroyed(HttpSessionEvent se)
session销毁时调用
HttpSessionListener的主要用途:
统计在线人数
记录访问日志,记录访问时间、访问的ip
/**
* 销毁session
* 1.关闭服务器
* 2.关闭浏览器
* 3.不关闭浏览器,session超时
*/
不关闭浏览器,session超时
可以在web.xml配置session超时的时间
<session-config>
<session-timeout>0<ssion-timeout>
<ssion-config>
0:没有超时的限制
1:超时1分钟后销毁,但是并不是准确的一分钟
-
ServletRequest的事件监听器
实现ServletRequestListener接口用于监听它的创建和销毁事件
一个ServletRequest可以注册多个ServletRequestListener接口,
有两个事件处理方法:
requestInitialized方法:
public void requestInitialized(ServletRequestEvent sre)
request创建时调用
参数ServletRequestEvent可以获取ServletRequest对象 ServletRequest sr = sre.getServletRequest()
进而获取初始化参数:sr.getInitParmeter("")
requestDestroyed方法:
public void requestDestroyed(ServletRequestEvent sre)
request销毁时调用
ServletRequest的主要用途:
读取参数
记录访问历史
request监听的是用户的每一个访问请求
Ps:别忘了监听器的web设置。
request.getAttribute()只能通过 request.setAttribute("name",参数)来获取;
request.getParameter()则通过URL参数,或前链接页面关系的参数来获取
-
绑定到HttpSession域中的对象状态的事件监听器
监听器的分类-按监听事件划分:
1、监听器绑定到HttpSession域中的某个对象的状态事件监听器;
2、HttpSession中的对象状态:
(1)绑定:通过setAttribute();
(2)解除绑定:removeAttribute();
(3)钝化:将session对象序列化到存储设备上
(4)活化:将session对象从存储设备上进行恢复
3、session钝化机制:
(1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整个过程有服务器自动完成。
(2)session的钝化机制由SessionManager管理
4、实现绑定和解除绑定,创建一个【普通的javabean】绑定和解除绑定需实现【HttpSessionBindingListener】接口;
实现钝化和活化,需实现HttpSessionActivationListener接口和Serializable接口
-
web3.0之后使用注解实现监听器
来源:oschina
链接:https://my.oschina.net/u/3908739/blog/1934708