过滤器有三大接口
1.init是在初始化阶段
2.doFiler是拦截和过滤阶段
3.销毁阶段
总结:一般进行过滤器处理的时候,大部分时间只要在doFiler当中写逻辑就可以
使用注解进行配置,需要使用@WebFiler
常用的配置项
filterName | 该filter的名字 |
initParams | 初始化参数 |
displayName | filter显示名称 |
servletNames | 指定对哪些servlet进行过滤 |
asyncSupported | 是否支持异步模式 |
urlPatterns | 指定拦截路径 |
value | 指定拦截路径 |
注意:urlPatterns和value是一样的。urlPatterns和value只能配置一个,不能两个都配置,两个都配置就会报错。
2.1 FilerConfig是init当中的一个参数,
getFilterName() | 获取filter的名称 |
getServletContext() | 获取ServletContext |
getInitparamter(String var1) | 获取配置的初始参数的值 |
getInitParamterNames() | 获取配置的所有参数名称 |
2.2 FilerChain是doFiler当中的一个参数
这个方法是用来对拦截进行放行的
注意:如果有多个拦截,它们的执行顺序是按照字符顺序来执行。例如有2个过滤器,一个是AFilter,一个是BFilter,那么AFilter就会先执行。(注解方式)
如果我们是在web.xml中配置的过滤器,那么过滤器的执行顺序就是<filter-mapping>在web配置的顺序,配置在上面那么就会先执行。
在进行过滤的时候,如果是对网页进行请求转发,那么这个网页会经过过滤器,如果是重定向跳转,那么这个网页就不会经过过滤器,会直接进入到网页当中(在做实验的时候需要注意缓存问题)
处理:dispatcherTypes={DispatcherType.REQUEST,Dispatcher.FORWARD},在@WebFilter注解当中加上这个就可以使得,请求转发的网页不能直接跳转,要经过过滤器
当我想要一个admin目录下面的文件进行过滤的时候可以使用@WebFiler(urlPatterns="/admin/*")这样就可以对admin目录下面的文件进行过滤,但是这时我还想要对应该名称叫HelloServlet的Java程序进行过滤,有如下的方法进行过滤
1.@WebFiler(urlPatterns={"/admin/*","/HelloServlet"})//这样是对admin目录下面的文件和HelloServlet进行过滤
2.@WebFiler(urlPatterns="/*")//这个是对所有的文件进行过滤
3.HelloServlet文件@WebServlet("/HelloServlet")原本是这样,我们将@WebServlet("/admin/HelloServlet")改为这样就也可以对HelloServlet进行过滤了,同时admin目录下面的文件也可以进行过滤。