**
Servlet过滤器的基本介绍
**
servlet过滤器是从Servlet2.3规范开始新增的功能,Servlet过滤器与Servlet十分相似,但具有拦截客户端/浏览器的请求功能,Servlet过滤器可以改变请求的内容,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端/浏览器与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。
Servlet过滤器的图解:
如果一个Web应用使用一个过滤器不能解决业务需求,此时可以部署多个过滤器对业务请求进行多次处理,这样就形成了一个过滤器链。
过滤器的使用对象存放在javax.servlet中的FIlter接口,除了这个接口,与过滤器相关的对象还有FIlterConfig与FilterChain对象,分别为过滤器的配置对象和过滤器的传递工具。在实际开发中,我们一般只使用Filter对象即可。
Filter接口的使用方法:
Init(FilterConfig filterConfig):过滤器初始化方法,该方法在过滤器初始化时使用
doFilter(ServletRequest request,ServletResponse response,FilterChain chain):对请求进行过滤处理。
Destroy():销毁方法,以便释放资源
FilterConfig接口的方法:
getFilterName():获取过滤器的名字。
getServletContext():获取Servlet上下文
getInitParameter(String name):获取过滤器的初始化参数值
getInitParameterNames():获取过滤器的所有初始化参数
FilterChain接口的方法:
只有doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)方法
实现代码:
class MyFilter implements Filter
{
//初始化方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
//过滤器处理方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//处理操作
//.......
//.......
//!!!使用过滤器并不一定要将请求向下传递到下一过滤器或者目标资源,也可以在过滤处理后,直接返回客户端
filterChain.doFilter(servletRequest,servletResponse);
}
//销毁方法
@Override
public void destroy() {
//释放资源
}
}
过滤器与Servlet一样,创建后同样需要进行配置,配置的步骤:分别为声明过滤器对象和创建过滤器映射。
FIlter配置内容:
<filter>
<!-- 过滤器名称 --!>
<filter-name>MyFilter</filter-name>
<!-- 过滤器完整类名 --!>
<filter-class>....</filter-class>
<!-- 参数设置 --!>
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
<!-- 过滤器URL的映射 --!>
<url-pattern>/MyFilter</url-pattern>
</filter>
<filter-mapping>
<filter-name>过滤器名称</filter-name>
<url-pattern>/过滤器URL映射</url-pattern>
</filter-mapping>***