过滤器
- 过滤器是一个用于拦截在数据源和数据目的地之间消息的一个对象
过滤器的功能
- 分析请求,将请求发送给指定的资源或自己创建一个响应返回
- 在请求到达服务器端前处理请求,设置请求信息,将请求封装成符合规则的对象
- 在响应到达客户端前处理响应,将响应封装成符合规则的对象
过滤器的执行
- 过滤器处理请求采取以下3种行动之一
- 过滤器自身产生一个响应,返回给客户端
- 把请求转发给过滤器链中的下一个过滤器,如果是最后一个过滤器则将请求转发给请求指定资源
- 把请求转发到另一资源
过滤器实现
- 实现Filter接口
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 获取web.xml中的初始化参数的值
System.out.println("TestFilter过滤器初始化方法");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("TestFilter过滤器执行");
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("TestFilter过滤器销毁方法");
}
}
- 在web.xml中配置
<filter>
<filter-name>test</filter-name>
<filter-class>com.filter.TestFilter</filter-class>
<filter>
<filter-mapping>
<filter-name>test</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器过滤相同资源时的顺序
- Web容器加载的顺序:web.xml文件中配置的Filter的倒序
- 拦截执行顺序:web.xml文件中配置的Filter的正序
- 销毁顺序:web.xml文件中配置的Filter的倒序
- 若使用的是注解配置,则用配置名按ASCII码进行排序,顺序同上
监听器
- 监听器是一个实现特定接口的普通Java程序,这个程序专门用于监听另一个Java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行
Listener接口与事件对应表
分类 | Linstener接口 | Event类 |
与ServletContext相关 | ServletContextListener | ServletContextEvent |
- | ServletContextAttributeListener | ServletContextAttributeEvent |
与HttpSession相关 | HttpSessionListener | HttpSessionEvent |
- | HttpSessionActivationListener | - |
- | HttpSessionAttributeListener | HttpSessionBindingEvent |
- | HttpSessionBindingLinstener | - |
与ServletRequest相关 | ServletRequestListener | ServletRequestEvent |
- | ServletRequestAttributeListener | ServletRequestAttributeEvent |
监听器的实现
- 实现对应的监听器接口
- web.xml中进行配置
HttpSessionBindingListener不需要进行配置
<listener>
<listener-class>com.listener.TestListener</listener-class>
</listener>
监听器的应用
- ServletContext范围的监听器可以进行一些初始化的动作,如:当Web应用启动的时候进行全局配置
- Session范围的监听器对一个会话过程(与客户端关联)中所产生的事件进行响应,可以对客户端信息的变化进行跟踪
- Request范围的监听器可以监听用户的每次请求