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

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过滤器

    在Spring Boot应用中,Servlet 3.0过滤器(Filter)是实现请求处理前和处理后逻辑的重要组件。过滤器可以拦截HTTP请求,对请求和响应进行预处理和后处理,比如登录验证、数据编码解码、日志记录等。Spring Boot通过...

    Servlet3.0参考手册

    总的来说,Servlet3.0通过增强的注解配置、异步处理、过滤器改进、上下文参数和监听器的注解支持,以及微容器概念,极大地提升了Java Web开发的效率和便利性。这份参考手册无疑是深入理解和掌握Servlet3.0技术的关键...

    Servlet3.0新特性解析

    **二、Servlet3.0过滤器新实现** 过滤器在Servlet应用中用于对请求或响应进行预处理和后处理。在Servlet2.x中,过滤器同样需要在web.xml中进行配置。而在Servlet3.0中,我们可以通过`@WebFilter`注解来直接定义过滤...

    servlet3.0.jar下载

    7. **过滤器链优化**:Servlet 3.0允许指定多个Filter对一个Servlet,并且可以根据URL路径、HTTP方法或其他条件进行更细粒度的匹配,提高了过滤器的灵活性和效率。 8. **MIME类型匹配**:Servlet 3.0提供了更强大的...

    Servlet 3.0jar包和source包

    1. **注解配置**:在Servlet 3.0之前,开发者需要在web.xml文件中手动配置Servlet和过滤器。而Servlet 3.0允许使用注解(如`@WebServlet`,`@WebFilter`)直接在类上声明,简化了配置过程。 2. **异步处理**:...

    maven servlet 3.0 eclipse config video

    而Servlet 3.0是Java EE 6的一部分,引入了许多新功能,如注解配置、异步处理和过滤器链的增强。 **Maven配置** 1. **安装Maven**: 首先,你需要下载并安装Apache Maven到你的系统中,确保将其路径添加到系统环境...

    servlet3.0相关的包

    Servlet3.0引入了注解驱动的部署,允许开发者通过在类或方法上添加注解来定义Servlet、过滤器和监听器,从而避免了繁琐的web.xml配置。此外,还支持异步处理,使得Servlet可以在处理请求时释放线程,提高服务器性能...

    Servlet3.0特性详解

    这是Servlet3.0的一个核心特性,通过实现`ServletContainerInitializer`接口,可以在应用启动时执行自定义的初始化代码,用于注册监听器、过滤器等,增强了扩展性。 5. **Microcontainer支持**: Servlet3.0支持...

    servlet 3.0新增功能详解

    在之前的版本中,Servlet、过滤器和监听器都需要在 web.xml 文件中进行声明式配置,而在 Servlet 3.0 中,可以利用注解来替代这些配置。这不仅减少了配置文件的复杂度,也使得代码更加简洁易读。 新增的注解包括但...

    idea创建maven Servlet3.0工具

    首先,Servlet 3.0是Java Servlet规范的一个重要版本,它引入了许多新特性,如注解驱动的Web应用、异步处理能力、过滤器链的改进等。与之前的版本相比,Servlet 3.0简化了Web应用的部署和配置,开发者可以不再依赖...

    servlet3.0 规范pdf 包含javadoc

    6. **Filter链的改进**:现在,Filter可以通过`doFilter(ServletRequest, ServletResponse, FilterChain)`方法中的`FilterChain`对象按顺序调用下一个Filter,允许更灵活的过滤器配置。 7. **WebSocket支持**:尽管...

    Servlet 3.0 - Apache Tomcat 7.0.61

    6. 更强大的过滤器链:过滤器可以定义多个匹配模式,同时支持动态注册过滤器,增强了过滤器的灵活性。 二、Apache Tomcat 7.0.61特点 1. 性能优化:Tomcat 7对内存管理和线程池进行了优化,提高了响应速度和并发...

    servlet3.0的学习(二)

    在这个部分的学习中,我们将深入探讨Servlet 3.0的关键特性,包括注解驱动的配置、异步处理、过滤器改进以及依赖注入等。 首先,Servlet 3.0引入了注解配置,这大大减少了XML配置文件的使用。现在,我们可以在...

    Servlet3.0 新特性

    Servlet3.0是Java Servlet API的一个重要版本更新,它带来了许多新特性和改进,极大地提升了Web应用程序的开发效率和灵活性。以下将详细讲解Servlet3.0的关键特性。 1. **注解驱动的配置**: 在Servlet3.0之前,...

    Servlet3.0 Demo

    开发者可以直接在Filter类上使用这个注解,指定过滤器的URL模式和描述。 7. **预加载Servlet和Filter**: 在Servlet3.0中,可以通过`&lt;load-on-startup&gt;`元素的子元素`&lt;async-supported&gt;`来控制Servlet是否支持异步...

    官方servlet3.0.rar

    Servlet 3.0引入了对注解的全面支持,使得开发者不再需要编写XML配置文件来声明Servlet、过滤器和监听器。例如,我们可以通过`@WebServlet`, `@WebFilter`和`@WebListener`注解直接在类级别定义它们,简化了部署...

    Servlet3.0

    4. **过滤器链优化**: 允许在Filter中指定只匹配特定的Servlet,减少了不必要的过滤器调用。 5. **WebSocket支持**: 虽然不是Servlet 3.0的一部分,但WebSocket协议的API在Servlet 3.1中被引入,提供了低延迟、双向...

    servlet3.0 jar \ doc \pdf 相关文档资料

    过滤器可以使用`@WebFilter`注解来定义,同时支持通过注解配置过滤器的URL模式、DispatcherType和优先级。 5. **微容器(Microcontainer)**: Servlet 3.0引入了微容器概念,使得应用程序可以在不依赖全局web....

    Servlet 3.0规范

    过滤器在Servlet 3.0中得到了进一步的增强,它们可以在请求到达目标Servlet之前或响应返回客户端之后进行预处理或后处理。这种机制使得开发者可以方便地添加如日志记录、安全验证、数据格式转换等功能。 #### 6. **...

    Servlet 3.0 API - Apache Tomcat 7.0.41

    8. **过滤器链的改进**:Servlet 3.0允许在同一个Filter中匹配多个URL模式,过滤器链的控制也更加灵活,可以使用`doFilter(ServletRequest, ServletResponse, FilterChain)`方法的参数控制过滤器执行流程。...

Global site tag (gtag.js) - Google Analytics