javaWeb过滤器–filter-概述
filter-概述
- Filter是什么?
Java Web开发有三大组件:Servlet Filter Listener
- Filter有什么作用?
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 - 有什么特点?
通常都是用来拦截request进行处理的
也可以对返回的response进行拦截处理
filter-过滤器的创建
- Idea 创建 Filter
- 类比 Servlet
//servlet的创建
@WebServlet
extends HttpServlet
doGet/doPost方法
//filter的创建
@WebFilter
implements Filter
doFilter方法
- 过滤的正确理解
如果过滤地址是s1,那么只有地址是s1的请求才能被过滤,你访问a.jpg ,s2等等,过滤器都不过滤,不会执行doFilter方法。
##案例代码
Demo01Servlet:
package com.lbl.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/s1")
public class Demo01Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet方法执行了啦");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Demo01Filter:
package com.lbl.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/s1")
public class Demo01Filter implements Filter {
public void destroy() {
}
/*
1:这个方法是你访问我要过滤的资源时,自动执行
2: FilterChain被称为过滤器链
3: chain.doFilter(req, resp);放行
如果调用:请求放行
如果不调用,请求不放行
*/
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("过滤器doFilter方法执行了");
chain.doFilter(req, resp);
System.out.println("过滤器响应了");
}
public void init(FilterConfig config) throws ServletException {
}
}
运行效果: