Java Web学习(38):Listener学习(二)

监听器分类

继续接着监听器的分类进行,来看第二种分类中的第二小类。

ServletContextAttributeListener实例

MyServletContextAttributeListener.java源代码:

package com.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener;

/**
 * Application Lifecycle Listener implementation class MyServletContextAttributeListener
 *
 */
@WebListener
public class MyServletContextAttributeListener implements ServletContextAttributeListener {

    /**
     * Default constructor. 
     */
    public MyServletContextAttributeListener() {
   
    }

	/**
     * @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)
     */
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent)  { 
    	System.out.println("ServletContext_attributeAdded:"+servletContextAttributeEvent.getName());
    }

	/**
     * @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)
     */
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent)  { 
    	System.out.println("ServletContext_attributeRemoved:"+servletContextAttributeEvent.getName());
    }

	/**
     * @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)
     */
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent)  { 
    	System.out.println("ServletContext_attributeReplaced:"+servletContextAttributeEvent.getName());
    }

}

HttpSessionAttributeListener实例

MyHttpSessionAttributeListener.java源代码:

package com.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

/**
 * Application Lifecycle Listener implementation class MyHttpSessionAttributeListener
 *
 */
@WebListener
public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {

    /**
     * Default constructor. 
     */
    public MyHttpSessionAttributeListener() {
   
    }

	/**
     * @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
     */
    public void attributeAdded(HttpSessionBindingEvent sessionBindingEvent)  { 
    	System.out.println("HttpSession_attributeAdded:"+sessionBindingEvent.getName());
    }

	/**
     * @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
     */
    public void attributeRemoved(HttpSessionBindingEvent sessionBindingEvent)  { 
    	System.out.println("HttpSession_attributeRemoved:"+sessionBindingEvent.getName());
    }

	/**
     * @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
     */
    public void attributeReplaced(HttpSessionBindingEvent sessionBindingEvent)  { 
         System.out.println("HttpSession_attributeReplaced:"+sessionBindingEvent.getName());
    }

}

ServletRequestAttributeListener实例

ServletRequestAttributeListener.java源代码:

package com.listener;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;

/**
 * Application Lifecycle Listener implementation class MyServletRequestAttributeListener
 *
 */
@WebListener
public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {

    /**
     * Default constructor. 
     */
    public MyServletRequestAttributeListener() {
        
    }

	/**
     * @see ServletRequestAttributeListener#attributeRemoved(ServletRequestAttributeEvent)
     */
    public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent)  { 
    	 System.out.println("ServletRequest_attributeRemoved:"+servletRequestAttributeEvent.getName());
    }

	/**
     * @see ServletRequestAttributeListener#attributeAdded(ServletRequestAttributeEvent)
     */
    public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent)  { 
    	System.out.println("ServletRequest_attributeAdded:"+servletRequestAttributeEvent.getName());
    }

	/**
     * @see ServletRequestAttributeListener#attributeReplaced(ServletRequestAttributeEvent)
     */
    public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent)  { 
    	System.out.println("ServletRequest_attributeReplaced:"+servletRequestAttributeEvent.getName());
    }

}

我们使用的JSP页面包括:

index.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
     <h1>我是JSP页面</h1>
     <hr/>
     <button onclick="location.href=‘<%=request.getContextPath()%>/init.jsp‘;">Init</button>
     <button onclick="location.href=‘<%=request.getContextPath()%>/destory.jsp‘;">Destory</button>
</body>
</html>

init.jsp页面:

<%@page import="com.domain.Admin"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
      <h1>这是初始化值的页面</h1>
      <hr/>
      
      <%
           request.setAttribute("requestName", "requestValue");
           request.getSession().setAttribute("sessionName", "sessionValue");
           request.getSession().getServletContext().setAttribute("contextName", "contextValue");
      %>
      
      <button onclick="location.href=‘<%=request.getContextPath()%>/init.jsp‘;">Init</button>
      <button onclick="location.href=‘<%=request.getContextPath()%>/destory.jsp‘;">Destory</button>
</body>
</html>

destory.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
      <h1>这是销毁值的页面</h1>
      <hr/>
      
      <%
           request.removeAttribute("requestName");
           request.getSession().removeAttribute("sessionName");
           request.getSession().getServletContext().removeAttribute("contextName");
      %>
      
      <button onclick="location.href=‘<%=request.getContextPath()%>/init.jsp‘;">Init</button>
      <button onclick="location.href=‘<%=request.getContextPath()%>/destory.jsp‘;">Destory</button>
</body>
</html>

运行结果:

我们通过访问index页面开始:

点击init按钮:

再次点击init按钮:

点击destory按钮:

我们来看第三小类。

session钝化机制

本质就在于把服务器中不经常使用的Session对象暂时序列化到系统文件系统或者数据库系统中,当使用时反序

列化到内存中,整个过程由服务器自动完成。使用的并不是很多。

示意图:

Tomcat中两种session钝化管理器

session钝化机制由SessionManager管理。

第一种:

第二种:

Servlet规范

包括两个监听器,都不需要再web.xml中注册。

HttpSessionBindingListener监听器

