关闭

黑马day14 监听器&监听三大域对象

492人阅读 评论(0) 收藏 举报
分类:

监听三大域对象主要监听域对象的创建和销毁。因此域对象的创建和销毁一定要知道。

1.ServletContext域对象的监听

package cn.itheima.listener;

import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Set;

import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;

public class ApplicationListener implements ServletContextListener {
	/**
	 * 当ServletContext初始化的时候加载,即当应用一加载的时候就会触发这个事件
	 */
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("ServletContext对象被创建了...."+sce.getServletContext());
	}
	/**
	 * 当ServletContext对象被销毁的时候会触发这个事件
	 */
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext对象被销毁了..."+sce.getServletContext());
	}
	
}
web.xml文件中的配置:

<!-- 配置ServletContext对象的监听器 -->
  <listener>
  	<listener-class>cn.itheima.listener.ApplicationListener</listener-class>
  </listener>
运行结果分析:

启动和关闭应用的时候会打印:




2.Session域对象的监听

package cn.itheima.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {
	//session 被创建的时候触发这个事件
	public void sessionCreated(HttpSessionEvent se) {
		System.out.println("session对象被创建了..."+se.getSession());
	}
	//session 被销毁的时候会触发这个事件
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("session对象被销毁了..."+se.getSession());
	}

}
web.xml注册监听器

<!-- 配置Session对象的监听器 -->
  <listener>
  	<listener-class>cn.itheima.listener.SessionListener</listener-class>
  </listener>
分别写一个Servlet创建session..另一个Servlet销毁session...

创建session的servlet

package cn.itheima.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class SessionDemo extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//创建session对象
		HttpSession session = request.getSession();
		session.setAttribute("name", "李卫康");
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
销毁session的servlet

package cn.itheima.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SessionDemo2 extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String name = (String) request.getSession().getAttribute("name");
		response.getWriter().write(name);
		//session自杀了
		request.getSession().invalidate();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

首先访问Demo会打印创建session触发的事件中的函数...然后访问Demo2会销毁session...会打印销毁session触发的事件



解释:session有三种死法,我演示的是自杀式的死法即调用invalidate()方法,会瞬间杀死session..

三种死法:

自杀:invalidate()

超出session的生命周期的时间默认是30分钟...会自动死亡

非正常关闭服务器...如果正常关闭服务器只是会出现session的钝化...当再打开服务器的时候就会session的活化

以上三种死法都会触发销毁session的事件,我就不演示了..

3.request对象的创建和销毁

package cn.itheima.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener {
	//request对象创建的时候会触发
	public void requestDestroyed(ServletRequestEvent sre) {
		System.out.println("request对象被创建了..."+sre.getServletRequest());
	}
	//request销毁的时候会触发
	public void requestInitialized(ServletRequestEvent sre) {
		System.out.println("request对象被销毁了..."+sre.getServletRequest());
	}

}
配置文件:

 <!-- 配置request对象的监听器 -->
  <listener>
  	<listener-class>cn.itheima.listener.RequestListener</listener-class>
  </listener>
运行结果:





0
0
查看评论

JavaWeb笔记——三大组件之监听器

1 JavaWeb监听器概述 在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。 l  监听域对象“创建”与“销毁”的监听器; l  监听域对象“操作域属性”的监听器; l&...
  • pwc1996
  • pwc1996
  • 2015-08-25 16:20
  • 1017

servlet的监听器和三大作用域

servlet的八大监听器 Servlet三大作用域 1、request  2、session 3、ServletContext 举例 监听三大作用域 监听request作用域 request的作用范围:请求响应后马上销毁  传递的参数 或者请求转发跳转数据传递...
  • panhaigang123
  • panhaigang123
  • 2017-12-09 17:08
  • 145

Servlet三大域对象的应用

javaweb开发中就不能不谈Servlet三大域对象的应用(request、session、application(ServletContext))。 1. request request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。 用...
  • qq_26676207
  • qq_26676207
  • 2016-09-20 09:38
  • 4973

监听三个域对象的属性变更的监听器

监听三个域对象的属性变更的监听器 监听三个域对象的属性变更的监听器的作用是什么? 这三个监听器主要是用来监听我们域对象的存值、替换值、移除值过程的。 以HttpSessionAttributeListener为例: package com.web.demo...
  • Code_My_Dream
  • Code_My_Dream
  • 2017-07-02 18:34
  • 289

Servlet-三大域对象

1. request request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。 用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。 常用方法: request.setAttribute(); request.getAt...
  • qq_28796345
  • qq_28796345
  • 2016-08-19 07:43
  • 1092

JavaWeb_监听域对象创建和销毁的Listener1一d对象

1简介 监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被见识的对象发生情况时,立即采取相应的行动。 Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext、HttpSession和ServletReques...
  • a2181745
  • a2181745
  • 2015-02-12 09:01
  • 987

Servlet学习笔记 -- day03 servlet三大域对象总结

一、ServletContext 针对一个WEB应用。一个WEB应用只有一个ServletContext对象,使用该对象保存的数据在整个WEB应用中都有效。 创建:服务器启动的时候. 销毁:服务器关闭的时候或者项目移除的时候. 二、HttpSession: 针对一次会话。使用该对象保存数据,一次会话...
  • wingzhezhe
  • wingzhezhe
  • 2017-07-10 13:34
  • 177

黑马day14 监听器理论知识

监听器:这里的监听器跟java基础中学习的监听器差不多,只不过这里的监听器是javaEE的,因此注册监听器的步骤也不一样: 写一个监听器的步骤: (1).写一个类实现监听器接口... (2).在web.xml文件中进行注册监听器.... javaEE的监听器分类:一共8种,分为3类 (1)...
  • u014010769
  • u014010769
  • 2015-07-06 17:01
  • 481

四大域对象和9大隐式对象

1.四大作用域: 一.ServletContext(ServletContext类) ①在jsp中为 application ②生命周期: 1.开始:web应用启动时创建整个web中的ServletContext对象. 2.死亡:服务器关闭或Web应用被移除时,ServletContext...
  • chanjkf
  • chanjkf
  • 2016-11-23 16:44
  • 334

Java监听器用法(三):外部类监听器

承接用法一,可以把实现接口的监听器类单独放在外面,但是这时候有个问题,当处理接口的方法要改变框架里组件的状态时,需要在构建监听器是传入这个组件的引用作为参数。 上例做如下修改:import java.awt.*; import java.awt.event.*; import javax.swin...
  • tuke_tuke
  • tuke_tuke
  • 2015-07-21 19:41
  • 2095
    个人资料
    • 访问:209224次
    • 积分:4434
    • 等级:
    • 排名:第8029名
    • 原创:242篇
    • 转载:4篇
    • 译文:0篇
    • 评论:39条
    友情链接