什么是过滤器
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
过滤器的作用
NOTE:拦截资源、预处理或后处理
Filter是三大组件之一
NOTE:Servlet、Filter、Listener,且都需要在”web.xml”中进行设置
Filter的配置
在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<!-- Filter的名字,此处为FilterA-->
<filter-name>FilterA</filter-name>
<!-- Filter的类,也就是所在位置,这里显示为Filter包下的FilterA-->
<filter-class>Filter.FilterA</filter-class>
</filter>
<filter>
<filter-name>FilterB</filter-name>
<filter-class>Filter.FilterB</filter-class>
</filter>
<!-- mapping映射设置开始-->
<filter-mapping>
<!-- 映射对象(name)FilterA-->
<filter-name>FilterA</filter-name>
<!-- 对谁拦截:/ServletA-->
<url-pattern>/ServletA</url-pattern>
<!-- mapping映射设置结束-->
</filter-mapping>
<!--Filter过滤器访问先后顺序取决于代码的书写顺序-->
<filter-mapping>
<filter-name>FilterB</filter-name>
<url-pattern>/ServletA</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ServletA</servlet-name>
<servlet-class>Servlet.ServletA</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet映射设置开始-->
<!-- servlet的名字:ServletA-->
<servlet-name>ServletA</servlet-name>
<!-- 虚拟路径:/Servlet,也就是通过这个路径才能访问到该Servlet-->
<url-pattern>/ServletA</url-pattern>
</servlet-mapping>
</web-app>
总结:过滤器访问先后顺序取决于代码的书写顺序,且Filter在web.xml中配置需要、
直接配置
package Filter;
import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/ServletA")
public class FilterB implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
PrintWriter out=resp.getWriter();
out.print("Stop![My FilterB]<br>");
chain.doFilter(req, resp);//放行
out.print("Come Back![FilterB]<br>");
}
public void init(FilterConfig config) throws ServletException {
}
}



