过滤器介绍
过滤器是一个用于拦截在数据源和数据目的地之间消息的一个对象
过滤器功能
- 分析请求,将请求发送给指定的资源或自己创建一个响应返回
- 在请求到达服务器端前处理请求,设置请求信息,将请求封装成符合规则的对象
- 在响应到达客户端前处理响应,将响应封装成符合规则的对象
过滤器执行
- 过滤器处理请求采取以下3种行动之一
----.过滤器自身产生一个响应,返回给客户端
----.把请求转发给过滤器链中的下一个过滤器,如果是最后一个过滤器则将请求转发给请求指定资源
----.把请求转发到另一资源
Filter接口
- init()方法: 初始化
Servlet容器最先调用过滤器的init()方法,初始化过滤器,生命周期中只调用一次 - doFilter()方法: 执行
Servlet容器调用doFilter()方法处理请求 - destroy()方法: 销毁
Servlet容器最后调用destroy()方法,释放过滤器所占的资源
过滤器API
- 过滤器相关接口、类:
简单过滤器代码:
package com.Filter;
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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;
public class DemoFilter implements Filter{
@Override
public void destroy() {
System.out.println("销毁方法");
}
@Override
public void doFilter(ServletRequest requset, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("执行过滤器");
//业务逻辑
chain.doFilter(requset,response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
//获取web.xml文件中<Filter>元素初始化
System.out.println("初始化方法");
}
}
配置过滤器web.xml
<filter>
<filter-name>DemoFilter</filter-name>
<filter-class> com.Filter.DemoFilter </filter-class>
</filter>
<filter-mapping>
<filter-name>DemoFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Filter过滤器链
- Web容器加载的顺序:web.xml文件中配置的Filter的倒序
- 拦截执行顺序:web.xml文件中配置的Filter的正序
- 销毁顺序:web.xml文件中配置的Filter的倒序