@WebFilter

@WebFilter 用于将一个类声明为==过滤器==,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )

@WebFilter 的常用属性

示例

package com.xc.common.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;/*** @ClassName: FilterDemo01* @Description:filter的三种典型应用: <br/>*                             1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法, 即是否让目标资源执行<br/>*                             2、在让目标资源执行之前,可以对request\response作预处理,再让目标资源执行 <br/>*                             3、在目标资源执行之后,可以捕获目标资源的执行结果,从而实现一些特殊的功能 <br/>*/
@WebFilter(filterName = "FilterDemo01", urlPatterns = { "/*" })
public class FilterDemo01 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("----FilterDemo01过滤器初始化----");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 对request和response进行一些预处理request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");System.out.println("FilterDemo01执行前!!!");chain.doFilter(request, response); // 让目标资源执行,放行System.out.println("FilterDemo01执行后!!!");}@Overridepublic void destroy() {System.out.println("----过滤器销毁----");}
}

Filter的生命周期

Filter的创建

  Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

Filter的销毁

  Web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。在destroy方法中,可以释放过滤器使用的资源。

FilterConfig接口

  用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得:

  •   String getFilterName():得到filter的名称。
  •   String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  •   Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  •   public ServletContext getServletContext():返回Servlet上下文对象的引用。
    范例:利用FilterConfig得到filter配置信息

示例

package com.xc.common.filter;import java.io.IOException;
import java.util.Enumeration;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;@WebFilter(filterName = "FilterDemo02", urlPatterns = { "/*" }, initParams = { @WebInitParam(name = "name", value = "xc"),@WebInitParam(name = "like", value = "java") })
public class FilterDemo02 implements Filter {/** 过滤器初始化* * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("----FilterDemo02过滤器初始化----");// <filter>// <filter-name>FilterDemo02</filter-name>// <filter-class>me.gacl.web.filter.FilterDemo02</filter-class>// <!--配置FilterDemo02过滤器的初始化参数-->// <init-param>// <description>配置FilterDemo02过滤器的初始化参数</description>// <param-name>name</param-name>// <param-value>gacl</param-value>// </init-param>// <init-param>// <description>配置FilterDemo02过滤器的初始化参数</description>// <param-name>like</param-name>// <param-value>java</param-value>// </init-param>// </filter>//// <filter-mapping>// <filter-name>FilterDemo02</filter-name>// <!--“/*”表示拦截所有的请求 -->// <url-pattern>/*</url-pattern>// </filter-mapping>// 得到过滤器的名字String filterName = filterConfig.getFilterName();// 得到在web.xml文件中配置的初始化参数String initParam1 = filterConfig.getInitParameter("name");String initParam2 = filterConfig.getInitParameter("like");// 返回过滤器的所有初始化参数的名字的枚举集合。Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();System.out.println(filterName);System.out.println(initParam1);System.out.println(initParam2);while (initParameterNames.hasMoreElements()) {String paramName = (String) initParameterNames.nextElement();System.out.println(paramName);}}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("FilterDemo02执行前!!!");chain.doFilter(request, response); // 让目标资源执行,放行System.out.println("FilterDemo02执行后!!!");}@Overridepublic void destroy() {System.out.println("----过滤器销毁----");}
}

执行结果

附录:
Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序

转载于:https://www.cnblogs.com/ooo0/p/10360952.html

@WebFilter注解相关推荐

  1. javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题

    javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题 参考文章: (1)javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFi ...

  2. (转)Servlet3.0下@WebFilter注解配置Filter

    Servlet3.0下@WebFilter注解配置Filter Filter(过滤器)主要对请求到达前进行处理,也可以在请求结束后进行处理,类似于链式.一个请求可以被多个过滤器拦截到,会依次进入各个F ...

  3. 为什么加了@WebFilter注解,Spring却没有给我自动注入该过滤器?

    在 Spring 编程中,主要配合如下注解构建过滤器: @ServletComponentScan @WebFilter 那这看起来只是用上这俩注解就能继续摸鱼了呀.但上了生产后,还是能遇到花式问题: ...

  4. Spring Boot 技术知识点:如何详解@WebFilter注解

    功能说明 在servlet3.0以后,我们可以不用在web.xml文件内配置Filter,只需要加上@WebFilter注解就可以实现,以达到简化配置的目的.该注解用来声明servlet过滤器,将会在 ...

  5. Servlet 3.0 @WebFilter注解过滤器Filter使用(如何设置多个参数的方法)

    因为在网上搜寻半天发现没有关于@WebFilter注解如何设置多个参数的方法,参考其他博主的文章和自己的实践,写下此笔记,供大家参考 Servlet3.0提供@WebFilter注解将一个实现了jav ...

  6. @WebFilter注解拦截

    @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器.该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 va ...

  7. springboot项目中利用@WebFilter注解和@Bean配置类两种方式实现Filter过滤器

    过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理.通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 ...

  8. 注解方式@WebFilter控制做个 filter的执行顺序

    之前我们控制多个filter的执行顺序是通过web.xml中控制filter的位置来控制的,放在上面的会比放在下面的先执行,如下"用户登录检查过滤器"会比"接口日志过滤器 ...

  9. java 可插拔注解_20200311 8. 注解和可插拔性

    8. 注解和可插拔性 8.1 注解和可插拔性 在 web 应用中,使用注解的类仅当它们位于 WEB-INF/classes 目录中,或它们被打包到位于应用的WEB-INF/lib 中的 jar 文件中 ...

最新文章

  1. js 中的break continue return
  2. 电气接线+线号管正确方向=电工接线好习惯!你有吗?
  3. 【Python】函数的可变可选参数传递及返回值
  4. 数据分析究竟在分析什么?
  5. 计算机网络是通过通信媒体 把各个独立,计算机网络试题选择题精华
  6. java get与post区别_HTTP请求(GET与POST区别)和响应
  7. 【CodeForces - 761B】Dasha and friends (思维,模拟,构造)
  8. ios学习:UIToolBar的单独使用
  9. 服务器入站规则 共享文件,How to :发布内部网络中的文件共享服务
  10. Java---设计【高校教师信息管理系统】
  11. 「ZigBee模块」协议栈-串口透传,打造无线串口模块
  12. 微信小程序Cede获取 PC电脑版微信实现Code的获取
  13. Python的打包神器—Nuitka!
  14. 突破软件测试的瓶颈(上)
  15. 让别人关机!(VB语言)
  16. 干了这碗蛋炒饭 继续APP性能提升
  17. celery:File /home/hadoop/.virtualenvs/Django01/lib/python3.7/site-packages/fdfs_client/utils.py
  18. PMP项目管理 | 项目质量管理
  19. 地图与WebGIS、地图的作用、数字地图的应用
  20. html 打印指定内容

热门文章

  1. ubuntu python3.7修改默认pip版本_Ubuntu16.04安装Python3.7及其pip3并切换为默认版本
  2. ios uilabel 垂直居中_iOS – 让UILabel的文字顶部对齐[转载]
  3. linux删除jpeg动态库,linux如何不用的删除动态库
  4. java可以连接php吗_java - 需要PHP或Java代码才能使用多个Internet连接
  5. jmeter性能测试实例_实例教程:手把手教你Jmeter性能测试
  6. sql server datetime取年月_快速定位数据库性能问题,RDS推出慢SQL统计分析
  7. Ubuntu启动显示System program problem detected 原因及解决方法
  8. 10款常用Java测试工具
  9. 《天天数学》连载41:二月十日
  10. Python学习笔记:使用Python操作数据库