JAVA WEB从入门到精通 day19 Listener监听器
来源:互联网 发布:mac可以玩lol 编辑:程序博客网 时间:2024/04/30 00:28
JAVA监听器
监听器是一个接口,具体方法由我们实现。属于javaweb三大组件。
JAVAWEB监听器
三大域中,每个域都有两个监听器。分别是生命周期监听器和属性监听器
**ServletContext域 -生命周期监听期:ServletContextListener,它有两个方法。 *void contextInitialized(ServletContextEvent sce ):出生时调用 *void contextDestroyed(ServletContextEvent sce):销毁时调用 事件对象:ServletContextEvent 主要方法: ServletContext getServletContext() -属性监听器:ServletContextAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。 * void attributeAdded(ServletContextAttributeEvent event) :添加属性时调用 * void attributeRemoved(ServletContextAttributeEvent event) :移除属性时调用 * void attributeReplaced(ServletContextAttributeEvent event) :替换属性时调用 事件对象:ServletContextAttributeEvent 主要方法: String getName();获取属性名称 Object getValue():获取属性值 ServletContext getServletContext() ; **HttpSession域 -生命周期监听器:HttpSessionListener,它有两个方法。 *void sessionCreated(HttpSessionEvent se) :创建session时调用 *void sessionDestroyed(HttpSessionEvent se) :销毁session时调用 事件对象:HttpSessionEvent 主要方法: HttpSession getSession() ; -属性监听器:HttpSessionAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。 * void attributeAdded(HttpSessionBindingEvent event):添加属性时调用 * void attributeRemoved(HttpSessionBindingEvent event) :移除属性时调用 * void attributeReplaced(HttpSessionBindingEvent event):替换属性时调用 事件对象:HttpSessionBindingEvent 主要方法: String getName() ;获取属性名称 Object getValue() ;获取属性值 HttpSession getSession() ;获取session对象 **ServletRequest域 -生命周期监听器:ServletRequestListener,它有两个方法。 *void requestInitialized(ServletRequestEvent sre ):创建request时调用 *void requestDestroyed(ServletRequestEvent sre) :销毁request时调用 事件对象:ServletRequestEvent 主要方法: ServletContext getServletContext (); ServletRequest getServletRequest() ; -属性监听器:ServletRequestAttributeListener:它有三个方法,一个在添加属性时调用,一个在替换属性时调用,还有一个在移除属性时调用。 *void attributeAdded(ServletRequestAttributeEvent srae) :添加属性时调用 *void attributeRemoved(ServletRequestAttributeEvent srae ):移除属性时调用 *void attributeReplaced(ServletRequestAttributeEvent srae) :替换属性时调用 事件对象:ServletRequestAttributeEvent 主要方法: String getName(); 获取属性名称 Object getValue() ;获取属性值 ServletContext getServletContext (); ServletRequest getServletRequest() ;
案例:javaweb使用生命周期监听器
1.创建一个类实现Servletontext域生命周期监听器接口,方法内容由自己实现。 public class AListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("死亡"); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("出生"); } }
2.在web.xml中注册监听器 <listener> <listener-class>cn.cad.web.listener.AListener</listener-class> </listener>
3.ServletContext对象在服务器开启时就创建,服务器关闭销毁。所以我们开启服务器和关闭服务器时就会看到效果。 出生 死亡
案例:javaweb使用属性监听器
1.编写一个类实现ServletContext域的属性监听器public class BListener implements ServletContextAttributeListener { //添加属性时被调用 public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("你添加了"+arg0.getName()+"属性,值为"+arg0.getValue()); } //移除属性时被调用 public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("你删除"+arg0.getName()+"属性,值为"+arg0.getValue()); } //替换属性时被调用 public void attributeReplaced(ServletContextAttributeEvent arg0) { //替换属性时的getValue方法获取的是替换之前的值,获得更改后的值可以通过getServletContext.getAttribute()获取 System.out.println("你更改了"+arg0.getName()+"属性,原值为"+arg0.getValue()+",更改后的值"+arg0.getServletContext().getAttribute("name")); } }
2.在web.xml注册监听器
3.我们在jsp页面中添加,替换,删除属性,即可看到效果 <body> <% application.setAttribute("name", "zhangsan"); %> <% application.setAttribute("name", "lisi"); %> <% application.removeAttribute("name"); %> </body>
感知监听器
有两个感知监听器。 特性 -与session相关 -用来添加到javaBean上 -不需要在web.xml中注册
HttpSessionBindingListener监听器
用来添加到javaBean上。比如我们有一个User类,实现这个接口,这样当我们user对象放入session中时,user对象就能知道自己被放入session,移除时对象自己也能知道被session移除。
1.我们创建一个javaBean实现这个接口,并实现他的两个方法 public class User implements HttpSessionBindingListener{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } @Override public void valueBound(HttpSessionBindingEvent arg0) { //与session绑定时调用 System.out.println("被放入session"); } @Override public void valueUnbound(HttpSessionBindingEvent arg0) { //从session移除时被调用 // TODO Auto-generated method stub System.out.println("从session移除"); } }
2.我们在jsp测试我们的监听器 <body> <% //创建javaBean对象,并将其放入session域 cn.cad.web.listener.User user=new cn.cad.web.listener.User(); session.setAttribute("user", user); %> <% //将javaBean对象从session域中移除 session.removeAttribute("user"); %> </body>
3.输出结果 被放入session 从session移除
HttpSessionActivationListener监听器
HttpSessionActivationListener也是感知监听器,添加在javabean上。 可以让javaBean对象知道自己是否跟随session被序列化或者钝化到了硬盘上。但是javaBean对象必须实现该监听器接口和序列化接口,要不然保存不到硬盘上。
Session的序列化和反序列化
应用场景: 一般来说,网站服务器启动后,就不会再关闭了,但是如果服务器出现问题需要重启,而用户session还在进行相应的操作,例如购物车里添加了很多东西,必须保存session这时就需要使用序列化将session信息保存起来放在硬盘,服务器重启后,又重新加载。这样就保证了用户信息不会丢失,实现永久化保存 序列化就是将信息永久保存,例如保存到硬盘上等。 我们发现我们向session里面设置一个属性,关闭服务器,项目目录会多出一个session.ser的文件,这就是将session序列化了。 这时当我们重新开启服务器,依然可以获取session值。 怎么关闭序列化? 在tomcat的conf目录下的context.xml中添加一句 <Manager pathname="" /> 即可。
session的钝化和活化
应用场景: 当很多用户访问网站时,服务器会产生大量session,内存可能会承受不了,这时候我们将长时间不活动的session先保存在客户的硬盘上,这叫做钝化。 当用户使用session时,再从硬盘中读取session,这叫做活化。 具体的配置可以参考百度。
0 0
- JAVA WEB从入门到精通 day19 Listener监听器
- 《Java Web从入门到精通》-笔记
- java web listener 监听器
- java web listener 监听器
- Java Web监听器Listener
- java web listener 监听器
- java web 监听器listener
- java web listener 监听器
- Java Web从入门到精通 谁买谁后悔
- java web从入门到精通1~3笔记
- Java Web 从入门到精通(明日科技)
- 《Java Web 从入门到精通 》 第一章 DAY1
- JAVA WEB从入门到精通day05 javascript学习(3)
- JAVA WEB从入门到精通day10 Servlet详解
- JAVA WEB从入门到精通 day15 MYSQL简单学习
- JAVA WEB从入门到精通 day18 JDBC学习(三)
- JAVA WEB从入门到精通 day21 过滤器Filter
- JAVA WEB从入门到精通 day22 上传和下载
- php5.2.x安装xdebug
- Platform总线
- Missing Number
- Hrbust 1390 Leyni, LOLI and Numbers【思维+树状数组+二分+双向链表模拟】好题!好题!好题!
- SDK 嵌入问题记录
- JAVA WEB从入门到精通 day19 Listener监听器
- [BZOJ2565]最长双回文串(manacher)
- PCI总线驱动程序设计
- Java static关键字--String类--StringBuilder等
- LeetCode算法题目:Binary Tree Zigzag Level Order Traversal
- MultiNET环境搭建中Cython问题处理
- Color过渡动画
- 2016蓝桥杯省赛 交换瓶子
- html 常用表单元素