Filter(过滤器)


Filter也是一个接口,它有三个方法init(初始化),doFilter(执行过滤),destroy(销毁)。

1.2 doFilter() 方法

链接源码,此源码需要从apache官网下载,从tomcat链接源码,tomcat是servlet规范的实现者,这些方法的源码都放在tomcat源码中,源码中,init方法和destroy方法都有默认实现,doFilter没有实现,它是一个抽象方法。

Filter也需要注册,在web.xml.注册配置它。

1、匹配顺序
该标签处理客户端请求的顺序为:
(1)完全匹配
<url-pattern>/test/userList.action</url-pattern>
完全匹配就是等值匹配,它是最先被匹配到的客户端请求。
(2)路径匹配
<url-pattern>/*</url-pattern> 匹配根路径下的全部请求
路径匹配类似于模糊匹配,对于/list、listInfo.do、checkInfo.action、index.jsp、abc.css、my.js等等url请求,都可以被匹配到。这种匹配的顺序排在完全匹配后面。
(3)扩展名匹配
<url-pattern>*.action</url-pattern>匹配全部action 结尾的请求
<url-pattern>*.css</url-pattern> 匹配全部 css结尾的请求
<url-pattern>*</url-pattern> 不能用 * ,否则报错
说明:这种匹配匹配在开发中用的比较多,但不能使用*代替,否则会报错。
结论:容器会首先查找完全匹配,如果找不到,再查找目录匹配,如果也找不到,就查找扩展名匹配。
2、“/” 与 “/*” 的区别
(1)<url-pattern>/</url-pattern>
会匹配到 /toIndex 这种类型的 url ,不会匹配到模式为 *.jsp 这样的后缀型 url。
(2)<url-pattern>/*</url-pattern>
会匹配所有路径型的和后缀型的url。
chain.doFilter方法,此doFilter是chain中的方法,不是Filter中的doFilter方法,只是同名而已, chain.doFilter将请求放行到服务器或下一个资源。


浙公网安备 33010602011771号