监听器的作用:
- ServletContextListener监听器的主要作用
- 初始化的工作:初始化对象 初始化数据 ---- 加载数据库驱动 连接池的初始 化
- 加载一些初始化的配置文件 --- spring的配置文件
- 任务调度----定时器----Timer/TimerTask
如何设置监听器:
(自定义方法实现特定的接口,并在配置文件中配置监听器)
监听器的相关概念:
事件源:被监听的对象 ----- 三个域对象 request session servletContext(域)
监听器:监听事件源对象 事件源对象的状态的变化都会触发监听器 ---- 6+2
(自定义类)
注册监听器:将监听器与事件源进行绑定(实现某个特定的监听接口)
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ---- 程序员编写代 码(自定义类中的方法)
Demo
自动发生日祝福
public class BirthdayListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
//当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天
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
总结:
//总结:
//通过域的监听对象我们可以得到域,可以通过相应的方法获取中的内容
//总结: timer 是就jdk包中的一个类 主要作用用于定时执行某个任务
//主要方法:timer.scheduleAtFixedRate(task, firstTime, period);
//new TimerTask() {
// @Override
// public void run() {
// System.out.println("银行计息了.....");
// }
//}
//匿名内部类主要是用类中(特点:既然是匿名类,所以你无法在别的地方使用这个类(实例化,调用它的静态方法之类的)而普通的类可以
//匿名内部类在写法上也普通的内部类不同
//匿名内部类的前提是存在一个类或者接口,且匿名内部类是写在方法中的。
//只针对重写一个方法时使用,需要重写多个方法时不建议使用
//new 类名或接口名(){ //类名在某个方法中的时候有时候是固定的
// 重写方法;
//}; //注意分号
//以上就是内部类的格式,其实这整体就相当于是new出来的一个对象
//注册监听器其实就是实现某个特定的监听接口。要起到监听的作用一定要配置好(同时要注册监听器)
//钝化与活化的作用(如何实现对象的活化和钝化?就是让对象实现Serializable, 同时在配置文件中设置时间(多久不用会被钝化)
//<Context>
//<Manager className="org.apache.catalina.session.PersistentManager"
// maxIdleSwap="1">
// <Store className="org.apache.catalina.session.FileStore"
// directory="cjq" />
//</Manager>
//</Context>
//服务器内存不够了,把最近不活动的session序列化到磁盘,在序列化之前你会收到监听事件
//如果这个钝化的用户某个时候又访问了,服务器在内存没找到session,就去磁盘找,再反序列化到内存,这个时候你又会收到监听事件
//你放入session的一切变量都必须是可序列化的,否则失败
//什么时候序列化和反序列化完全由容器决定,你只能监听事件
//Serializable(对象要实现序列化就需要实现这个接口,就可以进行内存写入到磁盘的必要因素(简单来说 序列化就是把Java对象储存在某一地方(硬盘、网络),以便于传输))
//对象的(绑定与解绑 )以及(活化与钝化)都是针对对象的,所以是Javabean实现接口并写接口的方法
//tomcat没有邮箱服务器的功能,他的作用就是用于接受请求,并把响应的信息发出去
//在同一区域网内可以从一台电脑访问到另外一台电脑服务器中的内容。(只要知道对方的IP地址)
//设置好一些参数(邮箱服务器的地址,发送者的账号邮箱号和密码, 以及对方的用户名)就可以用与发邮件(聊天功能其实应该和这个类似)
//Foxmail邮箱客户端应该会经常用在企业中(因为邮件不会过期)。
来源:CSDN
作者:你叫啥啊
链接:https://blog.csdn.net/qq_42756994/article/details/104760041