写在前面:
配置路径 | 配置方式 | |
web.xml | <Filter> <Filter-name> <Filter-class> <Filter-mapping> <Filter-name> <url-pattern> |
<dispatcher> |
注解 | @WebFilter([value=]" ") | dispatcherTypes |
/x.x /xx/* *.x /* | request、forward、include、error、async |
JavaWeb三大组件:Filter、Listener、Servlet
1. Filter 接口:过滤器
介绍:
访问服务器资源时,拦截浏览器的请求,拦截后完成一些功能
一般用于完成一些通用的操作,如:登录校验、统一编码处理、敏感字符过滤
流程:先执行过滤器放行前的代码,放行后请求资源,访问完资源后 执行过滤器放行后的代码
步骤:
定义类,实现Filter接口(javax.servlet包下的接口)
复写方法:doFilter、init、destroy
配置拦截路径,两种方式:web.xml 的 <Filter>、注解(类) @WebFilter([value=]"拦截路径")
--复写方法:
init() :在服务器启动后会创建Filter对象,调用init方法;执行一次;一般用于加载资源
destroy() :在服务器关闭后Filter被销毁,调用destroy方法;执行一次;一般用于释放资源
doFilter(request, response, filterChain) :放行前对request请求消息增强,放行后对response响应消息增强
----------放行:filterChain.doFilter(request,rsponse);
----------request、response和Servlet拿到的是同一个
--配置拦截路径:
web.xml :<Filter> <Filter-name>名 <Filter-class>全类名
<Filter-mapping> <Filter-name>名 <url-pattern>拦截路径 <dispatcher>
注解(类) :@WebFilter("拦截路径")
拦截路径:具体路径 /index.jsp ;后缀 *.jsp ;目录 /user/* ;所有 /*
--拦截方式Dispatcher:注解 dispatcherTypes数组,web.xml <dispatcher>
REQUEST 默认直接请求
FORWARD 转发访问资源(只有转发访问的资源,才能被拦截器拦截)
INCLUDE 包含访问资源
ERROR 错误跳转资源
ASYNC 异常访问资源
过滤器链(多个过滤器):
执行顺序:过滤器1--过滤器2--资源--过滤器2--过滤器1
过滤器先后配置(两种方式):
-----注解:类名的字符串 小的先执行
-----web.xml :mapping在前的先执行
获取资源请求路径:
通过过滤器拦截 非官方网站的网址请求
request.getRequestURI()
对request对象进行增强:代理模式、装饰模式
代理模式:https://blog.csdn.net/poppy_rain/article/details/98511585
2. Listener 监听器
监听器举例:ServletContextListener
ServletContextListener 接口:监听ServletContext对象的创建和销毁
-----方法:contextDestroyed (servletContextEvent) :服务器正常关闭后,ServletContext对象被销毁之前自动调用
-----方法:contextInitiallized (servletContextEvent) :服务器启动后,ServletContext被创建后自动调用
-----参数的使用:ServletContext sc=event.getServletContext(); 参数的值=sc.getInitParameter(配置的初始化参数名)
实现监听器步骤:
定义类A,实现接口ServletContextListener
复写方法
配置:web.xml 注册监听、注解(类A上)
-----web.xml :<Listener> <Listener-class>全类名A
----------指定初始化参数(可以有多个):<context-parm> <param-name>名 <param-value>值
-----注解:@WebListener