Filter (过滤器)
Listener(监听器)
Filter
作用:
一般用于完成通用的操作。登陆验证,编码初六,敏感字符等
使用步骤
1.定义一个类,实现接口Filter,
注意:该接口是javax.servlet包下的接口
2.覆写方法
doFilter(...)
init(...)
destroy()
3.配置拦截路径
1.web.xml的配置方式
<filter>
<filter-name>demo</filter-name> 为该类取名
<filter-class>过滤器全限定类名</filter-class>
</filter>
<filter-mapping>
<filter-name>demo</filter-name>
<url-pattern>/*</url-pattern> 配置要过滤的路径
</filter-mapping>
2.使用注解的方式
在Filter接口的实现类的类上使用@WebFilter注解
可以设置过滤那些路径,
如: @WebFilter("/two.html")
其实还可以指定拦截的目录,不一定要指定文件
如, /user/* :表示user目录下的所有资源
也可以设置后缀名拦截
如: *.jsp 表示所有后缀为jsp的资源会被拦截,而且该方式不需要以斜杠开头
生命周期
在服务器启动后,会创建Filter对象,调用init方法,且只执行一次,一般用于加载资源
服务器关闭后,Filter对象被销毁,销毁前先调用destroy方法,前提是正常关闭服务器,执行一次,释放资源
dofilter()方法是每一次请求被拦截时,会执行,
当然拦截后,处理完后,可以放行
Filterchain.dofilter(ServletRequest,ServletResponse)
执行流程
请求路径
拦截,执行过滤器dofilter方法
放行后,可请求访问路径
请求结束后,返回来执行放行后的代码
拦截方式的配置
资源被访问的方式
:
设置dispatcherTypes属性
REQUEST: 默认值 , 浏览器直接请求资源时,被拦截
FORWARD:转发访问资源 ,只有转发资源时,过滤器才会拦截
INCLUDE: 包含访问资源
ERROR :错误跳转资源
ASYNC:异步访问资源
注解方式
使用:
@WebFilter(value="/demo" , dispatcherTypes=DispatcherType.REQUEST)
这样子注解,当要设置多个值时,要使用大括号括起来
web.xml配置
设置 <dispatcher></dispatcher>标签即可 ,里面也有5个取值
该标签配置在 <filter-mapping> 标签里面
过滤器链(配置多个过滤器)
执行流程
过滤器1
过滤器2
资源执行
过滤器2
过滤器1
多个过滤器的执行顺序
注解配置
按照类名的字符串比较顺序规则比较,值小的先执行
如 AFilter 和 BFilter, AFilter先执行
且创建的顺序也和名称有关
web.xml配置
谁定义在上边,就先执行谁
多个过滤器时,先创建胡先销毁,servlet会在过滤器前销毁,
监视器会在最后销毁
Listener
,最先创建胡
事件监听机制
事件:一件事
事件源:事件发生的地方
监听器:一个对象
注册监听:将事件,事件源,监听器绑定在一起,当事件源发生某个事件后,执行监听代码
ServletContextListener:监听ServletContext对象的创建和销毁
void contextDestroyed(ServletContextEvent sce)
ServletContext对象销毁前会调用
在服务器关闭时,Servletcontext对象销毁,正常关闭
void contextInitialized(ServletContextEvent sce)
ServletContext对象创建后会调用方法 ,服务器启动后自动创建
初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation")
来得到context-param 设定的值,举例,contextConfigLocation是参数名
配置监听器
web.xml
<listener>
<listener-class>全限定类名</listener-class>
</listener>
可以指定初始化参数
<context-param>
<param-name>参数名<//param-name>
<paeam-value>/WEB-INF/classes/</param-value>
</context-param>
获取参数
servletContext.getInitParameter("参数名")
注解 @WebListener