JavaWeb基础(10):listener&filter

本文深入解析了JavaWeb中的三大核心组件:Servlet、Filter、Listener的功能与应用。详细介绍了监听器(Listener)如何监听对象、属性及JavaBean的变化,以及过滤器(Filter)的生命周期、FilterChain机制和URL模式配置,帮助读者全面理解JavaWeb的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)应用

  • 比如:保持网站的登录状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值