标签:reac session override foreach ESS ssi har bsp mamicode
Servlet API提供了一系列的事件和事件监听接口。 上层的servlet/JSP应用能够通过调用这些API进行事件 驱动的开发。这里监听的所有事件都继承自 java.util.Event对象。监听器接口可以分为三类: ServletContext、HttpSession 和ServletRequest 。
第一种是使用 WebListener注解。例如:
WebListener public class ListenerClass implements ListenerInterface { }
第二种方法是在部署描述文档中增加一个listener元 素。
</listener> <listener-class>fully-qualified listener class</listener-cl ass> </listener>
你可以在一个应用中添加多个监听器,这些监听器 是同步工作的。
ServletContext的监听器接口有两个: ServletContextListener和 ServletContextAttributeListener。
1. ServletContextListener
ServletContextListener能对ServletContext的创建和 销毁做出响应。当ServletContext初始化时,容器会调用 所有注册的ServletContextListeners的contextInitialized 方 法。该方法如下:
void contextInitialized(ServletContextEvent event)
当ServletContext将要销毁时,容器会调用所有注册 的ServletContextListeners的context Destroyed 方法。该 方法如下:
void contextDestroyed(ServletContextEvent event)
contextInitialized 方法和contextDestroyed方法都会 从容器获取到一个 ServletContextEvent。 javax.servlet.ServletContextEvent是一个 java.util.EventObject的子类 ,它定义了一个访问 ServletContext的getServletContext 方法,通过这个方法能够轻松地获取到ServletContext。:
ServletContext getServletContext()
例: AppListener类实现了ServletContextListener 接口,它在 ServletContext刚创建时,将一个保存国家编码和国家名 的Map放置到ServletContext中。
AppListener类
package listener; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class AppListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent sce) { } @Override public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext = sce.getServletContext(); Map<String,String> countries = new HashMap<String,String>() ; countries.put("ca", "Cannada"); countries.put("us","United States"); servletContext.setAttribute("countries",countries); } }
注意,contextInitialized 方法。它 通过调用getServletContext方法从容器获得了 ServletContext,然后创建了一个Map用于保存国家编码 和国家名,再将这个Map放置到ServletContext里。在实 际开发中,往往是把数据库里的数据放置到 ServletContext里。
countries.jsp用到了这个监听器。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Country list</title> </head> <body> we operate in these countries: <ul> <c:forEach items="${countries}" var="country"> <li>${country.value}</li> </c:forEach> </ul> </body> </html>
结果(resulte)
2.ServletContextAttributeListener
标签:reac session override foreach ESS ssi har bsp mamicode
原文地址:https://www.cnblogs.com/jiangfeilong/p/10708169.html