监听器:所谓的监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理.
监听术语:
事件源:被监听的对象.
监听器对象:监听事件源的对象
注册或绑定:1和2结合的过程
事件:事件源的行为动作(就是事件源的创建或者属性行为)
事件对象:通过监听器可以获得事件源的对象

监听域对象创建和销毁(三个):
Requset Session ServletContext
类型:ServletRequest HttpSession ServletContext

ServletContext(重要):

配置:
1:创建类实现ServletContextListener接口.
2.配置web.xml.

ServletContextListener:监听ServletContext创建和销毁.
创建:服务器启动创建;
销毁:服务器关闭销毁.

web中三大组件,都需要实现接口,并且配置web.xmlns
<!-- 监听器配置 listener-class类的全限定类名 -->
<listener>
<listener-class></listener-class>
</listener>

作用:
1.在创建方法的内部初始化参数(服务器的初始化参数,比如权限,比如,web环境的静态配置,比如后退进程)
2.服务器关闭调用对应的销毁方法,就可以用来释放资源.( 例如对于一些客户端钱的问题,就需要释放资源进行回传到服务器.)

Session的创建销毁:
监听器:HttpSessionListener
创建:第一次调用getSession()
销毁:
1:默认超时30分钟自动销毁.
2.手动调用invalide().
3.服务器非正常关闭.
Request的创建销毁:
监听器:ServletRequestListener
创建:请求开始创建
销毁:响应结束销毁

例如:
public class MyServletRequestListener implements ServletRequestListener {
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request 销毁");
}
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request 创建");
}
}
<listener>
<listener-class>全限定类名</listener-class>
</listener>

在这里面的五个监听术语:
1.事件源:服务器tomcat创建request对象.(request)
2.监听器:(MyServletRequestListener)
3.注册绑定:<listener-class>全限定类名</listener-class>
4.事件:(request的创建和销毁)
5.事件对象:(创建request的方法参数的变量:sre.getSource():参数调用方法使监听器获得事件源)

监听域对象属性操作(增删改)(三个)
Request Session ServletContext
类型:ServletRequestAttributeListener HttpSessionAttributeListener ServletContextAttributeListener

统一api:
setAttribute(name,value);
getAttribute(name);(在监听域对象属性操作中没有查询,这个只是在api里面有)
removeAttribute(name);

ServletContextAttributeListener
监听:域对象属性,添加,移除,替换操作,会执行对应的方法.

ServletRequestAttributeListener
监听:域对象属性,添加,移除,替换操作,会执行对应的方法.

HttpSessionAttributeListener.
监听:域对象属性,添加,移除,替换操作,会执行对应的方法.
监听往域中放数据,数据没有任何要求.

以上六个监听器都必须在web.xml中配置.
特殊javaBean监听不需要配置web.xml,但配置了也可以.

监听特殊javaBean(两个)
特殊javaBean 指的是javaBean对象(类),必须实现特殊的接口User ,Category,Product
HttpSessionBindingListener:监听javaBean在session中绑定和解绑的.
HttpSessionAttributeListener:监听数据在session中操作.

区别:
HttpSessionAttributeListener : 监听的数据没有要求.
HttpSessionBindingListener: 只监听特殊javaBean.

开发中经典案例:在登陆功能中统计登陆成功的人数,但没有源码,
登陆成功需要将user数据放入session,只需要统计session绑定了几个user对象

HttpSessionActivactionListener : 监听javaBean 活化和钝化,发生时机在服务器关闭和服务器启动(为什么发生在这里呢?因为session)
活化:反序列化,将磁盘中内容读取到内存中.
钝化:序列化,将内存中数据写到磁盘中.
要求:特殊javaBean必须实现Serializable接口

2.5邮件
邮件服务器 : 发送邮件服务器 和 接收邮件服务器
发送邮件服务器:
协议:smtp 端口25
接收邮件服务器
协议POP3 端口110

Web中一共有13套规范 tomcat支持2套 Servlet Jsp
Mail 需要导入jar 今日邮件要求 使用工具类

要点:
1.搭建本地的邮件服务器
2.使用工具类发送邮件

Js:
setTimeout( 函数名称 , 毫秒值) 执行一次
setInterval(函数名称 , 毫秒值) 周期执行
java定时器: Timer

* 参数1 : 被执行的任务 TimerTask
* 参数2 : 延迟执行的时间 (毫秒)
* 参数3 : 周期执行的时间(毫秒)
* 真实开发中案例:QQ每年都要发送生日邮件
* 参数2 : 一般都是凌晨 00:00 切日 跑批任务 获得一天的毫秒值 - 当前已经过去的毫秒值
* 参数3 : 设置一天的毫秒值
*/
System.out.println(new Date().toLocaleString());
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date().toLocaleString());
}
}, DateUtils.getDelayTime(), DateUtils.getOneDay());

2.7案例
1.创建监听器
2.在监听器的监听创建方法中 初始化定时器
3.定时器 :
a)从数据库中获得当天过生日的人 返回值List<User>
b)Dao层 拼接字符串 需要注意
c)遍历 发送邮件

案例:

public class MyServletContextListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent arg0) {
//2.初始化定时器
new Timer().schedule(new TimerTask() {

@Override
public void run() {
try {
//3.调用service 获得当天过生日的人
UserService service = new UserService();
List<User> list = service.findBirthday();
//4.遍历集合发送邮件
for(User user : list) {
EmailUtils.send(user.getEmail(),"<a href='https://www.baidu.com/'>"+ user.getUsername() + "生日快乐" + "</a");
System.out.println(user.getUsername() + ": OK");
}
}catch(Exception e) {
e.printStackTrace();
}

}
}, 2000, 4000);
}
public void contextDestroyed(ServletContextEvent arg0) {
}

}

