监听器:监听某一个事件的发生,或状态的改变。
监听器的内部原理:接口回调
三种Web监听器监听三个作用域的创建和销毁,而三个作用域对应的对象是:
request ---HttpServletRequest
session ---HttpSession
aapplication --- ServletContext
1. ServletContextListener监听器
- ServletContext创建 :启动服务器的时候
- ServletContext销毁 :关闭服务器 或 从服务器移除项目
- 作用:完成自己想要的初始化工作;执行某一个任务
2. ServletRequestListener监听器
- request创建 :访问服务器上的任意资源(html、jsp、servlet)都会有请求出现。
- request销毁 :服务器已经对这次请求作出了响应。
public class MyRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("servletrequest 销毁了");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("servletrequest 初始化了");
}
}
<!-- web.xml配置 -->
<listener>
<listener-class>com.itheima.listener.MyRequestListener</listener-class>
</listener>
3. HttpSessionListener监听器
- session的创建 :只要在jsp、servlet调用getSession
- session的销毁 :超时 30分钟(默认)、非正常关闭(执行session.invalidate()方法)
- 作用:统计在线人数
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("创建session了");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("销毁session了");
}
}
- session超时(失效)时间设置:
//方式一:在tomcat-7.0\conf\web.xml中设置,时间单位为分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
//方式二:在工程的web.xml中设置,时间单位为分钟
<session-config>
<session-timeout>15</session-timeout>
</session-config>
//方式三:通过java代码设置,以秒为单位
session.setMaxInactiveInterval(30*60);