Filter过滤器
开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。见下图:
简单的说,过滤器可以针对请求和响应过程中的一些操作进行代码逻辑的判断,只要针对特定的请求和响应配置了过滤器,那么在这些请求和响应过程中都会经过过滤器,也就是说我们可以将一些在请求和响应过程中要进行的公共代码逻辑写在过滤器中
过滤器实现:
普通类实现Filter接口
在web.xml中配置或者使用注解配置【@WebFilter(“过滤器路径”)不推荐】
public class FirstFilter implements Filter { public FirstFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println(“请求”); chain.doFilter(request, response); System.out.println(“响应1”); } public void init(FilterConfig fConfig) throws ServletException { } }
web.xml配置
first
cn.itsource.filter.FirstFilter
first
/index.jsp
注解
@WebFilter("/*") public class FirstFilter implements Filter { public FirstFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println(“请求”); chain.doFilter(request, response); System.out.println(“响应1”); } public void init(FilterConfig fConfig) throws ServletException { } }
注意:在过滤器中的url-pattern代表的是要去过滤的访问路径
生命周期
创建->初始化->执行[每次请求/响应都执行]->销毁(服务器正常关闭时)
Filter接口
void init(FilterConfig config)
初始化过滤器,在服务器启动时就执行
void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
配置过滤器之后,每次请求和访问经过过滤器时都会执行的方法
void destroy()
过滤器关闭时执行
FilterConfig
servlet 容器使用的过滤器配置对象,该对象在初始化期间将信息传递给过滤器。
API
String getFilterName()
返回此过滤器的过滤器名称
String getInitParameter(String name)
返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null
Enumeration getInitParameterNames()
以 String 对象的 Enumeration 的形式返回过滤器初始化参数的名称,如果过滤器没有初始化参数,则返回一个空的 Enumeration。
ServletContext getServletContext()
返回对调用者在其中执行操作的 ServletContext 的引用。
过滤器链
过滤器链是多个过滤器的统称,过滤器链中的过滤器的执行的顺序与的配置顺序有关。我们在访问最终的资源的时候会经过这一组过滤器,在返回的时候还会经过这一组过滤器。
因为过滤器链是由多组过滤器组成,那么在一个过滤器执行完毕需要执行下一个过滤器的时候,需要上一个过滤器有一个放行操作【chain.doFilter(req, resp)】,这样紧跟着的过滤器才能执行
注意:放行前的代码在请求时执行,放行后的代码在响应时执行
注意:过滤器链执行顺序与的配置顺序有关,见下图:
过滤器过滤配置
过滤器默认只拦截一次请求级别,实际上过滤器将过滤的请求情况分为四类,分别是:
request【请求】、redirect【重定向】、include【包含】、error【错误】
要针对以上的分类进行请求过滤,需要在的节点中配置上对应的情况,如下的配置:
REQUEST :默认值.
FORWARD :转发.
INCLUDE :包含.
ERROR :错误页面跳转.(全局错误页面)
请求转发
请求重定向
---------------------