学习大数据——Filter的介绍和使用

过滤器:

  1. 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息。WEB资源可能包括Servlet、JSP、HTML页面等
  2. 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源作出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对响应信息做一些操作,然后再将响应发送给浏览器。
  3. 也就是说过滤器可以在WEB资源收到请求之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。
  4. 在一个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 {
	}

}

验证过滤顺序截图:
过滤顺序

发布了37 篇原创文章 · 获赞 7 · 访问量 694

猜你喜欢

转载自blog.csdn.net/qq_40394792/article/details/104229351