Filter,它的名字是过滤器,可以批量拦截修改servlet的请求和响应。

需要实现接口Filter

配置

<filter> 

    <filter-name>EncodingFilter</filter-name> 

    <filter-class>anni.EncodingFilter</filter-class> 

</filter> 

<filter-mapping> 

    <filter-name>EncodingFilter</filter-name> 

    <url-pattern>/*</url-pattern> 

</filter-mapping>

filter标签部分定义使用的过滤器,

filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的

/*表示所有请求,

/表示根路径,

*(星号)代表所有请求,加在一起就变成了根路径下的所有请求。

EncodingFilter.java,来批量设置请求编码。

package

 anni; 

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; 

public

class

 EncodingFilter 

implements

 Filter { 

public

void

 init(FilterConfig config) 

throws

 ServletException {} 

public

void

 destroy() {} 

public

void

 doFilter(ServletRequest request, 

            ServletResponse response, 

            FilterChain chain) 

throws

 IOException, ServletException { 

        request.setCharacterEncoding(

"gb2312"

); 

        chain.doFilter(request, response); 

    } 

}

filter控制用户访问权限

两个点(..)代表当前路径的上一级路径

你可以使用三种方式定义url-pattern

1.直接映射一个请求。

<servlet-mapping> 

    <servlet-name>ContactServlet</servlet-name> 

    <url-pattern>/contact.do</url-pattern> 

</servlet-mapping> 

2,映射一个路径下的所有请求。

<servlet-mapping> 

    <servlet-name>EncodingFilter</servlet-name> 

    <url-pattern>/*</url-pattern> 

</servlet-mapping>

如果这个路径下还有子路径,那么子路径下的请求也会被过滤操作

需要注意的是,这种写法必须以/开头,写成与绝对路径的形式,即便是映射所有请求也要写成/*,不能简化成*

3.映射结尾相同的一类请求

<servlet-mapping> 

    <servlet-name>ControllerServlet</servlet-name> 

    <url-pattern>*.do</url-pattern> 

</servlet-mapping>

这样做的一个好处是语义更清楚,只要看到以.do结尾的请求就知道肯定是交给ControllerServlet处理了,不管这个请求是在根路径还是子路径下,都会准确无误的找到对应的servlet。

缺点就是不同路径之间进行forward,jsp里就不能再使用相对路径了

过滤链

服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。

而在实际使用时,就要特别注意过滤链的执行顺序问题,像EncodingFilter就一定要放在所有Filter之前,这样才能确保在使用请求中的数据前设置正确的编码

filter详细配置

<filter-mapping> 

    <filter-name>TestFilter</filtername>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>EXCEPTION</dispatcher> </filter-mapping>

filter过滤指定的servlet

<

filter-mapping

> 

    <filter-name>TestFilter</filter-name> 

    <servlet-name>TestServlet</servlet-name> 

<

/filter-mapping

最新文章

  1. 2014——&gt;2015,我的薪资依然是4.5
  2. C#.Net 调用方法,给参数赋值的一种技巧
  3. LoadRunner常见问题
  4. paper 49:论文退稿?审稿人帮你总结了22个能避免的常见问题
  5. ActionScript 3 中的强制类型转换
  6. word在线编辑\生成图片(包含截图与合并)
  7. 基于 Groovy 的自动化构建工具 Gradle 入门(转)
  8. SQL Server 中截取字符串常用的函数
  9. 解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列
  10. Sublime Text3介绍和插件安装——基于Python开发
  11. leetcode — remove-duplicates-from-sorted-list-ii
  12. IPv6实验1_IPv6地址配置
  13. Flask--Web From 表单
  14. MFC控件的颜色设置
  15. ajax 数据类型结构
  16. CentOS7 配置免密码登陆
  17. python基础(9)-迭代器&amp;生成器函数&amp;生成器进阶&amp;推导式
  18. redirect和forward的区别
  19. sgu 130Circle dp
  20. Ubuntu14.04配置jdk1.8.0_25,可切换版本

热门文章

  1. 创建springbootdemo后运行报MongoSocketOpenException错误解决方法
  2. 利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试
  3. SpringMVC + Mybatis bug调试 SQL正确,查数据库却返回NULL
  4. php精简完全小结(linux/laravel篇)
  5. 编译安装dropbear
  6. Python 学习系列----第一章:基础知识
  7. main方法快速编辑日历
  8. NHibernate教程(9)一1对n关联映射
  9. Linux运维:安装CentOS7.2-图解
  10. mysql初学,mysql修改,mysql查找,mysql删除,mysql基本命令