1. 监听器
Posted eaglesour
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. 监听器相关的知识,希望对你有一定的参考价值。
1. 什么是监听器
- 监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。
- 所谓的监听器,是指对整个web环境的监听,当被见识的对象发生变化时,立即调用相应的方法进行处理。
2.监听器最常见的应用场景:
- Java SE GUI编程;
- android 手机开发编程。
3. 监听器术语
- 事件源:被监听对象。(目标对象);
- 监听器对象:用于监听"事件源"的对象;
- 注册(绑定):将"监听器对象"注册给"事件源"。当"事件源"发生某些行为时,监听对象将被执行;
- 事件:事件源行为的称呼;
- 事件对象:在“监听器对象”中获得“事件源”。
4. 监听器的编写流程
- 编写监听器实现类,需要实现指定的接口;
- 在web.xml文件配置监听器(部分监听不需要配置);
5. JavaEE规范规定了8个监听器接口用于监听不同的web对象
- 监听域对象创建与销毁
- 监听域对象属性变更(添加、替换、删除)
- 监听session作用域特殊Javabean
6. 域对象监听器
- ServletRequestListener
- HttpSessionListener
- ServletContext
7. 域对象属性监听器(
4大域对象:ServletContext 、Request、Session、PageContext
7.1 作用域属性操作
setAttribute(k,v) getAttribute(k) removeAttribute(k)
7.2 域对象属性变更监听器
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- ServletContextAttributeListener
7.3 特殊的Javabean监听器(Session作用域)
- HttpSessionBindingListener
- HttpSessionActivationListener(钝化和活化)
前面六个监听器需要在web.xml中配置,最后的两个监听器不需要再web.xml中配置
8. 实例
8.1 ServletRequestListener
监听request对象创建或销毁,其中request对象的特点如下:
- 类型:Javax.servlet.http.HttpServletRequest
- 描述:来自客户端的请求经Servlet容器处理后,由request对象进行封装。注:客户端和服务器的一次通信就是一次请求(发送请求或得到相应)。
- 作用域:request。说明,这次请求结束后,它的生命周期 就结束了。
- 举例:
- 创建ServletRequestListener实现类MyServletRequestListener;
1 package com.eagle.listener; 2 3 import javax.servlet.ServletRequestEvent; 4 import javax.servlet.ServletRequestListener; 5 6 public class MyServletRequestListener implements ServletRequestListener { 7 8 public MyServletRequestListener() { 9 super(); 10 System.out.println("request对象的构造方法"); 11 } 12 13 public void requestInitialized(ServletRequestEvent sre) { 14 System.out.println("request创建了!"); 15 } 16 17 public void requestDestroyed(ServletRequestEvent sre) { 18 System.out.println("request对象销毁了!"); 19 } 20 21 }
-
- 在web.xml文件配置监听器。
1 <listener> 2 <listener-class>com.eagle.listener.MyServletRequestListener</listener-class> 3 </listener>
服务器启动就先构造了request对象,然后每个页面请求都会触发
MyServletRequestListener.requestInitialized(ServletRequestEvent sre)方法和
MyServletRequestListener.requestDestroyed(ServletRequestEvent sre)方法
8.2 HttpSessionListener
- 类型:Javax.servlet.http.HttpSession
- 描述:表示一个会话,用来保存用户信息,以便跟踪每个用户的状态。(不要用来保存业务数据,request)
- 定义:是指在一段时间内客户端和服务器之间的一连串的相关的交互过程。
- 作用域:session。
- 举例
- 创建MyHttpSessionListener
1 package com.eagle.listener; 2 3 import javax.servlet.http.HttpSessionEvent; 4 import javax.servlet.http.HttpSessionListener; 5 6 public class MyHttpSessionListener implements HttpSessionListener { 7 8 public MyHttpSessionListener() { 9 10 super(); 11 System.out.println("session对象构造方法"); 12 } 13 14 public void sessionCreated(HttpSessionEvent arg0) { 15 System.out.println("创建session对象"); 16 } 17 18 public void sessionDestroyed(HttpSessionEvent arg0) { 19 System.out.println("销毁session对象"); 20 } 21 22 }
-
- 创建servlet CreateSession
1 package com.eagle.web; 2 3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import javax.servlet.http.HttpSession; 9 10 public class CreateSession extends HttpServlet { 11 12 private static final long serialVersionUID = 1L; 13 14 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 15 request.setCharacterEncoding("utf-8"); 16 response.setContentType("text/html;charset=utf-8"); 17 HttpSession httpSession = request.getSession(); 18 httpSession.setMaxInactiveInterval(10); 19 String id = httpSession.getId(); 20 if(httpSession.isNew()) { 21 httpSession.setAttribute("name", "狼"); 22 String name = (String) httpSession.getAttribute("name"); 23 response.getWriter().print("恭喜session创建成功,sessionid="+id+";name="+name); 24 }else { 25 String name = (String) httpSession.getAttribute("name"); 26 response.getWriter().print("服务器已经存在session了,sessionid="+id+";name="+name); 27 } 28 } 29 30 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 doGet(request, response); 32 } 33 }
-
- web.xml文件中配置监听器
1 <listener> 2 <listener-class>com.eagle.listener.MyHttpSessionListener</listener-class> 3 </listener>
8.3 servletContextListener
- 类型:javax.servlet.ServletContext
- 描述:从servlet配置对象获得的servlet上下文
- 作用域:application
- 这个对象的生命周期是最长的。服务器启动的时候就会创建application对象。从服务器存在到服务器终止,都一直存在,且只保留一个对象,所有用户共享一个application。不是很常用。
- 举例:
- 创建MyServletContextListener监听器
1 package com.eagle.listener; 2 3 import javax.servlet.ServletContextEvent; 4 import javax.servlet.ServletContextListener; 5 6 public class MyServletContextListener implements ServletContextListener { 7 8 public MyServletContextListener() { 9 System.out.println("ServletContext对象构建!"); 10 } 11 12 public void contextInitialized(ServletContextEvent sce) { 13 System.out.println("ServletContext对象初始化!"); 14 } 15 16 public void contextDestroyed(ServletContextEvent sce) { 17 System.out.println("ServletContext对象销毁!"); 18 } 19 }
-
- 在web.xml文件中配置监听器
1 <listener> 2 <listener-class>com.eagle.listener.MyServletContextListener</listener-class> 3 </listener>
以上是关于1. 监听器的主要内容,如果未能解决你的问题,请参考以下文章
listview OnItemClick 侦听器在片段中不起作用
设置onclick侦听器在android中无法从一个片段移动到另一个活动[重复]