`
TRAMP_ZZY
  • 浏览: 132531 次
社区版块
存档分类
最新评论

JavaEE Filter和Listener 分析

阅读更多
1. Filter 使程序可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chain”。
  Filter 会在ServletContext 初始化之后,被调用 init()方法初始化。doFilter()会在每次请求被拦截时调用。
Filter destroy() 方法由容器在销毁过滤器实例之前调用:。
package cn.mybatis.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class LoginFilter
 */

public class LoginFilter implements Filter {

	private FilterConfig filterConfig;
	
    /**
     * Default constructor. 
     */
    public LoginFilter() {
        // TODO Auto-generated constructor stub
    }


	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		this.filterConfig = fConfig;
		System.out.println("init methid getFilterConfig");
	}
    
	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		System.out.println("destroy method");
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("doFilter method");
		chain.doFilter(request, response);
	}


}


2. Listener 是基于观察者模式设计的,Listener 的设计对开发 Servlet 应用程序提供了一种快捷的手段,能够方便的从另一个纵向维度控制程序和数据。目前 Servlet 中提供了 5 种两类事件的观察者接口,它们分别是:4 个 EventListeners 类型的,ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener 和 2 个 LifecycleListeners 类型的,ServletContextListener、HttpSessionListener。

统计在线人数的实例
package cn.mybatis.servlet;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * Application Lifecycle Listener implementation class OnlineUserListener
 *
 */
@WebListener
public class OnlineUserListener implements HttpSessionListener, 
					ServletContextListener, ServletContextAttributeListener {
	private long onlineUserCount = 0;
	
    /**
     * Default constructor. 
     */
    public OnlineUserListener() {
        // TODO Auto-generated constructor stub
    }

	/**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0) {
    	
      System.out.println("contextInitialized");
    }

	/**
     * @see ServletContextAttributeListener#attributeAdded(ServletContextAttributeEvent)
     */
    public void attributeAdded(ServletContextAttributeEvent arg0) {
        System.out.println("attributeAdded");
    }

	/**
     * @see HttpSessionListener#sessionCreated(HttpSessionEvent)
     */
    public void sessionCreated(HttpSessionEvent arg0) {
        this.onlineUserCount ++;
        toUpadteCount(arg0);
        System.out.println("sessionCreated");
    }

	/**
     * @see ServletContextAttributeListener#attributeReplaced(ServletContextAttributeEvent)
     */
    public void attributeReplaced(ServletContextAttributeEvent arg0) {
        System.out.println("attributeReplaced");
    }

	/**
     * @see ServletContextAttributeListener#attributeRemoved(ServletContextAttributeEvent)
     */
    public void attributeRemoved(ServletContextAttributeEvent arg0) {
        // TODO Auto-generated method stub
    }

	/**
     * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
     */
    public void sessionDestroyed(HttpSessionEvent arg0) {
       this.onlineUserCount --;
       toUpadteCount(arg0);
       System.out.println("sessionDestroyed");
    }

	/**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    }
    
    private void toUpadteCount(HttpSessionEvent httpSessionEvent) {
    	httpSessionEvent.getSession().getServletContext().setAttribute("onlineUserCount", onlineUserCount);
    	//httpSessionEvent.getSession().setAttribute("onlineUserCount", onlineUserCount);
    }
    
	
}


3. 解决浏览器关闭时,不调用sessionDestroyed() 方法的方案
essionDestroyed方法在以下两种情况下会调用:
   A.session过期。
   B.调用session.invalidate()方法。
   因此可以在浏览器中监听浏览器的关闭事件,在关闭前,让服务器发送请求,调用某方法        使当前session 过期。
分享到:
评论

相关推荐

    java_web_第9章_Filter与Listener.ppt

    11.1 Web应用的事件模型 11.2 Web应用的过滤器 11.3 小 结 11.1.1 事件与监听器接口 11.1.2 监听环境事件 11.1.3 监听请求事件 11.1.4 监听会话事件 11.1.5 事件监听器的注册

    JavaEE综合练习项目-快递e栈源码

    JavaEE综合练习项目,涉及:html、css、js、Jquery、bootstrap、layui、layer、ajax、mysql、tomcat、servlet、filter、listener、jsp和公有云服务器。

    160G!全新升级版 JAVAEE云计算全栈就业班课程 完美试炼JAVAEE企业级云计算应用

    ├<阶段1 java语言基础> ...│ ├<11-Filter和Listener> │ ├ │ ├和JSON> │ ├ │ ├基础> │ ├旅游网> │ ├ │ └ ├<阶段3.1 Mybatis·> │ ├课程介绍及环境搭建> │ ├入门案例> │ ├<03.

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter </filter-class> </filter> <!-- CAS SINGLE SIGN OUT ...

    JavaEE求职简历-姓名-JAVA开发工程师-范文.doc

    熟练掌握java基础,包括面向对象、多线程、IO流、UDP/TCP、socket、文件上传下载、XML解析、JSON解析、servlet、filter、listener、HTTP协议等等; 熟练掌握 使用jdbc标准连接数据库,掌握DDL、DML、DCL、DQL和...

    老杜javaweb教程配套资料JavaEE帮助文档分享

    主要内容包括:Servlet、JSP、EL表达式、JSTL标签库、Filter过滤器、Listener监听器。在讲解过程中采用的手法是从0到1,让小白学会源码分析,让大牛眼前一亮。总之,不管你是小白,还是已经在从事Java开发的工作者,...

    生活轨迹SSH服务端

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </filter-...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    DOS命令使用方法(超全).

    DOS命令使用方法(超全). xmlns=... <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <param-name>encoding <param-value>UTF-8</param-value>

    java及javaweb编程教程、ssm、商城实战项目、how2j网站的全站教程、包含从前端到后端全栈技术

    包括spring、spring mvc、mybatis、spring+mybatis、SSM、springboot、javaee 商城项目、ssm商城项目、springboot商城项目,工具和中间件,包括maven、git、Intellij IDEA、Redis、WebSocket、shiro、quartz、...

    (重温)JavaWeb–Filter 过滤器(JavaWeb 的三大组件之一)

    三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范。也就是接口 Filter 过滤器它的作用是:拦截请求,过滤响应。  拦截请求常见的应用场景有: 1、权限检查 2、...

    JAVA EE 开发手册.CHM

    JavaEE是一个开放的、 基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用。 JavaEE的具有可扩展性、性能和可靠性。 手册结构目录如下: 1、HTP协议 2、Servlet1 之基础介绍 ...

    JavaEE求职简历-姓名-JAVA开发工程师.docx

    2.熟悉Java Web应用开发,熟悉listener、Filter、EL、JSTL等常用技术; 3.熟悉Spring MVC、Spring Boot、Spring DataJPA 的使用,掌握Spring的Ioc与Aop思想; 4.掌握基于Spring整合常用框架并进行项目开发的经验,如:...

    zhaoeh.github.io

    关于JavaEE核心组件Listener,Filter,Servlet等。关于Java操作JDBC的方式与过程,对于JDBC封装,连接池等概念与应用。网页技术HTML,CSS,JavaScript,JQuery,Ajax等。 MySQL数据库基础知识,DDL,DML等。其他模块...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    7.3.3 注册Servlet、Filter、Listener 186 7.4 Tomcat 配置 187 7.4.1 配置Tomcat 187 7.4.2 代码配置Tomcat 188 7.4.3 替换Tomcat 190 7.4.4 SSL 配置 191 7.5 Favicon 配置 196 7.5.1 默认的Favicon 196 7.5.2 ...

    javaweb详细笔记,绝对详细(内含代码)

    javaweb ...知识点 Javascript知识点 jQuery知识点 14 Bootstrap知识点 17 JDBC & 配置文件 & 连接池 19 Xml文档及解析 31 反射 33 Http协议和Tomcat服务器 36 JavaWeb核心之Servlet 41 ...过滤器Filter

    JavaEE 5.0 Tutorial.pdf

    Sun 官方 J2ee 5.0 教程 The Java EE 5Tutorial For Sun Java System Application Server 9.1 Contents Preface ..................................................................................................

    JavaWeb核心学习笔记

    Tomcat+*Servlet+Jsp+Filter+Listener

Global site tag (gtag.js) - Google Analytics