过滤器

过滤器

一过滤器的介绍

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节点指定的页面

八、过滤器链 

如果在同一个资源上配置多个过滤器,那么他们的执行顺序:先配置的过滤器就会先启动,然后再执行放行,最后按照配置顺序的相反方向执行放行的代码。

 

 

原文地址:https://www.cnblogs.com/chenjunjin/p/8485023.html