Filter入门学习
Filter
Filter的定义
Filter也叫过滤器也可以叫拦截器,使用Filter技术可以对web服务器管理的所有web资源,比如:Jsp,Servlet,静态图片文件或静态html文件进行拦截,从而实现一些特殊的功能。比如:实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等。
Filter的使用
- 编写Java类实现Filter接口
- 重写doFilter方法
- 设置拦截的url
Filter的配置
使用xml配置
在web.xml配置文件里配置:
<filter>
<filter-name>first_filter</filter-name>
<filter-class>cn.cube.Filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>first_filter</filter-name>
<!-- 这个是通过资源路径来拦截-->
<url-pattern>/filterServlet</url-pattern>
<!-- 可以过滤所有 以及部分资源-->
<url-pattern>/*</url-pattern>
<!-- 这个是对ServletName进行拦截-->
<!-- <servlet-name>FilterServlet</servlet-name>-->
</filter-mapping>
filter-name是你自己设置filter的name,filter-class是你创建的实现了FIlter接口Java类,url-pattern是通过资源路径来获取要拦截的Servlet,servlet-name是通过Servlet类的name来获取要拦截的Servlet。Servlet的name以及资源路径可以通过@WebServlet注解来进行配置。
使用注解配置
在你创建的实现Filter接口的Java类上添加@WebFliter("..."),括号里面有几种情况:
- 注解为@WebFilter(servletName = "...")与servlet-name配置效果一致
- 注解为@WebFliter("..."),全部省略不写,表示资源路径即value值,与url-pattern配置效果一致
- 注解为@WebFilter(servletNames = {"...","..."})表示拦截多个servlet-name的资源
Filter的优先级
使用xml配置高于使用注解进行配置。
使用注解配置,优先级看类名字符串字母顺序。如果不同包同名,则按照包名排序
使用xml配置,按照 filter-mapping顺序,从上往下。
过滤器链
通常客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器,这组过滤器就被称为一条过滤器链。
每个过滤器实现某个特定的功能,一个过滤器检测多个Servlet(匹配几个,检测几个)。
当第一个Filter的doFliter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有则继续调用。
Filter的初始化参数
在web.xml文件里配置
<filter>
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
param-name是指配置参数名,param-value是指配置参数值
使用注解进行配置
@WebFilter(servletNames = "/filterServlet",initParams = {@WebInitParam(name = "charset",value = "UTF-8")})
初始化参数的获取
在init方法中使用FilterConfig对象来获取:
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String charset = filterConfig.getInitParameter("charset");
}
也可以自己在外部定义一个FilterConfig对象,就可以在不同方法中获取初始化参数。
使用Filter设置编码
通常我们在获取请求参数或者要在页面输出文字前,要先设置编码,现在有了过滤器之后,就可以直接在一个过滤器里设置编码,注解的value值设为"/*",就可以实现所有的Servlet在使用时都不用设置编码。

浙公网安备 33010602011771号