public class UserDao {

public List<User> findBirthday() throws Exception {
//t_user
//日期格式 -月 -日
String birthday = "-" + DateUtils.getCurrentMonth() + "-" + DateUtils.getCurrentDay();

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
String sql = " select * from t_user where birthday like ? ";
Object[] params = { "%" + birthday + "%"};
List<User> list = qr.query(sql, new BeanListHandler<User>(User.class), params);
return list;
}

}

<%--要想在函数的参数传入字符串,必须加单引号 --%>
<a href="javascript:void(0)" onclick="change('${product.pid}')">
g src="${pageContext.request.contextPath}/images/i_del.gif" width="16" height="16" border="0" style="CURSOR: hand">
</a>

UUID.randomUUID().toString().replace("-", ""): 随机生成一个不重复的字符串,进行替换,变成一个由字母和数字组成的字符串.

随机生成ID UUID.randomUUID
超链接 <a href=”javascript:void(0)” onclick=”函数(单引号 + 字符串)”>

javaWeb核心技术第十一篇之Listener的更多相关文章

  1. javaWeb核心技术第四篇之Javascript第二篇事件和正则表达式

    - 事件 - 表单提交(掌握) "onsubmit" - 单击事件(掌握) "onclick" - 页面加载成功事件(掌握) "onload" ...

  2. javaweb回顾第十一篇过滤器(附实现中文乱码问题)

    1:过滤器概念 过滤器就是一种在请求目标资源的中间组件,比喻把污水转换成纯净水中间需要一个污水净化设备,那么这个设备就好比一个过滤器.那么我用图来表示过滤器(可以有多个过滤器)运行的过程 2:Filt ...

  3. javaWeb核心技术第十三篇之Ajax

    Js--ajax--原理解释 概述:异步刷新网页,不会刷新整个页面. Get原理: <%@ page language="java" contentType="te ...

  4. javaWeb核心技术第十篇之Filter

    Web中有三大组件(需要配置web.xml) servlet:服务器端的小程序. Filter(过滤器):运行在服务器,对请求的资源进行过滤,对响应进行包装. 经典案例: 自动登录,网站全局编码,非法 ...

  5. javaWeb核心技术第八篇之Cookie和Session

    会话技术: 会话是什么? 浏览器和服务器交互,浏览器打开网页访问服务器,会话开始,正常交互. 浏览器关闭,会话结束. 会话能干什么? 会话可以共享数据. Cookie和session将数据保存在不同的 ...

  6. javaWeb核心技术第七篇之HTTP、Tomcat、Servlet、Request和Response

    - Web服务器 - 概念: - web资源: "英文直译"网"的意思 资源:一切数据文件 web资源:通过网络可以访问到的资源,通常指的是一切放在服务器上的文件&quo ...

  7. javaWeb核心技术第六篇之BootStrap

    概述: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 作用: 开发响应式的页面 响应式:就是一个网站能够兼容多个终端 节约开发 ...

  8. javaWeb核心技术第五篇之jQuery

    - 概述 - jQuery是一个优秀的javascript框架(js类库),兼容css3和各大浏览器,提供dom,events,animate,ajax等简易的操作.并且jQuery有非常丰富的插件, ...

  9. javaWeb核心技术第三篇之JavaScript第一篇

    - 概述 - JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言 - 作用:给页面添加动态效果,校验用户信息等. - 入门案例 - js和html的整合 - 方式1:内联式 ...

随机推荐

  1. C#程序编写高质量代码改善的157个建议【4-9】[TryParse比Parse、使用int?来确保值类型也可以为null、readonly和const、0值设为枚举的默认值、避免给枚举类型的元素提供显式的值、习惯重载运算符]

    建议4.TryParse比Parse好 如果注意观察,除string之外的所有的基元类型.会发现它们都有两个将字符串转换为自身类型的方法:Parse和TryParse.以类型double为例. 两者最 ...

  2. 开源资产管理系统Snipe-IT

    CentOS7安装IT资产管理系统Snipe-IT介绍资产管理工具Github:https://github.com/snipe/snipe-it官网:https://snipeitapp.com/D ...

  3. Shell—定时任务(crontab)

    如何让shell脚本每天定时执行? 1.新建需要定时执行的shell脚本,这里为date.sh脚本. #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/u ...

  4. Nginx+Tomcat8+Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

  5. Docker安全扫描工具之Anchore

    本篇简单介绍一款Docker安全扫描工具Anchore的安装和使用. 前言 下述过程是在CentOS 7.6的虚拟机上进行的. [root@localhost ~]# cat /etc/redhat- ...

  6. Kubernetes行业调研报告:多集群、多云部署成企业首选策略

    新兴的多集群.多云部署成为首选的企业策略,而边缘部署则呈上升趋势 2019年11月5日,业界采用最广泛的Kubernetes管理平台创造者Rancher Labs(以下简称Rancher)发布了首份调 ...

  7. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  8. Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面

    In this lesson, you will learn how to enable/disable the Ribbon User Interface in your application. ...

  9. FCC---CSS Flexbox: Add Flex Superpowers to the Tweet Embed

    To the right is the tweet embed that will be used as the practical example. Some of the elements wou ...

  10. sharepoint2010 部署到Windows server 2012 R2服务器遇到的问题

    最近由于客户服务器升级到windows server2012 R2 版本,生产环境需要相应升级. 查看很多资料,服务器升级到windows server2012 R2 版本,sharepoint要升级 ...