您的位置:首页 > 其它

17.12.11,web学习第二十三天,还有一年,努力吧青年Listener

2017-12-12 14:05 405 查看

Listener

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

监听器:监听对象。6+2

注册监听器:

响应行为:

2. 监听器有哪些?

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

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

3. 监听ServletContext创建与销毁的ServletContextListener(重要)

规范在java中一般都是接口。

ServletContextListener和servletContext具有相同的生命周期。

监听器编写的步骤:

1)编写一个监听类去实现监听类接口。

Implements ServletContextListerer{}

2)覆盖监听器的方法。

contextInitialized(ServletContextEvent sc)

ContextDestroy(ServletContextEvent sce)

通过ServletContextEvent可以获得被监听的对象。

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

<listener>

<listener-class>demo23.myServletContextListener</listener-class>

 </listener>

ServletContextListener监听器作用:EE开发过程中,能不用静态代码块就不用静态代码块来初始化。原理:服务器启动便启动监听器便可以完成初始化操作。

A)初始化工作:初始化对象,初始化数据--加载数据库驱动,连接池的初始化。

B)加载一些初始化的配置文件--Spring的配置文件.

C ) 任务调度---定时器  Timer/TimerTask(最有用)

模拟银行定时干某事:
@Override
public void contextInitialized(ServletContextEvent sce) {
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd hh:mm:ss");
Date date = null;
try {
date = sdf.parse("2017-12-11 20:49:00");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("123");
}
}, date, 5000);
}
4. HttpSession域的监听器HttpSessionListener

httpSession对象的生命周期:

第一次request.getSession()时创建。

服务器关闭销毁,session到期,手动销毁。

当访问Jsp时,jsp默认便初始化了session所以这个监听器成立!

作用:可以访问网站计数!

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

没什么鸟用。

6. 监听三大域对象属性变化的:(不重要)

ServletContextAttributeListener监听器

添加属性监听,修改属性监听,删除属性监听。

HttpSessionAttributeListener同上

ServletRequestAttributeListener同上

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

即将绑定到session对象有几种状态:

绑定状态,解绑状态。

class JB implements HttpSessionBindingListener(){

//重写俩方法

}

钝化状态:将session中的对象序列化到磁盘。服务器正常关闭时 钝化。

Class JB implements HttpSessionActivationListener,Serializable{}

 

活化状态:就是将磁盘上的对象再次恢复到session中。服务器再 次启动时或活。

可以使用配置文件指定钝化时间,在META-INF下创建content.xml

<Context>

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

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

 <Manager className="org.apache.catalina.session.PersistentManager"  maxIdleSwap="1">//按分钟

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

 </Manager>

</Context>

被钝化到哪里:work/catalina/localhost/钝化文件

8. 邮箱服务器:

基本概念:

邮箱客户端既可以在网页上也可以是案装形式。

邮箱服务器:起到邮箱的接收和推送的作用。

邮箱发送的协议:约束。

接收:POP3  IMAP

发送: SMTP

发邮件时客户端发给SMTP,SMTP只能找SMTP,客户端接收邮
件时,向POP3要邮件,POP3从和SMTP的公共区域拿邮件发回。

Eyou邮箱服务器卸载不干净,我安装在了c:盘记得清理

10.在web工程里可以创建含有main方法的java文件,右键点java Application可以运行。

9. 写程序发邮件:(内网)

mail.jar导包+MailUtils.java文件

10. 案例:发送生日祝福:(内网)

安装服务器和注册2个域名:

admin@123hhh.com就是域名

Listener.java:(MailUtils.java和JB未写)
package Listener;
public class listnen implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
Timer t = new Timer();
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
String dd = sdf.format(d);
System.out.println(dd);
t.scheduleAtFixedRate(new TimerTask() {

@Override
public void run() {
ComboPooledDataSource cpds = new ComboPooledDataSource();
QueryRunner qr = new QueryRunner(cpds);
try {
List<JB> l = qr.query("select * from user where birthday like ?", new BeanListHandler<JB>(JB.class),
"%" + dd);
if (l != null) {
for (JB jb : l) {
try {
MailUtils.sendMail(jb.getEmail(), "祝你生日快乐!");
System.out.println("发送一条短信");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}, new Date(), 1000 * 10);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