zoukankan      html  css  js  c++  java
  • 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元素。
     两个或更多个过滤器应用到同一个资源,按照它们在配置文件中显示的先后次序调用它们。

  • 相关阅读:
    HDU 6984
    洛谷 P6776
    C语言 error C4996: This function or variable may be unsafe
    C语言 sizeof 函数
    C语言 strlen 函数
    C语言 char 字符串
    C语言 goto 语句
    C语言 switch 语句
    C语言 do while 和 while 循环
    C语言 while 循环
  • 原文地址:https://www.cnblogs.com/tjc1996/p/5711491.html
Copyright © 2011-2022 走看看