Servlet过滤器
- 过滤链的设计模式
- 责任链:
责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
2. 过滤器链调用原理与顺序
web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法(放行)中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
根据在web.xml文件中的顺序还决定调用的顺序:和<filter-mapping>的配置先后顺序有关系。
在开发中:Servlet,Filter,Listener配置先后问题: 一般先配置Listener,再配置Filter,最后配置Servlet。
web.xml中<url-pattern>标签的可以对具体页面进行过滤设置
/*:拦截所有资源;
.html:对部分资源进行拦截;
/07/login.jsp:精确到对一页面的拦截;
3.过滤器代码测试:
FilterOne
FilterTwo
web.xml配置内容:
运行结果:
请求的顺序:FilterOne--FilterTwo 响应的顺序:FilterTwo--FilterOne
如果web.xml配置
运行结果如下:
请求的顺序:FilterTwo--FilterOne 响应的顺序:FilterOne--FilterTwo