绑定:vlaueBound()方法

解除绑定:valueUnbound()方法

HttpSessionActivationListener监听器

钝化:sessionWillPassivate()方法

活化:sessionDidActivate()方法

只提供上述两个监听器的实例源码:

package com.domain;

import java.io.Serializable;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent;

public class User implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable {

	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public void valueBound(HttpSessionBindingEvent httpsessionbindingevent) {
		System.out.println("valueBound Name:"+httpsessionbindingevent.getName());
	}

	public void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent) {
		System.out.println("valueUnbound Name:"+httpsessionbindingevent.getName());
	}

	public void sessionWillPassivate(HttpSessionEvent httpsessionevent) {
		System.out.println("sessionWillPassivate "+httpsessionevent.getSource());
	}

	public void sessionDidActivate(HttpSessionEvent httpsessionevent) {
		System.out.println("sessionDidActivate "+httpsessionevent.getSource());
	}

}

我们在init页面和destory页面使用request对象添加User对象实例,就可以测试了。

时间: 2024-08-03 23:27:03

Java Web学习(38):Listener学习(二)的相关文章

java web (j2ee)学习路线 —— 将青春交给命运

RESON TO DO JAVA WEB:1.JAVA WEB(企业级)  2.Android和iOS过于火爆并且不兼容 一.JAVA WEB开发需要的知识储备 1.      基本的网页设计语言:HTML.JavaScript.CSS 2.      制作动态网站:Java.JSP(servelt) 3.      数据库:MySQL.SQL Server.SQL Lite.Access.Oracle 4.      流行的框架:MVC思想和原理——了解Struts.Spring.Hibern

java web用监听器listener简单的实现在线统计人数

今天又重新学习了java web的基础 监听器技术,用sessionListener简单的实现了网页统计在线人数 (有一个bug就是当关闭网页的时候 session不会关闭依旧存在,除非关闭服务器),代码如下(前端网页代码就不显示了): LoginServlet.java: 1 import javax.servlet.ServletException; 2 import javax.servlet.annotation.WebServlet; 3 import javax.servlet.ht

Java Web 之 Servlet - Listener、Filter、Decorator 精辟

Listener-监听器 Listener为在Java Web中进行事件驱动编程提供了一整套事件类和监听器接口.Listener监听的事件源分为ServletContext/HttpSession/ServletRequest三个级别: ServletContext级别 Listener 场景 ServletContextListener 响应ServletContext生命周期事件(创建/销毁),在ServletContext创建/销毁时分别调用其相应的方法. ServletContextAt

Java Web(五) 监听器Listener

监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,request,context等,并触发相应的事件.Listener主要用于对Session,request,context等进行监控,目前共有8种Listener,分别完成对不同事件的监听. 使用Listener不需要关注事件是怎样触发的或者怎么调用相应的Listener,只要记住该类事件触发时一定会调用相

Java Web开发入门之Servlet(二)

简介 我也苦恼自己的博客书写格式很烂,标题+代码格式.因为每天课程量比较大,没时间花在书写格式上面,如看不习惯请多多见谅.我坚持每天书写博客主要是养成一个习惯,并一直延续下去,虽然内容很空泛,目的也算达到了,总之为了巩固知识点,坚持不懈 Servlet快速入门 0. Servlet简介 什么是servlet 它其实就是java类,运行在服务器端,主要用途就是处理用户发送HTTP请求,并且作出响应 学习两个包:javax.servlet/javax.servlet.http Servlet容器就是

Myeclipse 搭建Java Web 项目:Servlet 《二》

上一节,我们使用myeclipse部署了web项目,但那部署的为静态的web项目,下面我们来学习编写动态的web项目,编写动态项目必须要用到的为:servlet. Servlet是由sun公司命名的,Servlet = Server + Applet(Applet表示小应用程序),Servlet是在服务器端运行的小程序. 编写一个现实登陆的Servlet,并部署访问. 1.编写登录的jsp页面,采用post方式提交. 访问此JSP页面: 2.编写LoginServlet 来通过后台校验登录的用户

【java web】监听器listener

一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数. 1.1 监听器分类 1) 按监听的对象划分,可以分为: ServletContext对象监听器 HttpSession对象监听器 ServletRequest对象监听器 2)按监听的事件划分 对象自身的创建和销毁的监听器 对象中属性的创建和消除的监

Java Web Servlet知识点讲解(二)

一.定义Servlet: public class HelloServlet extends HttpServlet { @Override  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get method invoke"); PrintWriter ou

Java web图片验证功能实现二

上一篇实现的是最简单的图片验证,本文要实现复杂一点的:图片是旋转的,并通过一个注册实例把图片验证嵌套在网页中 实现图片旋转功能的代码为: //写字母 String content = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890"; Random random = new Random(); Graphics2D graphics2D = (Graphics2D)graphics; //设置字体颜色 gr

前端学习(38)~js学习(十五):原型对象

原型对象 原型的引入 function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; //向对象中添加一个方法 this.sayName = function () { console.log("我是" + this.name); } } //创建一个Person的实例 var per = new Person("孙悟空", 18, "