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>