`
234390216
  • 浏览: 10191951 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460716
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771645
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395304
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393852
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678174
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529224
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178620
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:461602
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150073
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66784
社区版块
存档分类
最新评论

Servlet3.0过滤器

阅读更多

Servlet3.0过滤器

 

       Servlet3.0里面的过滤器跟以前版本的一样,还是需要实现javax.servlet.Filter接口。Filter接口中定义了三个方法,init(FilterConfig filterConfig)destroy()doFilter(HttpRequest request, HttpServletResponse response, FilterChain chain)

       init()方法会在Filter初始化后进行调用,在init()方法里面我们可以通过FilterConfig访问到初始化参数(getInitParameter()getInitParameters())、ServletContextgetServletContext)和当前Filter部署的名称(getFilterName())等信息。destroy()方法将在Filter被销毁之前调用。而doFilter()方法则是真正进行过滤处理的方法,在doFilter()方法内部,我们可以过滤请求的request和返回的response,同时我们还可以利用FilterChain把当前的requestresponse传递给下一个过滤器或Servlet进行处理。

 

public class ExampleFilter implements Filter {
 
   @Override
   public void destroy() {
      System.out.println("destory filter……");
   }
 
   @Override
   public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain chain) throws IOException, ServletException {
      System.out.println("filter……");
      chain.doFilter(request, response);
   }
 
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
      String param1 = filterConfig.getInitParameter("param1");
      System.out.println("filter init……" + param1);
   }
 
}

  

       至于Filter的配置,在Servlet3.0中我们除了使用传统的方式在web.xml文件中进行配置以外,还可以使用注解的方式进行配置。使用注解的方式配置时我们需要在Filter实现类上用@WebFilter注解进行标注,然后指定其urlPatterns属性或者value属性。@WebFilter注解的可配置属性和@WebServlet的可配置属性基本上是差不多的。在@WebFilterurlPatterns属性和value属性都可以用来指定当前Filter要过滤的请求地址,且它们都是数组形式,支持同时指定多个地址进行过滤,但是不能同时指定urlPatterns属性和value属性,如果同时指定了urlPatterns属性和value属性则请求地址过滤会失效,这个时候就只能通过servletNames来进行过滤了。除了urlPatterns属性和value属性外,@WebFilter还可以指定以下几个比较重要的属性:

l  initParams:用于指定初始化参数的,其内容是一个@WebInitParam数组,其中每一个@WebInitParam代表一个初始化参数。

l  asyncSupported:表示是否支持异步调用,默认是false,关于Servlet3.0中的异步调用请参考我的另一篇文章(Servlet3.0Servlet的使用)。有一点需要注意的地方是如果FilterasyncSupported指定为false,那么经过Filter过滤后的request将不再支持异步调用了。

l  dispatcherTypes:指定Filter需要过滤的dispatcher类型,它是一个数组类型,里面的每一个元素都是枚举DispatcherType的一个元素。支持的元素有ASYNCERRORREQUESTFORWARDINCLUDE,默认是REQUEST

l  servletNames:字符串数组类型,指定需要过滤的servlet名称。servletNames过滤跟url过滤是不一样的,如果指定的servletNamesurlPatternsvalue有重复的,则当前过滤器会执行两次

 

       使用注解进行配置:

@WebFilter(urlPatterns={"/servlet/*"}, asyncSupported=true, dispatcherTypes={DispatcherType.REQUEST},
         initParams=@WebInitParam(name="param1", value="value1"))
public class ExampleFilter implements Filter {
 
   @Override
   public void destroy() {
      System.out.println("destory filter……");
   }
 
   @Override
   public void doFilter(ServletRequest request, ServletResponse response,
         FilterChain chain) throws IOException, ServletException {
      System.out.println("filter……");
      chain.doFilter(request, response);
   }
 
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
      String param1 = filterConfig.getInitParameter("param1");
      System.out.println("filter init……" + param1);
   }
 
}

 

       web.xml中进行配置:

   <filter>
      <filter-name>example</filter-name>
      <async-supported>true</async-supported>
      <filter-class>com.xxx.ExampleFilter</filter-class>
      <init-param>
         <param-name>param1</param-name>
         <param-value>value1</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>example</filter-name>
      <dispatcher>REQUEST</dispatcher>
      <dispatcher>FORWARD</dispatcher>
      <servlet-name>exampleServlet</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
   </filter-mapping>

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    springboot-Servlet3.0过滤器

    springbootServlet3.0过滤器

    Servlet3.0新特性解析

    Servlet3.0新特性解析_03_Servlet3.0监听器、过滤器实现方式详解及Servlet的动态注册剖析

    Servlet3.0使用注解标注过滤器(Filter)

    Servlet3.0使用注解标注过滤器 Servlet3.0使用注解标注过滤器

    SpringMVC 全注解实现 servlet3.0以上的容器支持.docx

    请求旅行的第一站是Spring的 DispatcherServlet ,和大多数Javaweb应用相同,Spring MVC通过一个单独的前端控制器过滤分发请求。当Web应用委托一个servlet将请求分发给应用的其他组件时,这个servlert称为 前端...

    JSP & Servlet学习笔记

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。, 本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于...

    JSP&Servlet学习笔记.pdf

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。  本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于...

    annotaction

    2. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声 明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。 3. 可插性支持:熟悉 Struts2 的开发者一定...

    JSP & Servlet学习笔记(第2版)

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于“微博...

    JSP_Servlet学习笔记(第2版)

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。  本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP &Servlet;技术应用于...

    JSP_Servlet学习笔记(第2版).pdf

    《JSP & Servlet学习笔记(第2版)》涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 《JSP & Servlet学习笔记(第2版)》以“微博”项目贯穿全书,将JSP & Servlet技术应用...

    JSP&Servlet;学习笔记

    本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例。 本书在讲解的过程中,以“微博”项目贯穿全书,随着每一章的讲述都在适当的时候将JSP & Servlet技术应用于“微博...

    JSP&Servlet;学习笔记.epub

    适合在kindle上看的电子书。本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做了全面更新...本书还涵盖了文本处理、图片验证、自动登录、验证过滤器、压缩处理、JSTL应用与操作等各种实用范例

    servlet3-filter-async-test

    异步模式下的过滤器链(servlet 规范 3.0+)在 servlet 规范中似乎受到严重限制(整个过滤器-servlet 处理链必须在同一线程中运行)并且并不总是完全清楚先前存在的 API 表面的哪些部分是指与异步功能( )互操作。...

    JavaWeb笔记

    该文件包含有对JAVA和Web的相关指导讲解,包括Eclipse的用法,JavaWeb开发基础,Servlet编程,JSP编程,监听器,过滤器,文件上传下载,Servlet3.0特性等。

    未过滤:用于在Scala中处理HTTP请求的工具包

    过滤将核心库绑定到Servlet 3.0 API中的过滤器。过滤异步为过滤器模块提供异步支持码头提供用于服务过滤器的嵌入式Web服务器抽象。净值将核心库绑定到Netty通道处理程序,并提供嵌入式服务器。净负荷为使用netty的多...

    Java™ Servlet 规范.

    1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................

    FruitSys_java编程_易买网_jsp_

    小练习小项目练手使用JSP实现页面显示使用Servlet进行流程控制使用JavaBean实现业务封装使用数据源+JDBC访问数据库使用jQuery进行页面交互使用过滤器完成中文乱码的问题使用Servlet 3.0的注解实现Servlet声明使用...

Global site tag (gtag.js) - Google Analytics