Javaweb三大组件:servlet,filter,listener
filter:过滤器
生活中的过滤器:净水器,空气净化器,土匪
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
我家相当于浏览器,我相当于一个请求,大山相当于服务器,外婆家就相当于资源。
请求在请求资源时会有过滤器拦截这个请求,过滤器可以增强请求的功能。
过滤器的作用:
一般用于完成通用的操作,例如:登录验证,统一字符编码,敏感字符过滤。
过滤器的快速入门:
步骤
1.定义一个类,实现接口Filter
2.复写方法
3.配置拦截路径
配置方法有两种:
web.xml
注解的方式
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * * @author 000 * 过滤器快速入门 */ @WebFilter("/*")//访问所有资源之前都会执行过滤器 public class FilterDemo01 implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("filterDemo01被执行了"); //放行 filterChain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
过滤器细节:
web.xml配置
过滤器执行流程
过滤器声明周期
过滤器配置详解
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>Web_Filter_02</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>demo1</filter-name> <filter-class>com.logan.study.filter.FilterDemo01</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
url-pattern表示拦截路径
过滤器的执行流程:
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class FilterDemo02 */ @WebFilter("/*") public class FilterDemo02 implements Filter { /** * Default constructor. */ public FilterDemo02() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() * 在服务器正常关闭时,Filter对象会销毁,会执行destroy方法。一般用来释放资源 */ public void destroy() { System.out.println("FilterDemo02 destroy..."); // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) * 每一次请求被拦截,会执行。 */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here System.out.println("请求来了"); //对request消息进行增强 // pass the request along the filter chain chain.doFilter(request, response); //对response消息进行增强 System.out.println("响应回去了"); } /** * @see Filter#init(FilterConfig) * 在服务器启动时,会创建filter对象,然后调用init方法。一般用来加载资源 */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub System.out.println("FilterDemo02 init..."); } }
执行流程:
执行过滤器
执行放行资源
执行放行代码下面的代码。
过滤器声明周期方法:
init:在服务器启动后,会创建Filter对象,然后调用init方法,用于加载资源
doFilter:每一次请求被拦截资源时,会执行,可以执行多次。
destory:在服务器正常关闭后被调用,一般用于释放资源。
过滤器配置详解:
拦截路径的配置:
1.具体的资源路径:/index.jsp 只有访问index.jsp资源是,过滤器才会被执行
2.拦截目录:/user/*,访问/user下的所有资源时,过滤器会被执行
3.后缀名:*.jsp 访问所有后缀名为jsp的资源时,过滤器都会被执行
4.拦截所有资源:/*
拦截方式配置:资源被访问的方式
注解配置:
设置dispatcherType属性
1.REQUEST:默认值。浏览器直接请求资源。
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转
5.ASYNC: