JavaEE--监听器Listener

14 篇文章 0 订阅
12 篇文章 0 订阅
  • 一、监听器Listener

javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术其中 servlet规范包括三个技术点:servlet  listener  filter

2.什么是监听器?

监听器就是监听某个对象的的状态变化的组件

监听器的相关概念:

事件源:被监听的对象  ----- 三个域对象 request  session  servletContext

监听器:监听事件源对象  事件源对象的状态的变化都会触发监听器 ---- 6+2

注册监听器:将监听器与事件源进行绑定

响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代    码

 

2.监听器有哪些?

第一维度:按照被监听的对象划分:ServletRequest域HttpSession域ServletContext域

第二维度:监听的内容分:监听域对象的创建与销毁的 监听域对象的属性变 化的

 

3.监听三大域对象的创建与销毁的监听器

  1. 监听ServletContext域的创建与销毁的监听器ServletContextListener

1)Servlet域的生命周期

何时创建:服务器启动创建

何时销毁:服务器关闭销毁

 

2)监听器的编写步骤(重点):

  1. 编写一个监听器类去实现监听器接口

  2. 覆盖监听器的方法

  3. 需要在web.xml中进行配置---注册

              3)监听的方法:

             4)配置文件:

              5)ServletContextListener监听器的主要作用

  1. 初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动  连接池的初始   化
  2. 加载一些初始化的配置文件 --- spring的配置文件
  3. 任务调度----定时器----Timer/TimerTask

 

任务调度

//当web应用启动 开启任务调动---功能在用户的生日当前发送邮件
		//开启一个定时器
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			
			@Override
			public void run() {
				// 为当前的生日的用户发邮件
				//1、获得今天过生日的人
				//获得今天的日期
				SimpleDateFormat format = new SimpleDateFormat("MM-dd");
				String currentDate = format.format(new Date());
				//根据当前时间从数据查询今天过生日的人
				QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
				String sql = "select * from customer where birthday like ?";
				List<Customer> customerList = null;
				try {
					customerList = runner.query(sql, new BeanListHandler<Customer>(Customer.class) ,"%"+currentDate+"%");
				} catch (SQLException e) {
					e.printStackTrace();
				} //08-18
				//2、发邮件
				if(customerList!=null&&customerList.size()>0){
					for(Customer c : customerList){
						String emailMsg = "亲爱的:"+c.getRealname()+",生日快乐!";
						try {
							MailUtils.sendMail(c.getEmail(), "生日祝福", emailMsg);
							System.out.println(c.getRealname()+"邮件发送完毕");
						} catch (MessagingException e) {
							e.printStackTrace();
						}
					}
				}
				
				
			}
		}, new Date(), 1000*10);
		//实际开发中起始时间是一个固定的时间
		//实际开发中间隔时间是1天

 

 

2.监听Httpsession域的创建于销毁的监听器HttpSessionListener

(1.)HttpSession对象的生命周期

何时创建:第一次调用request.getSession时创建

何时销毁:服务器关闭销毁  session过期  手动销毁
           (2.)HttpSessionListener的方法

3.监听ServletRequest域创建与销毁的监听器ServletRequestListener

           1.)ServletRequest的生命周期

创建:每一次请求都会创建request

销毁:请求结束

             2.)ServletRequestListener的方法

 

4.监听三大域对象的属性变化的

           1.域对象的通用的方法:

setAttribute(name,value)

        --- 触发添加属性的监听器的方法  

        --- 触发修改属性的监听器的方法

getAttribute(name)

removeAttribute(name) 

       --- 触发删除属性的监听器的方法

2.ServletContextAttibuteListener监听器

@Override
	public void attributeAdded(ServletContextAttributeEvent scab) {
		//放到域中的属性
		System.out.println(scab.getName());//放到域中的name
		System.out.println(scab.getValue());//放到域中的value
		
	}

	@Override
	public void attributeRemoved(ServletContextAttributeEvent scab) {
		System.out.println(scab.getName());//删除的域中的name
		System.out.println(scab.getValue());//删除的域中的value
	}

	@Override
	public void attributeReplaced(ServletContextAttributeEvent scab) {
		System.out.println(scab.getName());//获得修改前的name
		System.out.println(scab.getValue());//获得修改前的value
	}

 

 

 

3.HttpSessionAttributeListener监听器(同上)

4.ServletRequestAriibuteListenr监听器(同上)

 

5.与session中的绑定的对象相关的监听器(对象感知监听器)

  1. 即将要被绑定到session中的对象有几种状态

绑定状态:就一个对象被放到session域中

解绑状态:就是这个对象从session域中移除了

钝化状态:是将session内存中的对象持久化(序列化)到磁盘

活化状态:就是将磁盘上的对象再次恢复到session内存中

      2.绑定与解绑的监听器HttpSessionBindingListener

           3.钝化与活化的监听器HttpSessionActivationListener

可以通过配置文件 指定对象钝化时间 --- 对象多长时间不用被钝化

在META-INF下创建一个context.xml

 

<Context>

 <!-- maxIdleSwap:session中的对象多长时间不使用就钝化 -->

 <!-- directory:钝化后的对象的文件写到磁盘的哪个目录下  配置钝化的对象文件在                                                                            work/catalina/localhost/钝化文件 -->

 <Manager className="org.apache.catalina.session.PersistentManager"                                                                                                                              maxIdleSwap="1">

  <Store className="org.apache.catalina.session.FileStore" directory="itcast205" />

 </Manager>

</Context>

被钝化到work/catalina/localhost/的文件

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://JAVA.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>springMVC</display-name> <welcome-file-list> <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-mybatis.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>webAppRootKey</param-name> <param-value>keshe_C12_09.root</param-value> </context-param> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> </web-app>
最新发布
07-16

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值