过滤器类似于servlet,它们的写法很相似,过滤器它也是处理请求,但它不是处理请求,而是在servlet之前对请求的request和response进行信息的处理;相当于在处理servlet之前或之后对request和response进行修改;

过滤器是可以配置多个的,多个配置的过滤器称之为“过滤链(FilterChain)”;

客户端请求request在抵达servlet之前会经过FilterChain里的所有过滤器,服务器响应response从servlet抵达客户端浏览器之前也会经过FilterChain里面的所有过滤器,概念图如下:

过滤器Filter

 

该如何定义过滤器?例如设置字符编码;

首先创建一个名为SetCharacterEncodingFilter的类,让其实现接口Filter;然后再实现三个方法;分别是init、doFilter、destroy;

Init:初始化,只会在web加载的时候调用,即启动如tomcat等服务器时调用,一般复制加载配置的参数;

doFilter:进行过滤的方法,每次客户端请求都会调用一次,F ilter 的所有工作基本都集中在该方法中进行;

destroy:销毁,web 程序卸载的时候调用。一般负责关闭某些容器等;

具体代码如下:

过滤器Filter

类写好了,还需要在Web.xml中进行配置;每个过滤器需要配置在web.xml中才能生效,一个过滤器需要配置<filter> 和 <filter-mapping> 标签;

首先是<filter></filter>,配置 Filter 名称,实现类以及初始化参数。可以同时配置多个初始化参数;接着是<filter-name> </filter-name>,如

<filter-name>SetCharacterEncodingFilter</filter-name>

然后是<filter-class> </filter-class>,如

<filter-class>com.nl.filter.SetCharacterEncodingFilter</filter-class>,这里需要注意写对链接,当链接正确无误的时候,按住Ctrl+左击 是可以跳转到该页面的

紧接着就是<filter-mapping></filter-mapping> ,配置什么规则下使用这个 Filter

如:

过滤器Filter

需要注意的是,<url-pattern>/*</url-pattern>在次数是过滤全部,它也可通过指定连接来过滤部分,如<url-pattern>/servlet/Demo</url-pattern>,而<dispatcher></dispatcher>有默认值,它可以写或者不写,仍需要注意的是<url-pattern> 和 <dispatcher> 是且的关系,只有满足 <url-pattern> 的条件,且满足 <dispatcher> 的条件,该 Filter 才能生效。

一个Web程序可以配置多个Filter,访问有先后顺序,<filter-mapping>配置在前面的Filter 执行要早于配置在后面的 Filter

SetCharacterEncodingFilter的具体代码如下:

过滤器Filter

 

相关文章:

  • 2021-04-13
猜你喜欢
  • 2022-12-23
  • 2021-09-28
  • 2021-06-27
  • 2021-06-15
相关资源
相似解决方案