JavaEE 7教程
Servlet的过滤器和事件监听
Servlet Filters
一个Servlet过滤器可用于更新请求和响应的有效载荷和来往servlet的头信息。要认识到,过滤器不产生 响应 - 他们只修改或改编的请求和响应。认证, 记录,数据压缩和加密是一些典型的过滤器案例。 你可以指定一个URL模式 servlet或一组servlet进行过滤 。使用@WebFilter注解的过滤器:
@WebFilter("/*")
public class LoggingFilter implements javax.servlet.Filter {
public void doFilter(HttpServletRequest request,
HttpServletResponse response) {
//. . .
}
}
使用@WebInitParam或在web.xml中定义:
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>com.jdon.LoggingFilter</filter-class>
</filter>
. . .
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Event Listeners
事件侦听器提供ServletContext,HttpSession和ServletRequest三个scope生命周期范围内的回调事件,监听者是实现特定接口, 提供这些对象的状态变化事件通知。每个类被@ WebListener注释 ,也在web.xml中定义,或者通过ServletContext.addListener方法声明,
@WebListener
public class MyContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
//. . .
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
//. . .
}
}
ServletContextAttributeListener是用来监听上下文属性的变化:
public class MyServletContextAttributeListener
implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
//. . . event.getName();
//. . . event.getValue();
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
//. . .
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
//. . .
}
}
HttpSessionListener用来监听来自session的事件。
@WebListener
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
//. . .
}
@Override
public void sessionDestroyed(HttpSessionEvent hse) {
//. . .
}
}
HttpSessionActivationListener用来监听Session被钝化到磁盘或从磁盘恢复passivated or activated::
public class MyHttpSessionActivationListener
implements HttpSessionActivationListener {
@Override
public void sessionWillPassivate(HttpSessionEvent hse) {
// ... hse.getSession();
}
public void sessionDidActivate(HttpSessionEvent hse) {
// ...
}
}
HttpSessionAttributeListener用来监听Session的属性变化:
public class MyHttpSessionAttributeListener
implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
//. . . event.getName();
//. . . event.getValue();
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
//. . .
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
//. . .
}
}
HttpSessionBindingListener是用来监听当一个对象绑定或解绑到Session时的事件:
public class MyHttpSessionBindingListener
implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
//. . . event.getName();
//. . . event.getValue();
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
//. . .
}
}
ServletRequestListener用来监听来自请求或资源的事件。
@WebListener
public class MyRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
ServletRequest request = sre.getServletRequest();
//. . .
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
//. . .
}
}
ServletRequestAttributeListener用来监听请求属性的变化。
AsyncListener,监听completed,timed out, or an error.这样的异步事件。