在web.xml中注册监听器
<listener>
<listener-class>com.java.listener.MyServletContextListener</listener-class>
</listener>
ServletContextListener
package com.java.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
//启动tomcat服务器时创建
System.out.println("servletcontext初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//关闭服务器,从服务器移除项目的时候销毁
System.out.println("servletcontext销毁了");
}
}
ServletRequestListener
package com.java.listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class MyRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
// 访问服务器上的任何资源都会有请求产生。
System.out.println("request创建");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// 服务器对这次请求做出了响应。
System.out.println("request销毁");
}
}
HttpSessionListener
package com.java.listener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// 只要调用getSession。访问html不会,jsp和servlet会创建。
System.out.println("session创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 超时,非正常关闭销毁,正常关闭服务器(序列化)
System.out.println("session销毁");
}
}
作用:
ServletContextListener:
1.完成自己想要的初始化工作
2.执行自定义任务调度。执行某一个任务。Timer
HttpSessionListener:
统计在线人数。
request------ServletRequestAttributeListener
session-------HttpSessionAttributeListener
servletContext------servletContextAttributeListener
监听在作用域中的添加,替换,删除
package com.java.listener02;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MyHttpSession02 implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("属性被添加");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("属性被移除了");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("属性被替换了");
}
}
不用注册的监听器
HttpSessionBindingListener
HttpSessionActivationListener
HttpSessionBindingListener
让javaBean实现该接口
package com.java.domainBean;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class Bean01 implements HttpSessionBindingListener{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void valueBound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("值被绑定上来了");
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("解除绑定");
}
}
HttpSessionActivationListener
用于监听session的值是钝化(序列化)还是活化(反序列化)
钝化(序列化):
将内存中的数据存储到硬盘上。
活化(反序列化)
将硬盘中的数据读取到内存中。
package com.java.listener03;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
public class MyHttpSessionListener03 implements HttpSessionActivationListener {
@Override
public void sessionWillPassivate(HttpSessionEvent se) {
//钝化
System.out.println("session被钝化");
}
@Override
public void sessionDidActivate(HttpSessionEvent se) {
//活化
System.out.println("session被活化");
}
}
session中的值可能会很多,并且我们有很长时间不使用内存中的值,那么可以考虑将session的值可以存储到硬盘上,等下一次使用的时候也,从硬盘上提起出来。大大减轻内存压力。
如何让session在一定时间内钝化:
有三种方式:
1.在tomcat里面conf/context.xml里面配置
对所有运行在这个服务器的项目生效
2.在tomcat里conf/Catalina/localhost/context.xml 配置
对localhost生效。localhost:8080
3.在自己的web工程项目中META-INF/context.xml
只对当前的工程生效。
maxIdleSwap:1分钟不用就钝化
directory:钝化后的那个文件存放的位置
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="weizhi"/>
</Manager>
</Context>