1 listener概念
listener:监听器
对域对象(servlet的三大域:request、session、servletContext)进行监听
分类:
域对象生死监听器:::监听三大域的生命周期
域属性监听器:::::监听三大域属性的增删改
2 生死监听器具体使用
2.1 生死监听器
package com.zhiyou100_06.listener;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
public class Demo01RequestLifeLinstener implements ServletRequestListener{
{
System.out.println("监听器构造代码块:::Demo01RequestLifeLinstener");
}
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request对象销毁:::");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request对象创建:::");
System.out.println("getSource:::"+sre.getSource());
HttpServletRequest req=(HttpServletRequest)sre.getServletRequest();
try {
req.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
package com.zhiyou100_06.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class Demo02SessionLifeListener implements HttpSessionListener{
public void sessionCreated(HttpSessionEvent se) {
HttpSession session=se.getSession();
System.out.println("一个回话创建了----"+se.getSession().getId());
ServletContext application=session.getServletContext();
application.setAttribute("count", 1+(Integer)application.getAttribute("count"));
}
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("一个回话创建销毁了::"+se.getSession().getId());
HttpSession session=se.getSession();
ServletContext application=session.getServletContext();
application.setAttribute("count", (Integer)application.getAttribute("count")-1);
}
}
package com.zhiyou100_06.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class Demo03ApplicationLifeListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("上下文生死监听器::::contextDestroyed");
}
public void contextInitialized(ServletContextEvent sce) {
sce.getServletContext().setAttribute("count", 0);
}
}
2.2 配置监听器
<!-- 设置sssion的过期时间 ::;单位是分钟-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<listener>
<listener-class>com.zhiyou100_06.listener.Demo02SessionLifeListener</listener-class>
</listener>
<listener>
<listener-class>com.zhiyou100_06.listener.Demo03ApplicationLifeListener</listener-class>
</listener>
<listener>
<listener-class>com.zhiyou100_06.listener.Demo01RequestLifeLinstener</listener-class>
</listener>
3 域属性监听器监听使用
3.1 创建属性监听器
package com.zhiyou100_06.listener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
public class Demo02RequestAttributeListener implements ServletRequestAttributeListener {
public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request域中添加了域属性::"+srae.getName()+"="+srae.getValue());
}
public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request域中修改了域属性::"+srae.getName()+"::修改前的值="+srae.getValue()+",修改后的值="+srae.getServletRequest().getAttribute(srae.getName()));
}
public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request域中删除了域属性::"+srae.getName()+"="+srae.getValue());
}
}
package com.zhiyou100_06.listener;
import java.security.GeneralSecurityException;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class Demo02SessionApplicationListener implements HttpSessionAttributeListener{
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session中创建了域属性::"+se.getName()+"="+se.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session中删除了域属性::"+se.getName()+"="+se.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session中修改了域属性::"+se.getName()+"="+se.getValue()+",新值是:"+se.getSession().getAttribute(se.getName()));
}
}
package com.zhiyou100_06.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class Demo02ApplicationAttributeListener implements ServletContextAttributeListener {
public void attributeAdded(ServletContextAttributeEvent scae) {
System.out.println("application添加域属性:::"+scae.getName()+"="+scae.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent scae) {
System.out.println("application删除域属性:::"+scae.getName()+"="+scae.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent scae) {
System.out.println("application修改域属性:::"+scae.getName()+"="+scae.getValue()+",新值="+scae.getServletContext().getAttribute(scae.getName()));
}
}
3.2 配置属性监听器
<listener>
<listener-class>com.zhiyou100_06.listener.Demo02RequestAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.zhiyou100_06.listener.Demo02ApplicationAttributeListener</listener-class>
</listener>
<listener>
<listener-class>com.zhiyou100_06.listener.Demo02SessionApplicationListener</listener-class>
</listener>
4 现在有三个abc页面+结果显示页面
结果显示页面中统计abc的访问次数