Java Web监听器-学习笔记

一,Web监听器:

是由Servlet规范提供的,可以对客户端的请求、服务端的操作进行监听,包括对象ServletContext、HttpSession、ServletRequest,分别对应application、session、request对象。

application是上下文对象,是由容器创建和初始化的,范围是整个web应用,而且整个web应用只有一个application对象,当web服务器关闭时,就会被销毁。

session是保存上下文信息的机制,是针对每一个会话的,是放在服务器端通过sessionid来区分的。

在浏览器和服务器结束后,都会把session销毁。
request对象是当客户发送请求时,容器就会创建一个ServletRequest对象, 来进行封装请求处理,同时会创建一个ServletResponse对象来进行封装响应处理, 在访问结束请求之后,这个对象就会被销毁。

监听器的启动顺序是按照在web.xml中的注册顺序启动的,三种组件的启动优先级:
监听器>过滤器>servlet


二,监听器分类:
1.按监听器的对象划分:
(1) 用户监听应用程序环境对象(ServletContext)的时间监听器
(2) 用于监听用户会话对象(HttpSession)的事件监听器
(3) 用于监听请求消息对象(ServletRequest)的事件监听器
2.按事件划分
(1) 监听域对象自身的创建和销毁的事件监听器
(2) 监听域对象中的属性的增加和删除的事件监听器
(3) 监听绑定到HttpSession域中的某个对象的状态的事件监听器

三,按事件划分的监听器详解:


1,监听域对象自身的创建和销毁的事件监听器:

(1),ServletContext的创建和销毁

实现ServletContextListener接口用于监听它的创建和销毁事件
一个项目中可以有多个ServletContextListener,但是只有一个ServletContext对象
有两个事件处理方法:
contextInitialized方法:
public void contextInitialized( ServletContextEvent sce )
ServletContext创建时调用
参数 ServletContextEvent 事件对象,可以获取ServletContext对象以及一些初始化参数
例如:
获取ServletContext对象: ServletContext sc = sce.getServletContext();
获取初始化参数:sc.getInitParmeter("参数名称");
初始化参数在web.xml中配置:
<context-param>
<param-name>initParam</param-name>
<param-value>mocc</param-value>
</context-param>
也可以往ServletContext里放一些值进去,
sc.setAttribute("name",obj),
然后在其它地方获取getAttribute("name")
contextDestroyed方法:
public void contextDestroyed( ServletContextEvent sce )
ServletContext销毁时调用
主要用于数据库链接关闭时释放一些资源,以免过度的占用。

(2),HttpSession的创建和销毁
实现HttpSessionListener接口用于监听它的创建和销毁事件
一个HttpSession可以注册多个HttpSessionListener接口,
一个web应用中可以有多个HttpSession对象
有两个事件处理方法:
sessionCreated方法:
public void sessionCreated(HttpSessionEvent se)
session创建时调用
sessionDestroyed方法:
public void sessionDestroyed(HttpSessionEvent se)

session销毁时调用


HttpSessionListener的主要用途:
统计在线人数;

记录访问日志,记录访问时间、访问的ip;


HttpSession失效:
不关闭浏览器,session超时;
可以在web.xml配置session超时的时间:
<session-config>
<session-timeout>0</session-timeout>
</session-config>
0:session没有超时的限制

1:session超时1分钟后销毁,但是并不是准确的一分钟



(3),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监听的是用户的每一个访问请求


2, 监听域对象中的属性的增加和删除的事件监听器:
ServletContext、HttpSession、ServletRequest对象的中属性的增加和删除有单独的事件监听器,他们分别对应
ServletContextAttributeListner,HttpSessionAttributeListner,ServletRequestAttributeListner

监听的事件包括:
attributeAdded()
attributeRemoved()
attributeReplaced()


区别:
request.getAttribute的值获得是从request.setAttribute的值
request.getParameter是请求的参数值



3,监听绑定到HttpSession域中的某个对象的状态的事件监听器
1、监听器绑定到HttpSession域中的某个对象的状态事件监听器;
2、HttpSession中的对象状态:
(1)绑定:通过setAttribute保存到session对象当中;
(2)解除绑定:removeAttribute;
(3)钝化:将session对象持久化到存储设备上;
(4)活化:将session对象从存储设备上进行恢复。
3、session钝化机制:
(1)把服务器中不常使用的session对象暂时的序列化到系统文件或是数据库中,当使用时反序列化到内存中,整 个过程有服务器自动完成。
(2)两个钝化管理器:StanderManeger钝化管理器,PersistentManager钝化管理器。(tomcat默认使用 StanderManeger钝化管理器)
(3)session的钝化机制由SessionManager管理,创建一个普通的javabean绑定和解除绑定需实现 HttpSessionBindingListener接口
4、要想实现钝化和活化,除了需实现HttpSessionActivationListener接口还需要实现Serializable接口。

你可能感兴趣的:(java,监听器,servletContext,Httpsession,ServletRequest)