-
监听器概念
查看全部 -
监听哪些对象
查看全部 -
监听器的类比
查看全部 -
Http是没有http的子类,
得到全局是http类型的request.getSession().getServletContext();
而监听事件接口有三种,httpSession,servletRequest和servletContext,因为最终得到的是servlet的context,所以servlet类型的request可以直接得到,http类型的request要先得到http的session才能getServletContext。
查看全部 -
Servlet3.0下监听器的使用(web.xml<web-app>标签查看Servlet版本)
Servlet2.5下可以定义监听器的顺序,通过在web.xml中定义,Servlet3.0通过注解@WebListener不能实现顺序这一功能。
查看全部 -
绑定到HttpSession域中的对象状态的事件监听器
绑定到HttpSession域中的对象有多种状态如下:
绑定(相当于保存,通过session.setAttribute()把对象保存到域对象session中)——>解除绑定 (相当于session.removeAttribute()) 钝化(将session对象持久化到存储设备上)——>活化(从存储设备上进行恢复)Session钝化机制:session正常情况下,存储在服务器内存当中,服务器会对每一个在线用户创建一个session对象,当在线用户很多时,session内存的开销将是巨大的,会直接影响Web服务器的性能,Session的钝化机制就解决了这个问题。
Session钝化机制本质:把服务器不经常使用的session对象暂时序列化到系统文件或者数据库内存当中,当使用的时候,反序列化到服务器内存当中,整个过程由服务器自动完成。
Tomcat中有两种Session钝化管理器(Session钝化机制由SessionManager管理)
第一种钝化管理器:StandardManger,有两种情况,第一种情况,当Tomcat服务器被关闭或重启时,Tomcat服务器会将当前内存中的Session对象钝化到服务器文件系统中,第二种情况是Web应用程序被重新加载时(重新覆盖web.xml,或者从新覆盖Spring.xml,或者在Tomcat服务器里点击重新加载按钮时),内存中的Session对象也会被钝化到服务器的文件系统中,钝化后的文件会保存到Tomcat目录下的work/Catalina/hostname/applicationname/SESSION.ser,当Tmocat服务器重新启动时,这个文件就会被加载,然后就会被删掉,也是默认的StandardManger。
第二种钝化管理器:Persistentmanager,它在Tomcat下的conf下的context.xml中进行配置,首先在钝化的基础上进行了扩张。前两种如上,第三种情况,可以配置主流内存的Session对象数目,将不长使用的Session对象保存到文件系统或数据库,当用时再重新加载,默认情况下,Tomcat提供了两个钝化驱动类,一个是FileStore另一个是JDBCStore。
Servlet规范提供了两个接口(这两个监听器不需要在web.xml中进行注册)
HttpSessionBindingListener接口:提供了绑定方法valueBound()
和解除绑定方法valueUnbound()。
HttpSessionActivationListener:提供了钝化方法sessionWillPassivate()和活化方法sessionDidActivate()。
创建的这个类不是监听器,而是一个普通javaBean,因为这个状态指的是session当中的对象,是对象的状态,而不是监听器的状态,当前端页面把这个对象存入session中,就会触发相应(添加和移除)事件。
HttpSessionActivationListener接口:如果想实现钝化和活化,一定要实现序列化接口Serializable
查看全部 -
按监听的事件划分(域对象属性的增加和删除的事件监听器)
监听域对象中的属性的增加和删除的事件监听器,Servlet规范中专门定义了监听这些对象的监听接口,并且这三个接口都定义了三个方法来处理域对象的属性的增加、删除、替换的事件(attributeAdded、attributeRemoved、attributeReplaced)。
【a】ServletContext——>ServletContextAttributeListener
【b】HttpSession——>HttpSessionAttributeListener
【c】ServletRequest——>ServletRequestAttributeListener
步骤1:创建监听事件的类,并实现相应接口,配置web.xml监听器。
步骤2:创建一个增加各个属性值的界面(留意:Tomcat容器监视ServletContext会自动加载一个JSF的类,请求访问时,还会加载一个jsp的实现类,只需了解)。
开启 Tomcat容器
request.getAttribute():值放在request域对象里面的一个属性。
request.getParameter():request请求的一个请求参数(例如:http://www.imooc.com/username=zhangsan,通过getAttribute不能获取)
查看全部 -
ServletRequest的监听器
ServletRequest对象的创建和销毁:ServletRequest的创建和销毁是实现了ServletRequestListener接口,一个ServletRequest对象可以注册多个ServletRequestListener接口,并且实现了requestInitialized(ServletRequestEvent sre)request创建时被调用,requestDestroyed(ServletRequestEvent sre)request销毁时调用。
ServletRequestListener主要用途:读取request里的参数,记录访问历史、访问路径,都可以通过它来进行监听(监听到每一个用户的访问请求,请求结束后就会执行销毁方法,有getServletContext方法和getServletRequest方法)。
查看全部 -
HttpSession的事件监听器
监听域对象(HttpSession):HttpSession实现了HttpSessionListener接口,用于监听该对象的创建及销毁事件,一个HttpSession对象可以注册多个HttpSessionListener接口,一个Web应用中也可以有多个HttpSession对象,HttpSessionListener有sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se),分别是session创建和销毁时调用,方法里的参数可以获取当前创建的HttpSession对象。
HttpSessionListener主要用途:统计在线人数,记录访问日志(在后台把访问人的访问时间和ip做一些统计数据)
HttpSession对象的创建和销毁:session对象的创建是在用户第一次打开浏览器,第一次访问Wen应用时,这次对话Web容器就会分配一个session,用户可以在session里保存一些信息,session对象的销毁第一是关闭服务器,会调用销毁方法,第二种是关闭浏览器session会被销毁(session不一定会立即销毁,该时间不是一个量化的),第三种,不关闭浏览器,session超时(可以通过在web.xml中配置
<session-config>
<session-timeout>1</session-timeout>
</session-config>
设置超时时间,销毁并不会一定是1分钟)。
查看全部 -
监听器的分类
按监听的对象划分
【a】用于监听应用程序环境对象(ServletContext)的事件监听器。
【b】用于监听用户会话对象(HttpSession)的事件监听器
【c】用于监听请求消息对象(ServletRequest)的事件监听器
按监听的事件划分
【a】监听域对象自身的创建和销毁的事件监听器
定义:监听的对象包括ServletContext、HttpSession、ServletRequest,Servlet规范中定义了三个接口ServletContextListener、HttpSessionListener、ServletRequestListener来监听这三个对象的创建及销毁事件。
ServletContext的创建及销毁:ServletContext实现了ServletContextListener接口来监听该对象的创建及销毁事件,一个Web应用下可以创建多个ServletContextListener,但是一个Web应用中只有一ServletContext对象,ServletContextListener对象的contextInitialized方法和contextDestroyed方法(主要用于数据库连接关闭时,可以释放一些资源,以免过度的占用),方法里的参数ServletContextEvent可以获取ServletContext以及获取一些初始化参数。
ServletContextListener主要用途:做一些定时器:可以加载一些全局属性对象,可以创建全局的数据库连接,以及加载一些缓存信息。
getServletContext():通过参数ServletContextEvent获取ServletContext对象,并且可以往全局变量ServletContext中存入变量,通过setAttribute方法,这样就可以在其他地方进行获取。
getInitParameter():通过ServletContext对象获取初始化参数(初始化参数在web.xml中进行配置)。
【b】监听域对象中的属性的增加和删除的事件监听器
【c】监听绑定到HttpSession域中的某个对象的状态的事件监听器
查看全部 -
监听器的启动顺序(一个web.xml下的多个监听器)
顺序:注册顺序加载监听器,如果注册含有过滤器、监听器、Servlet,监听器优先级>过滤器优先级>Servlet优先级
查看全部 -
第一个监听器案例
步骤1:创建一个类并实现ServletContextListener接口(javax.servlet),并且实现了contextInitialized方法和contextDestroyed方法
步骤2:web.xml配置监听对象
查看全部 -
Web监听器的主要用途
1、统计在线人数和在线用户(监听器的主要用途之一)
2、系统启动时加载初始化信息(包括缓存、一些公用的定时器、一些公共的数据库的连接等等)
3、统计网站访问量(每次请求都可以通过监听器的request对象进行获取)
4、跟Spring结合
一、第一个Web监听器(Servlet规范对每一个监听器定义了一个接口)
步骤:
【a】创建一个实现监听器接口的类
【b】配置web.xml进行注册
查看全部 -
课程目标
1、监听器的定义(专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动)
2、监听器的主要用途
3、第一个实例讲解
4、监听器的分类(监听的对象和监听的事件)
5、Servlet3.0下监听器的使用
6、实际项目中常用案例
一、监听器的定义
定义:Servlet规范中定义的一种特殊的类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁时间,以及用于监听域对象的属性发生修改的事件,监听器对象可以在事件发生前、发生后做一些必要的处理。
WEB应用中的监听器:由Servlet规范提供的,可以监视客户端的请求以及服务端的操作,同时可以监视ServletContext(application,容器创建并且初始化的,范围整个Web应用,整个Web应用只有一个application对象,Web容器关闭就会销毁application对象)、HttpSession(session,是一种保存上下文的机制,针对每一个会话,放在服务器端,通过session的id进行区分的,浏览器和服务器结束后,就会把session进行销毁)、ServletRequest(request,客户发送请求时,容器就会创建一个ServletRequest对象,进行封装请求数据,同时会创建一个ServletResponse对象,进行封装响应数据,访问请求结束之后,request对象就会被销毁)。
例如统计用户在线人数。
Web监听器监视三个对象:监听这三个对象的创建、销毁、以及这三个属性之间的变化
查看全部 -
session钝化与活化
查看全部
举报