五、 Java Filter
1. Java Filter 简介
* Java Filter
1. Java Filter(即:Java 过滤器):它能够对目标资源的请求或响应进行截取,即对服务器接受的请求资源或响应给浏览器的资源进行截取,通常用于拦截 Request 请求
2. 在 Web 项目中可以有多个 Java 过滤器
3. 应用场景:
a.统一设置编码格式
b.Session 管理
c.权限管理,如:访问权限控制等
d.资源管理,如:敏感字符过滤等
4. 生命周期:从服务器启动直到关闭
* Filter 的使用
1. 在 web.xml 中配置过滤器:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.ncdx.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:
a.url-pattern:/* 表示拦截所有的请求:
b.url-pattern:*.do 表示拦截所有以 ".do" 结尾的请求,一般进行模块拦截处理
c.url-pattern:url 表示拦截指定 url 的请求。针对指定的 Servlet 进行拦截处理,可以实现对 Servlet 的保护
2. 创建一个实现 Filter 接口的 Java 类,复写接口方法:
1)public void init (FilterConfig filterConfig) throws ServletException;
a.服务器启动即执行,资源初始化
2)public void doFilter (ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException;
a.拦截资源的方法体,在此方法中可以对目标资源进行处理
b.调用放行方法:chain.doFilter(req, resp);
3)public void destroy();
a.服务器关闭即执行
* Java 过滤器的工作原理如下图所示:
1. 客户端发起请求到服务器,服务器接收到请求后,根据 URI 信息在 web.xml 中找到对应的过滤器执行 doFilter() 方法
2. doFilter() 方法对此次请求处理后如果符合要求则调用 chain.doFilter(req, resp); 放行
3. 放行后如果还有符合要求的过滤器则继续进行过滤,直到被对应的 Servlet 处理
4. Servlet 完成对请求的处理后,也就是 service() 方法结束后,还需要继续返回到相应的 doFilter() 方法中执行
5. 最后,把处理结果响应给客户端
2. Java 过滤器实例
/**
* 利用 Java 过滤器统一设置编码格式
*/
public class FlowerFilter implements Filter{
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//放行
chain.doFilter(req, resp);
}
}
/* 在 web.xml 中的配置如下:*/
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.ncdx.filter.myFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>