JAVA-Servlet-过滤器知识总结

JAVA Filter是什么呢?

Servlet过滤器实际上就是一个标准的java类,这个类通过实现Filter接口获得过滤器的功能。它在jsp容器启动的时候通过web.xml配置文件被系统加载。
Servlet过滤器在接收到用户请求的时候被调用,当服务器接收到用户的请求的时候,依次调用配置好的过滤器,完成后将执行请求所要求的servlet,而servlet执行后的响应,则先通过配置好的过滤器后再发送给用户。

Filter的作用是什么?

1、用户认证和授权管理。
2、统计web应用的访问量和访问命中率,生成访问报告。
3、实现web应用的日志处理功能。
4、实现数据压缩功能。
5、对传输的数据进行加密,或者转换,压缩等需求。
6、实现xml文件的XSLT的转换。

7.性能测量

为什么要用Filter?

因为像用户验证,数据加密或者转换需求,应该设计为独立的组件,随时在应用程序上进行添加 , 移除而不用修改源码,这就非常需要过滤器的存在了。安插在浏览器与Servlet中间,可以通过过滤请求与响应之间进一步处理。Servlet/jsp提供的过滤机制,可以根据需求随意更换过滤器的顺序,执行的时间。

进一步解释:

一个servlet过滤器其实是一个java类,它的实现需要分为两个部分,java类自身以及在web.xml文件中的XML描述。对于filter接口,该接口由一对描述的生命周期的方法init(),destroy(),init方法在服务器初始化过滤器的时候会调用,而destory方法在服务器关闭的时候会调用,还有一个行为方法doFilter方法会在执行过滤操作的时候调用.

如何实现Filter?

建立一个java类,必须实现Filter接口(javax.Servlet.Filter包下),并在web.xml中定义过滤器。

 1 public class filter implements Filter{//定义接口 重写方法
 2     @Override
 3     public void destroy() {
 4         // TODO Auto-generated method stub
 5     }
 6 
 7     @Override
 8     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
 9             throws IOException, ServletException {
10             
11     }
12     @Override
13     public void init(FilterConfig arg0) throws ServletException {
14         // TODO Auto-generated method stub
15     }
16 
17 }

定义web.xml:

关于web.xml的一些知识:

 过滤器通过 web.xml 文件中的两个 XML 标签来声明: 
  1、<filter> : 定义过滤器的名称,并且声明过滤器实现类和 init() 参数。 
   <filter-name> : 指定过滤器的名字;
   <filter-class> : 指定过滤器类的类名,包括类的路径;
   <init-param> : 为过滤器实例提供初始化参数,可以有多个;

  2、<filter-mapping> : 将过滤器与 servlet 或 URL 模式相关联。 
   <filter-name> :  指定过滤器的名字,与<filter>中的子元素<filter-name>相对应;
   <url-pattern> :  指定和过滤器关联的URL,为”/*”表示所有URL;

  3、<filter-mapping>元素还可以包含0到4个<dispatcher>,指定过滤器对应的请求方式,
    可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST.

 REQUEST
     当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
   INCLUDE
   如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
   FORWARD
   如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
   ERROR
     如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

 在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素。
 两个或更多个过滤器应用到同一个资源,按照它们在配置文件中显示的先后次序调用它们。

原文地址:https://www.cnblogs.com/tjc1996/p/5711491.html