servlet监听器

戏子无情 提交于 2021-02-17 20:36:31

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之后使用注解实现监听器

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!