龙空技术网

Java监听器学习

旭六画 152

前言:

现时看官们对“java添加监听”大约比较注意,同学们都想要分析一些“java添加监听”的相关文章。那么小编在网摘上收集了一些有关“java添加监听””的相关资讯,希望我们能喜欢,看官们快快来学习一下吧!

监听三个域对象的创建和销毁的监听器:

* ServletContextListener

* HttpSessionListener

* ServletRequestListener

监听三个域对象的属性变更的监听器(属性添加,修改,移除):

* ServletContextAttributeListener

* HttpSessionAttributeListener

* ServletRequestAttributeListener

ServletContextListener

监听ServletContext对象的创建和销毁

创建:服务器启动的时候,服务器为每个WEB应用创建一个属于该web项目的对象ServletContext

销毁:服务器关闭或者项目从服务器中移除的时候

API

void contextInitialized(ServletContextEvent sce)

通知将开始 Web 应用程序初始化过程。在初始化 Web 应用程序中的所有过滤器或 servlet 之前,应该通知所有 ServletContextListener 关于上下文初始化的信息。

void contextDestroyed(ServletContextEvent sce)

通知即将关闭 servlet 上下文。在通知所有 ServletContextListener 上下文销毁之前,所有 servlet 和过滤器都已销毁。

代码示例

public class MyServletContextListener implements ServletContextListener{	@Override	public void contextInitialized(ServletContextEvent sce) {		System.out.println("ServletContext对象被创建了...");	}	@Override	public void contextDestroyed(ServletContextEvent sce) {		System.out.println("ServletContext对象被销毁了...");	}}

web.xml

  <!-- 配置监听器 -->  <listener>			<listener-class>								com.xxxx.listener.MyServletContextListener			</listener-class>  </listener>
HttpSessionListener

监听Session域对象的创建和销毁

创建:服务器端第一次调用getSession()

销毁:

(1) 非正常关闭服务器(正常关闭session会序列化);

(2) session过期了,默认30分钟;

(3) 手动调用session.invalidate();

【HttpSession的问题】:

(1) 访问Servlet会不会创建Session : 不会

(2) 访问JSP会不会创建Session :会

(3) 访问html会不会创建Session :不会

API

void sessionCreated(HttpSessionEvent se) 通知创建了一个会话

void sessionDestroyed(HttpSessionEvent se) 通知某个会话即将无效

代码示例

public class MyHttpSessionListener implements HttpSessionListener{	@Override	public void sessionCreated(HttpSessionEvent se) {		System.out.println("HttpSession被创建了...");	}	@Override	public void sessionDestroyed(HttpSessionEvent se) {		System.out.println("HttpSession被销毁了...");	}}

web.xml

  <listener>		<listener-class>			com.xxxx.listener.MyHttpSessionListener		</listener-class>  </listener>
ServletRequestListener

监听 request 域对象的创建和销毁

创建:客户端向服务器发送一次请求,服务器就会创建 request 对象

销毁:服务器对这次请求作出响应后就会销毁 request 对象

问题

访问一个 Servlet 会不会创建 request 对象 【会】

访问一个 JSP 会不会创建 request 对象 【会】

访问一个 HTML 会不会创建 request 对象 【会】

API

void requestDestroyed(ServletRequestEvent sre)

请求即将超出该 Web 应用程序的范围

void requestInitialized(ServletRequestEvent sre)

请求即将进入该 Web 应用程序的范围

代码示例

public class MyServletRequestListener implements ServletRequestListener{	@Override	public void requestDestroyed(ServletRequestEvent sre) {		System.out.println("ServletRequest被销毁了...");	}	@Override	public void requestInitialized(ServletRequestEvent sre) {		System.out.println("ServletRequest被创建了...");	}}

web.xml

<listener>    <listener-class>                com.xxxx.listener.MyServletRequestListener    </listener-class>  </listener>
监听域对象属性变更

1. ServletContextAttributeListener

2. HttpSessionAttributeListener

3. ServletRequestAttributeListener

API

void attributeAdded(ServletContextAttributeEvent scab)

通知向 servlet 上下文中添加了一个新属性。在添加属性之后调用。

void attributeRemoved(ServletContextAttributeEvent scab)

通知现有属性已从 servlet 上下文中移除。在移除属性之后调用。

void attributeReplaced(ServletContextAttributeEvent scab)

通知已替换 servlet 上下文中的一个属性。在替换属性之后调用。

代码示例

public void attributeAdded(ServletContextAttributeEvent arg0)  {     	System.out.println("添加属性");}public void attributeRemoved(ServletContextAttributeEvent arg0)  {     	System.out.println("移除");}public void attributeReplaced(ServletContextAttributeEvent arg0)  {     	System.out.println("修改属性");}
public class SessionAndRequestAttributeListener implements HttpSessionAttributeListener,ServletRequestAttributeListener{	@Override	public void attributeAdded(ServletRequestAttributeEvent srae) {		System.out.println("request:添加值");	}	@Override	public void attributeRemoved(ServletRequestAttributeEvent srae) {		System.out.println("request:移除值");	}	@Override	public void attributeReplaced(ServletRequestAttributeEvent e) {		System.out.println("request:替换值");		System.out.println(e.getName() + " -- " + e.getValue());	}	@Override	public void attributeAdded(HttpSessionBindingEvent se) {		System.out.println("session:添加值");	}	@Override	public void attributeRemoved(HttpSessionBindingEvent se) {		System.out.println("session:移除值");	}	@Override	public void attributeReplaced(HttpSessionBindingEvent se) {		System.out.println("session:替换值");	}}

servlet

@WebServlet(urlPatterns={"/attr"})public class AttributeListenerServlet extends HttpServlet{	@Override	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {		req.setAttribute("add", "tom");		req.setAttribute("add", "jack");		req.removeAttribute("add");			HttpSession session = req.getSession();		session.setAttribute("add", "tom");		session.setAttribute("add", "jack");		session.removeAttribute("add");	}}

web.xml

<listener>  	<listener-class>listener.SessionAndRequestAttributeListener</listener-class></listener>
点点赞吧 兄弟们! 夸一波~ 来点动力

标签: #java添加监听