java listener 教程_Java监听器Listener使用教程

Java监听器Listener使用教程

时间:2017-06-26     来源:华清远见JAVA学院

1、什么是Java监听器Listener

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。

2、Java监听器Listener接口分类

1> ServletContextListener监听ServletContext对象

2> ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改

3> HttpSessionListener监听Session对象

4> HttpSessionActivationListener监听HTTP会话的active和passivate情况,

passivate是指非活动的session被写入持久设备(比如硬盘),active相反。

5> HttpSessionAttributeListener监听Session中的属性操作

6> ServletRequestListener监听Request对象

7> ServletRequestAttributeListener监听Requset中的属性操作

3、Java监听器代码

1> Java监听器代码之ServletContextListener

contextInitialized(ServletContextEvent) 初始化时调用

contextDestoryed(ServletContextEvent) 销毁时调用,即当服务器重新加载时调用

@Component

public class ContextListener implements ServletContextListener {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Override

public void contextInitialized(ServletContextEvent sce) {

WebApplicationContext webApplicationContext= WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());

SaleMenuFunctionService saleMenuFunctionService = (SaleMenuFunctionService) webApplicationContext.getBean("saleMenuFunctionService");

ListauthLimitUrls = saleMenuFunctionService.getAuthedUrls(null);

RedisClient redisClient = RedisClient.getRedisClient();

redisClient.set(Constants.AUTH_KEY, ObjectMapper.toJsonString(authLimitUrls));// 需要做权限限制的url

/*************初始化岗位权限start*************/

SaleDutyService saleDutyService = (SaleDutyService) webApplicationContext.getBean("saleDutyService");

ListdutyIds = saleDutyService.getAllDutyId();

ListauthedUrls = new ArrayList<>();

ListdutyIdsTemp = new ArrayList<>();

if (ValidatorUtil.isNotEmpty(dutyIds)) {

for (Long dutyId : dutyIds) {

dutyIdsTemp.clear();

dutyIdsTemp.add(dutyId);

authedUrls = saleMenuFunctionService.getAuthedUrls(dutyIdsTemp);

redisClient.set(Constants.AUTH_KEY_PERFIX + dutyId, ObjectMapper.toJsonString(authedUrls));

}}

/*************初始化岗位权限end*************/

logger.info("%%%%%%%%%%%webapp 已启动%%%%%%%%%%%");

}

@Override

public void contextDestroyed(ServletContextEvent sce) {

logger.info("%%%%%%%%%%%webapp 已停止%%%%%%%%%%%");

}}

2>Java监听器代码之HttpSessionListener

requestinitialized(ServletRequestEvent) 对实现客户端的请求进行监听

requestDestoryed(ServletRequestEvent) 对销毁客户端进行监听,

即当执行request.removeAttribute("XXX")时调用

package com.lacom;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class TestSessionListener implements HttpSessionListener {

@Override

public void sessionCreated(HttpSessionEvent event) {

// session 创建时执行的操作

// 例如:在线人数+1

}

@Override

public void sessionDestroyed(HttpSessionEvent event) {

// session 销毁时执行的操作

// 例如:在线人数-1

}}

4、在web.xml中配置Java监听器

com.lacom.TestSessionListener

com.lacom.TestSessionListener

Java项目中用到的spring监听器

ContextLoaderListener

作用:

启动Web容器时,自动装配ApplicationContext的配置信息。

用法:

第一种:直接将applicationContext.xml(spring的配置文件)放到/WEB-INF下,只在web.xml中声明一个listener

org.springframework.web.context.ContextLoaderListener

第二种:将之放到classpath下,但是此时要在web.xml中加入,用它来指明你的applicationContext.xml的位置以供web容器来加载。如果有多个xml文件,可以写在一起并用“,”号分隔。

例如近铁项目中的配置:

Log4jConfigListener

好处:

1. 动态的改变记录级别和策略,不需要重启Web应用,如《Effective Enterprise Java》所说。

2. 把log文件定在 /WEB-INF/logs/ 而不需要写绝对路径。

因为 系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了.

log4j.appender.logfile.File=${webapp.root}/WEB-INF/logs/myfuse.log

3. 可以把log4j.properties和其他properties一起放在/WEB-INF/ ,而不是Class-Path。

4.log4jRefreshInterval为60000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;

用法:

在web.xml 添加

log4jConfigLocation

WEB-INF/log4j.properties

log4jRefreshInterval

60000

org.springframework.web.util.Log4jConfigListener

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值