JavaWeb Listener浅析
2021-03-09 14:28
标签:row 就会 场景 lin cti 序列化 init out eve 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。 共包括以下3类8种监听器: ServletContext创建与销毁监听:ServletContextListener Httpsession的创建与销毁监听:HttpSessionListener HttpServletRequest创建与销毁监听:ServletRequestListener 包括属性的添加,删除,替换(key值一样的时候,调用两次set就会触发这个事件) ServletContex的属性变化的监听:ServletContextAttributeListener Httpsession的属性变化的监听:HttpSessionAttributeListener HttpServletRequest的属性的变化的监听:ServletRequestAttributeListener 保存在Session域中的对象可以有多种状态: ? 绑定session.setAttribute("bean",Object)到Session中; ? 从 Session域中解除session.removeAttribute("bean")绑定; ? 随Session对象持久化到一个存储设备中; ? 随Session对象从一个存储设备中恢复 HttpSessionBindingListener:实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件 HttpSessionActivationListener:实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化(反序列化)和钝化(序列化)的事件 可以实现在系统启动时获取文件或数据库中配置的全局参数、设置系统缓存、预加载内容等。 比如原来SSM项目web.xml文件中spring的配置: ServletContextListener的第二个重要应用场景就是可以使一些程序跟随系统一起运行,比如启动定时任务。 以下是一个quartz定时的启动demo: JavaWeb Listener浅析 标签:row 就会 场景 lin cti 序列化 init out eve 原文地址:https://www.cnblogs.com/wind-ranger/p/14171708.html1、简介
1.1、监听web对象创建与销毁的监听器
1.2、监听web对象属性变化
1.3、监听session绑定javaBean
Servlet 规范中定义了两个特殊的监听器接口"HttpSessionBindingListener和HttpSessionActivationListener"来帮助JavaBean 对象了解自己在Session域中的这些状态,实现这两个接口的类不需要注册。2、使用示例
2.1、ServletContextListener使用示例
2.1.1、简单demo
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("-----------contextInitialized-------------");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("-----------contextDestroyed-------------");
}
}
2.1.2、ServletContextListener常见应用
2.1.2.1、初始化系统
2.1.2.2、启动特殊任务
public class DemoListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
DemoManager demoManager = null;
try {
demoManager = new DemoManager(new StdSchedulerFactory().getScheduler());
} catch (SchedulerException e) {
e.printStackTrace();
}
demoManager.addJob(DemoJob.class,"demoJob","Demo","0/8 * * * * ? ");
System.out.println("DemoListener 启动!");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
@WebServlet(name = "MyServlet2", urlPatterns = "/myServlet2")
public class MyServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------doPost-----------");
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------doGet-----------");
ServletContext context = getServletContext();
context.setAttribute("name","123");
}
}
2.2.2、ServletContextAttributeListener应用场景
2.2.2.1、设定系统参数
2.3、HttpSessionListener使用示例
2.3.1、简单demo
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("session: " + event.getSession().getId() + " Created");
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("session: " + event.getSession().getId() + " Destroyed");
}
}
2.3.2、HttpSessionListener应用场景
2.3.2.1、统计在线人数
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("session: " + event.getSession().getId() + " Created");
ServletContext context = event.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("onlineCount");
if (null == count) {
count = 0;
} else {
count++;
}
context.setAttribute("onlineCount", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("session: " + event.getSession().getId() + " Destroyed");
ServletContext context = event.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("onlineCount");
if(null == count){
count = 0;
}else{
count--;
context.setAttribute("onlineCount", count);
}
}
}
文章标题:JavaWeb Listener浅析
文章链接:http://soscw.com/index.php/essay/62319.html