Filter过滤器的理解及应用

     最近在学习JAVAWEB相关的内容,学习过servlet之后现在在学习过滤器,以下是我对filter过滤器的理解。

     顾名思义,过滤器就是一个用来过滤某些东西的机器。就好像我们生活中的漏斗一样,将需要的留下并收集起来用作它途,将不需要的过滤下去再进行其他处理,比如可以将这些过滤掉的东西直接丢掉。它的中心作用就是‘过滤’!它有权选择要过滤的东西和对过滤之后的东西如何进行处理。具体到java中的过滤器,它的具体功能就是对servlet容器调用servlet的过程进行拦截,包括请求和响应的过程都可以进行拦截。这个filter同servlet一样,都是由servlet容器进行调用和执行的。

    那么,我们怎样在代码中创建一个满足自己需求的过滤器呢?

    首先,我们需要创建一个自己的Filter实现类,它继承了javax.servlet.Filter这个接口。且必须实现这个接口的三个方法。类似于servlet。

   1.init(FilterConfig)

       这个方法是在servlet容器初始化这个filter类实例之后就被调用,其中的FilterConfig参数可获取在web.xml中配置的这个filter的所有的相关信息。

   2.doFilter(ServletRequest,ServletResponse,FilterChain)

      这个方法在初始化之后被调用,使我们实现这个filter中真正实现我们业务代码的部分。

      为了便于我们获取一些请求的参数和调用方法,我们可以将ServletRequest和ServletResponse封装成HttpServletRequest和HttpServletResponse。

      第三个参数FilterChain是过滤器中和Servlet不一样的地方,他代表着一个链条,这个链条将多个filter链在了一起。这个链条中的过滤器的过滤顺序是按照在web.xml中配置mapping的顺序来过滤的。而且,当一个过滤器起作用后,必须执行这个filterChain.doFilter方法释放这个过滤器,他才会接着传递到下一个过滤器进行过滤。

   3.destroy()

      当这个filter实例被销毁前进行调用。

   此外,filter和servlet除了filterchain这一点不同之外,servlet还有几个封装的实现类可以使用,如HttpServlet何GenericServlet,而filter却没有它具体的实现类和接口,需要我们自己封装一个类似于HttpFilter的实现类供我们以后使用。

   创建好Filter的实现类之后,我们需要在web.xml文件中配置以下我们的过滤器要过滤的内容。

   1.

         此处给过滤器起一个名字

         此处写过滤器实现类的全类名

        

            此处填写该过滤器初始化参数的名称

            此处填写该过滤器初始化参数的值

        

     

   2.

        此处用上边起过的名字

       此处写我们需要过滤哪些URL请求

       REQUEST,FORWORDMINCLUDE.ERROE

      

   

   创建好过滤器类之后,我们还可以学习一些filter类的典型应用。如浏览器不缓存页面,字符编码的过滤器,检测用户是否登录的过滤器,权限管理的过滤器等等。

   以上是我对过滤器的理解,欢迎咨询和指导。










你可能感兴趣的:(Filter过滤器的理解及应用)