Java Web进阶(5) -- 监听器

第1章 课程介绍

1-1 监听器介绍
监听器-Listener
♦ 监听器(Listener)是J2EE Servlet模块下的组件
♦ Listener的作用对Web应用对象的行为进行监控
♦ 通过Listener监听自动触发指定的功能代码

三种监听对象
♦ ServletContext - 对全局ServletContext及其属性进行监听
♦ HttpSession - 对用户会话及其属性操作进行监听
♦ ServletRequest - 对请求及属性操作进行监听

过滤器与监听器的区别
♦ 过滤器(Filter)的职责是对URL进行过滤拦截,是主动的执行
♦ 监听器(Listener)的职责是对Web对象进行监听,是被动触发

1-2 第一个监听器
开发监听器的三要素
♦ 实现XxxListener接口,不同接口对应不同监听对象
♦ 实现每个接口中独有的方法,实现触发监听的后续操作
♦ 在web.xml中配置<listener>使监听器生效

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class FirstLstener implements ServletContextListener {
   

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
   
		// TODO Auto-generated method stub
		System.out.println("ServletContext已销毁");
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
   
		// TODO Auto-generated method stub
		System.out.println("ServletContext已初始化");
	}

}

监听器的配置方式:
在web.xml当中配置

<listener>
		<listener-class>com.imooc.listener.FirstListener</listener-class>
</listener>

注解方式:

@WebListener

1-3 内置对象监听器
内置对象监听接口
♦ ServletContextListener - 监听ServletContext对象创建、销毁操作
♦ HttpSessionListener - 监听HttpSession对象创建、销毁等操作
♦ ServletRequestiListener - 监听HttpServletRequest对象创建、销毁

代码
Servlet

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
		// TODO Auto-generated method stub
		response.getWriter().println("Hello World!");
		request.getServletContext().setAttribute("sc-attr1", "sc-attr-value1");
		request.getServletContext().removeAttribute("sc-attr1");
		request.getSession().setAttribute("session-attr1", "session-attr-value1");
		request.setAttribute("request-attr1", "request-attr-value1");
	}

监听类

public class WebListener implements ServletContextListener,HttpSessionListener,ServletRequestListener{
   

	@Override
	public void contextInitialized(ServletContextEvent sce) {
   
		// TODO Auto-generated method stub
		System.out.println("ServletContext已初始化");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
   
		// TODO Auto-generated method stub
		System.out.println("ServletContext已被销毁");
	}

	@Override
	public void sessionCreated(HttpSessionEvent se) {
   
		HttpSession session = se.getSession();
		// TODO Auto-generated method stub
		System.out.println("Session已被创建,SessionId:" + session.getId());
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
   
		// TODO Auto-generated method stub
		System.out.println("Session已被销毁");
	}

	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
   
		// TODO Auto-generated method stub
		System.out.println("HttpServletRequest已被销毁");
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
   
		HttpServletRequest request = (HttpServletRequest)sre.getServletRequest();
		// TODO Auto-generated method stub
		System.out.println("HttpServletRequest已被创建,URI:" + request.getRequestURI());
	}

}

在web.xml当中配置

<listener>
		<listener-class>com.imooc.listener.WebListener</listener-class>
</listener>
  1. 第一个请求,Web应用启动时,ServletContext被初始化,启动成功后访问地址时,一个HttpServletRequest对象被创建。同时因为是一个新的浏览器窗口,所以tomcat会创建一个session对象,网页处理完成后HttpServletRequest被销毁。
  2. 第二次请求(当浏览器窗口刷新后),session 并没有被创建,因为session id 已存在,通过确认session id 的存在,所以并不会创建新的session。此时,HttpServletRequest 又经历了一次创建与销毁的过程。
  3. 当浏览器关闭重新打开一个新的窗口,再次访问这个网址,这时一个新的session被创建。原因是新的浏览器并没有包含任何session id,所以由新的浏览器窗口向tomcat发送请求后,会为其创建一个对应的session,原有的session id并不会消失,原因是session id的凭证不存在了,30分钟后自然过期,或程序代码人为关闭。
  4. 当(servlet)关闭应用时,ServletContext 才被销毁。

1-4 属性监听器
属性监听接口
♦ ServletContextAttribut

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值