Filter的介绍
拦截路径配置
拦截所有资源:/*
具体资源路径:/myServlet/demo1
拦截目录:/myServlet/*
后缀名被拦截:*.jsp
Filter的介绍
拦截路径配置
过滤器的拦截路径一般有这4种方式
- 拦截所有资源:/*,访问所有的资源,过滤器都会被执行
- 具体资源路径:/myServlet/demo1,只有访问myServlet/demo1资源时,过滤器才会被执行
- 拦截目录:/myServlet/*,访问/myServlet下所有资源是,过滤器都会被执行
- 后缀名被拦截:*.jsp,访问后缀名为jsp资源时,过滤器都会被执行
下面我们就举例演示这4种方式
来2个Servlet,资源路径分别取为/myServlet/demo1和/myServlet/demo2,一个jsp页面,myJSP.jsp,一个过滤器demo1
/myServlet/demo1代码
package com.lingaolu.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;/*** @author 林高禄* @create 2020-08-04-19:34*/
@WebServlet("/myServlet/demo1")
public class Demo1 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("/myServlet/demo1执行了......");}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
/myServlet/demo2代码
package com.lingaolu.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;/*** @author 林高禄* @create 2020-08-04-19:34*/
@WebServlet("/myServlet/demo2")
public class Demo2 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("/myServlet/demo2执行了......");}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
myJSP.jsp代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>我的JSP</title>
</head>
<body><% System.out.println("myJSP进来了......");%>
</body>
</html>
过滤器demo1代码
package com.lingaolu.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;/*** @author 林高禄* @create 2020-08-04-9:42*/
@WebFilter("/*")
public class Demo1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("demo1过滤器进来了......");filterChain.doFilter(servletRequest,servletResponse);System.out.println("demo1过滤回来了......");}@Overridepublic void destroy() {}
}
拦截所有资源:/*
现在我们的过滤器demo1的拦截路径就是/*,启动项目
访问myJSP.jsp,过滤器执行了
访问myServlet/demo1,过滤器执行了
访问myServlet/demo2,过滤器执行了
可见上面的拦截路径的配置,把所有的路径都被拦截了
具体资源路径:/myServlet/demo1
我们把过滤器的拦截路径改为/myServlet/demo1,启动项目
访问myJSP.jsp,过滤器没有执行
访问myServlet/demo1,过滤器执行了
访问myServlet/demo2,过滤器没有执行
可见上面的拦截路径的配置,只拦截了myServlet/demo1
拦截目录:/myServlet/*
我们把过滤器的拦截路径改为/myServlet/*,启动项目
访问myJSP.jsp,过滤器没有执行
访问myServlet/demo1,过滤器执行了
访问myServlet/demo2,过滤器执行了
可见上面的拦截路径的配置,只拦截了myServlet/资源目录下的资源
后缀名被拦截:*.jsp
我们把过滤器的拦截路径改为*.jsp,启动项目
访问myJSP.jsp,过滤器执行了
访问myServlet/demo1,过滤器没有执行
访问myServlet/demo2,过滤器没有执行
可见上面的拦截路径的配置,只拦截了后缀名为jsp的资源