监听器listener

在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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值