Filter
Filter过滤器的简单说明
1.过滤器是一个驻留在服务器端的web组件,可以截取客户端和服务器端之间的请求与响应的信息
2.过滤器Filter是对客户端访问资源的时候的过滤,对符合条件的请求放行,不符合条件的不放行。
3.常用用法:权限验证访问资源、设置资源编码。
Filter的执行顺序
1. 当web服务器接收到一个请求后,将会判断此请求路径是否匹配到一个过滤器的配置,如果匹配到,则服务器把请求交给相关的过滤器处理
2. 在执行Filter的过程中,Web服务器会判断是否有另一个关联当前请求的过滤器,如果有就交给下一个处理
**3.通过doFilter() 调用客户端需要访问的web资源。在返回给客户端的过程中,首先同样经过关联的过滤器,只是顺序与请求到来时相反
**
Eclipse创建简单的Filter过滤器
我们创建先创建一个Maven的JavaWeb工程,我之前的文章有讲过
然后我们右击项目,点击创建一个Filter过滤器
填写一些信息
Initialization parameters中配置的是Filter的一些初始化参数,可以不配置;
Filter mappings中的URL Pattern,是请求这个地址的时候,会进过Filter过滤器,从而进行一些判断,我们可以通过右边的添加按钮或者编辑按钮来添加或者修改需要过滤的URL请求
创建完成后,我们可以看到TestFilter实现Filter接口中的三个方法
/** 当Filter过滤器销毁的时候调用 */
public void destroy() {
System.out.println("destroy TestFilter")
}
/** doFilter方法主要是对过滤的请求和响应进行处理, FilterChain chain 参数作用是如果有下一个过滤器的话,就将当前的请求和响应发送给下一个过滤器进行处理 */
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter TestFilter")
chain.doFilter(request, response);
}
/** 初始化Filter过滤器的时候调用 */
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("init TestFilter")
}
接下来我们测试一下各个方法,在方法中输出一些信息
当我们启动Tomcat容器的时候,Filter过滤器初始化
我们访问上面给的路径加上过滤器的路径的时候,会调用doFilter方法,说明请求进过了过滤器
http://localhost:8099/Filter3/TestFilter
在访问的时候,我们发现报404错误,(我想是因为我们没有创建一个Servlet容器来存放资源,请求没有找到这个资源地址)
Filter过滤不到指定路径
我们使用注解来过滤请求的,默认是容器的路径,当我们从一个Servlet发送一个请求转发的时候,我们设置的路径是过滤不到这个请求的,我们需要使用注解指定一下
// 这个路径是过滤不到请求转发的路径的
@WebFilter("/TestFilter")
// 我们需要设置过滤的类型
@WebFilter(dispatcherTypes = {DispatcherType.FORWARD }
, urlPatterns = { "/success.html" })
勾选我们需要的选项