三大组件:
- Servlet
- Listener
- Filter
- 都需要在web.xml中进行配置
- Servlet
- Listener(两个感知监听器不需要配置)
- Filter
Listener监听器
- 初次相见:AWT
- 二次相见:SAX
- JavaWeb
监听器:
- 它是一个接口,内容由我们来实现;
- 它需要注册,例如注册在按钮上
- 监听器中的方法,会在特殊事件发生时被调用!
观察者:
- 事件源
- 事件
- 监听器
JavaWeb中的监听器
- 事件源:三大域!
- ServletContext:
- 生命周期监听:ServletContextListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
- 属性监听:ServletContextAttributeListener ,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。
- HttpSession:
- 生命周期监听:HttpSessionListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
- 属性监听:HttpSessionAttributeListener ,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。
- ServletRequest:
- 生命周期监听:ServletRequestListener,它有两个方法,一个在出生时调用,一个在死亡时调用;
- 属性监听:ServletRequestAttributeListener ,它有三个方法,一个在添加属性时调用,一个在替换属性时调用,最后一个在移除属性时调用。
- ServletContext:
JavaWeb中完成编写监听器
- 写一个监听器类:要求必须实现某个监听器接口;
- 注册:是在web.xml中配置完成注册!
事件对象
- ServletRequestEvet
- ServletContex getServletContext()
- ServletRequest getServletContext()
感知监听
- 它用来添加到javaBean上,而不是添加到三大域上!
- 这两个监听器都不需要在web.xml中注册!
过滤器:
它会在一组资源(jsp、Servlet、.css、.html等等)的前面执行!
它可以让请求得到目标资源,也可以不让请求达到!
过滤器有拦截请求的能力!
登录:
允许它访问AServlet、BServlet、CServlet
过滤器如何编写
- 写一个类实现Filter接口
- 在web.xml中进行配置
Filter接口
void init(FilterConfig)
- 创建之后,马上执行;Filter会在服务器启动时就创建!
void destroy()
- 销毁之前执行;在服务器关闭时销
void doFilter(FilterRequest, FilterResponse, FilterChain)
- 每次过滤时都会执行
Filter是单例的!
web.xml
<filter>
<filter-name>xxx</ filter-name>
<filter-class>cn.itcast.web.filter.AFilter</ filter-class>
</filter>
<filter-mapping>
<filter-name>xxx</filter-name>
<url-pattern>/*</url-pattern>
<filter-mapping>
FilterChain
- doFilter(ServletRequest, ServletResponse):放行
- 放行:就相当于调用了目标Servlet的service()方法;
多过滤器
FilterChain#doFilter()方法:
- 执行目标资源,或是执行下一个过滤器!如果没有下一个过滤器,那么执行的是目标资源,如果有,那么就执行下一个过滤器!
过滤器的四种拦截方法
- 请求:<dispatcher>DISPATCHER</dispatcher>
- 转发:FORWARD
- 包含:INCLUDE
- 错误:ERROR
在Filter-mapping中进行配置