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.这样的异步事件。

下页

基于容器的用户安全认证授权系统

Spring security安全机制深入使用

JavaEE教程

Java学习心得