监听器Listener(6+2)

javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术

其中 servlet规范包括三个技术点:servlet  listener  filter

1、六个监听器

(1)、第一维度:按照被监听的对象划分:ServletRequest域   HttpSession域   ServletContext域

(2)、第二维度:监听的内容分:监听域对象的创建与销毁的    监听域对象的属性变化的

(3)代码:

销毁与创建

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

	public void sessionCreated(HttpSessionEvent se) {
		HttpSession session = se.getSession();
		System.out.println("session创建了!"+session.getId());
	}

	public void sessionDestroyed(HttpSessionEvent se) {

		System.out.println("session销毁了");
	}

}

属性的添加、修改、删除:

@WebListener
public class MyServletContextAttributeListener implements ServletContextAttributeListener {

	public void attributeAdded(ServletContextAttributeEvent scae) {
		System.out.println("context添加了属性"+scae.getName()+":"+scae.getValue());
	}

	public void attributeRemoved(ServletContextAttributeEvent scae) {
		System.out.println("context删除了属性"+scae.getName()+":"+scae.getValue());
	}

	public void attributeReplaced(ServletContextAttributeEvent scae) {
		System.out.println("context修改了属性"+scae.getName()+":"+scae.getValue());
	}

}

2、两个监听器

(1)HttpSessionBindingListener

监听源:实体对象——监听对象绑定和解绑到session中

public class PersonBinding implements HttpSessionBindingListener {

	private int id;
	private String name;
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	//绑定
	public void valueBound(HttpSessionBindingEvent event) {
		System.out.println("Person对象绑定到了session中!");
	}

	//解绑
	public void valueUnbound(HttpSessionBindingEvent event) {
		System.out.println("Person从session中解绑!");
	}

}

(2)HttpSessionActivationListener

事件源:实体对象——监听对象的钝化和活化

钝化:将session中的对象写到磁盘中

活化:将磁盘中的对象恢复到session中

问题:对服务器进行优化

1)服务器关闭自动钝化,启动服务器自动活化

注意:必须实现io包中的serializable接口

public class PersonActive implements HttpSessionActivationListener,Serializable {

	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//钝化
	public void sessionWillPassivate(HttpSessionEvent se) {
		System.out.println("person钝化");
	}
	
	//活化
	public void sessionDidActivate(HttpSessionEvent se) {
		System.out.println("person活化");
	}
	
	
}

2)通过配置文件指定钝化时间——对象多久不用自动别钝化,再次访问别活化

配置位置:

配置代码:(创建一个xml文件后复制该代码到文件中)

maxIdleSwap的值为分钟

directory的值为文件夹名称

<Context>
	<!-- maxIdleSwap:session中的对象多长时间不使用就钝化 -->
	<!-- directory:钝化后的对象的文件写到磁盘的哪个目录下 配置钝化的对象文件在 work/catalina/localhost/钝化文件 -->
	<Manager className="org.apache.catalina.session.PersistentManager"
		maxIdleSwap="1">
		<Store className="org.apache.catalina.session.FileStore"
			directory="yuye" />
	</Manager>
</Context>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值