JavaWeb三大组件:Servlet 、Filter、 Listener
(一)listener
(1)监听对象
- Listener(监听器):一个接口
- 作用:监听对象
- 比如:ServletContextListener、ServletRequestListener
- ServletContextListener
- 作用:服务器启动时调用函数,可在函数中加载配置文件
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce){
System.out.println("ServletContext创建"); //服务器启动时调用
}
@Override
public void contextDestroyed(ServletContextEvent sce){
System.out.println("ServletContext销毁"); //服务器关闭时调用
}
}
- 同样需要在web.xml中配置
<listener>
<listener-class>com.mio4.web.listener.MyServletContextListener</listener-class>
</listener>
- ServletRequestListener:监听单个Request的生命周期
- public void requestDestroyed(ServletRequestEvent sre)
- public void requestInitialized(ServletRequestEvent sre)
- HttpSesssionListener:监听Session的生命周期
- public void sessionCreated(HttpSessionEvent hse)
- public void sessionDestroyed(HttpSessionEvent hse)
注意Listener也需要配置web.xml文件
(2)监听属性
- ServletContextAttributeListener 监听ServletContext的属性变化
- public void attributeAdded(ServletContextAttributeEvent scae)
- public void attributeRemoved(ServletContextAttributeEvent scae)
- public void attributeReplaced(ServletContextAttributeEvent scae)
(3)监听JavaBean
- JavaBean需要实现HttpSessionBindingListener接口
- public void valueBound(HttpSessionBindingEvent event) //检测到JavaBean对象绑定在Sesion域中
- public void valueUnbound(HttpSessionBindingEvent event) //检测解绑
- 检测JavaBean的序列化和反序列化
(二)filter
- Filter(过滤器):一个接口
- 在HttpServletRequest到达Servlet之前拦截检查
- 在HttpServletResponse到达客户端之前拦截检查
- 功能:过滤敏感词汇、统一编码、实现网站自动登录
- Filter也需要在web.xml中进行配置,其中url-pattern的地址对应Servlet的地址,表示在请求到达对应Servlet之前会先到过滤器
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.mio4.web.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/helloFilter</url-pattern>
</filter-mapping>
(1)生命周期
- public void init(FilterConfig config) throws ServletException :服务器启动时调用
- public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException :执行业务逻辑
- public void destroy(): Filter被移除或服务器关闭时调用
(2)FilterChain
chain.doFilter(request,response);
- 将请求放行到下一个过滤器
(3)url-pattern配置
- 匹配方式
- 完全匹配: 必须以”/”开始
- 目录匹配:必须以”/”开始,”*“结束
- 后缀名匹配:比如”.jsp”
- 在web.xml中的filter-mapping的先后会影响过滤器执行的先后顺序
(4)应用
- 比如:保持网站的登录状态