什么是过滤器?
过滤器是Servlet的一个组件,是设计模式中过滤器模式(又叫责任链模式)的一种经典实现
是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能————来自某一技术大牛
作用原理如下:
由此可见,过滤器对于每一个WEB开发人员来说都是一项不容错过的技术
那么,什么是过滤器,过滤器又是如何实现的呢?
过滤器(Filter)是能够为请求和响应的header和内容进行操作的一种特殊的web组件。特殊之处在于其本身并不直接生成web响应,而是拦截过滤web请求和响应。其作用过程如下图所示:
使用方法:
1. 实现接口:定义一个过滤器需要实现 javax.servlet.filter接口
2.实现接口方法
(1) doFilter(ServletRequest,ServletResponse,FilterChain) :对请求数据进行拦截处理并使用 即相当于在此过滤器中放行
(2)FilterChain.doFilter(ServletRequest,ServletResponse) 交由下web容器进行数据处理
如果有过滤器链,则交由下一个过滤器进行处理
(3) init(FilterConfig filterConfig); web容器启动时将实例化过滤器,之后将调用此方法读取web.xml 中设置的初始参数
(4) 进行数据初始化操作
(5)destroy()->在web容器销毁filter实例前用此方法
3. 在web.xml中注册过滤器或注解方式注册过滤器,如下所示:
1.在web.xml中注册过滤器
<filter> 声明过滤器
<filter-name>过滤器名称</filter-name>
<filter-class>过滤器指向的限定包名以及过滤器类名</filter-class>
<init-param>
<param-name>参数名称</param-name>
<param-value>参数值</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>过滤器名称</filter-name>
<url-pattern>对那些地址进行拦截</url-pattern>
<servlet-name>指定要拦截的servlet名称,与web.xml文件定义的servlet命名一致</servlet-name>
<dispatcher>对那些请求进行拦截 </dispatcher>
</filter-mapping>
}
@WebFilter (urlPatterns = "/newsServlet")
//(urlPatterns = "/newsServlet")代表过滤那个servlet实现类
public class NewsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws
ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("经过了newsFilter过滤器..........");
//执行doFilter()方法,则进入到下一个过滤器,即放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
过滤器的作用:
1. 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息,
也就是说可以监视,修改或以某种方式处理客户端与服务端下在交流的数据
2.过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
(1)在客户端的请求访问后端资源之前,拦截这些请求。
(2)在服务器的响应发送回客户端之前,处理这些响应。