过滤器:
- 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、HTML页面等
- 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给浏览器。
- 也就是说过滤器可以在WEB资源收到请求之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。
- 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求和响应必须在经过多个过滤器后才能到达目标
过滤顺序:
使用用例:
xml配置文件:
<filter>
<display-name>HelloFilter</display-name>
<filter-name>HelloFilter</filter-name>
<filter-class>com.learn.filter.HelloFilter</filter-class>
</filter>
<filter>
<display-name>HelloFilter2</display-name>
<filter-name>HelloFilter2</filter-name>
<filter-class>com.learn.filter.HelloFilter2</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<!-- 设置要拦截的路径 -->
<url-pattern>/index.jsp</url-pattern>
<!--
如果拦截向Servlet发送请求,还可以通过Servlet的名字进行配置
<servlet-name></servlet-name>
-->
</filter-mapping>
<filter-mapping>
<filter-name>HelloFilter2</filter-name>
<!-- 设置要拦截的路径 -->
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
index,jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
System.out.println("③到达目的地!");
%>
<h1>你能看到我吗?</h1>
</body>
</html>
HelloFilter过滤器1:
/**
* 拦截index.jsp的过滤器
*/
public class HelloFilter implements Filter {
public HelloFilter() {}
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("⑤小鬼你又又回来了!");
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
HelloFilter2过滤器2:
/**
* 拦截index.jsp的过滤器
*/
public class HelloFilter2 implements Filter {
public HelloFilter2() {}
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("④小鬼你又来了!");
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
验证过滤顺序截图: