过滤器
一过滤器的介绍
javaWeb 三大组键:Server, File(过滤器),Listener(监听器),过滤器和Server有些相似。
什么是过滤器呢?
比如:过滤器相当一个公司的HR,HR把不符合公司的要求的面试者淘汰到,把符合公司要求的面试留下。过滤器也是如此,当浏览器访问servlet的时候,如果配置了过滤器,那么就会先经过过滤器。如果过滤器不放行,那么就不会进入servlet中。如果过滤器放行,那么最后就会进入到servlet中。
二、过滤器的应用场景
1)处理请求参数的中文乱码
2)登录检查
三、使用过来的步骤
第一步:定义一个类,并实现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; public class MyFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("执行过滤器...."); } @Override public void init(FilterConfig arg0) throws ServletException { } }
第二步:在web.xml文件中配置该Filter;
代码:
<!-- 配置过滤器 --> <filter> <!-- Filter的名字 --> <filter-name>MyFilter</filter-name> <!-- Filter的完整类名 --> <filter-class>com.entor.filter.MyFilter</filter-class> </filter> <filter-mapping> <!-- 注意:改名字必须要与上面的Filter的名字相同 --> <filter-name>MyFilter</filter-name> <!-- 配置拦截的路径 --> <url-pattern>/download.jsp</url-pattern> </filter-mapping>
结果:
四、生命周期的方法
init():服务器启动时候,创建过滤器对象,然后再执行init方法。在init方法中一般会执行一些初始化的操作,但是只会执行一次。
doFilter():每次过滤请求后执行方法。
destroy():过滤器被销毁前,服务器会自动调用该方法。在destroy方法中,可以执行一些资源回收的操作
五、FilterConfig对象
结果:
六、配置路径
过滤器的路径与Servlet的路径的配置相同的。配置的要求:
1)要么以“/”开头,要么以“*”开头;
2)如果在路经中使用星号,那么星号就不是通赔符,而是一个普通的字符;
3)可以使用多个url-pattern配置多个路径;
七、拦截方式
REQUEST:默认拦截方式。它只会对浏览器发起的请求进行拦截
FORWARD:当执行请求转发之前会执行过滤器
INCLUDE:当一个页面包含另一个页面的时候执行过滤器
ERROR:如果在web.xml文件中配置error-page节点,那么当程序发生异常的时候,就会先执行过滤器,然后在跳转到location节点指定的页面
八、过滤器链
如果在同一个资源上配置多个过滤器,那么他们的执行顺序:先配置的过滤器就会先启动,然后再执行放行,最后按照配置顺序的相反方向执行放行的代码。