Servlet上下文监听器——ServletContextListener

J2EE监听器和J2SE事件处理中监听器一样,用于监视事件动作。
J2EE监听器类别:
请求监听器:
ServletRequestListener、
ServletRequestAttributeListener
HttpSession监听器:
HttpSessionListener、
HttpSessionAttributeListener
Servlet上下文监听器:
ServletContextListener、
ServletContextAttributeListener
上下文监听器相关方法:
ServletContextListener
[table]
|方法|说明|
|contextInitialized(ServletContextEvent sce)|WEB应用准备处理请求时触发|
|contextDestroyed(ServletContextEvent sce)|关闭时触发|
[/table]
ServletContextAttributeListener
[table]
|方法|说明|
|attributeAdded(ServletContextAttributeEvent scab)|新增一个属性时触发|
|attributeRemoved(ServletContextAttributeEvent scab)|删除一个属性时触发|
|attributeReplaced(ServletContextAttributeEvent scab)|替换属性值时触发|
[/table]
HttpSession监听器相关方法:
HttpSessionListener
[table]
|方法|说明|
|sessionCreated(HttpSessionEvent se)|Session创建时触发|
|sessionDestroyed(HttpSessionEvent se)|Session关闭时触发|
[/table]
HttpSessionAttributeListener
[table]
|方法|说明|
|attributeAdded(HttpSessionBindingEvent hsbe)|新增一个属性时触发|
|attributeRemoved(HttpSessionBindingEvent hsbe)|删除一个属性时触发|
|attributeReplaced(HttpSessionBindingEvent hsbe)|替换属性值时触发|
[/table]
请求监听器相关方法:
ServletRequestListener
[table]
|方法|说明|
|sessionCreated(HttpSessionEvent se)|Session创建时触发|
|sessionDestroyed(HttpSessionEvent se)|Session关闭时触发|
[/table]
ServletRequestAttributeListener
[table]
|方法|说明|
|attributeAdded(HttpSessionBindingEvent srae)|新增一个属性时触发|
|attributeRemoved(HttpSessionBindingEvent srae)|删除一个属性时触发|
|attributeReplaced(HttpSessionBindingEvent srae)|替换属性值时触发|
[/table]

需要在服务器启动时就加载就必须用上下文监听器
监听器(部署运行)

<listener>
<listener-class>
com.fjdz.listener.InitListener
</listener-class>
</listener>


监听器(开发):实现ServletContextListener的接口
以下是实现服务器启动时从配置文件中读出需要从数据文件要读取的相应数据,并取出数据保存在内存中

package com.fjdz.listener;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.fjdz.getdata.beans.DataBean;
import com.fjdz.getdata.query.QueryFactory;

public class InitListener implements ServletContextListener {
private Element root = null;
private Document doc = null;
public static List<List<DataBean>> list;

public static List<List<DataBean>> getList() {
return list;
}

public static void setList(List<List<DataBean>> list) {
InitListener.list = list;
}

public void contextDestroyed(ServletContextEvent sce) {

}

@SuppressWarnings("unchecked")
public void contextInitialized(ServletContextEvent sce) {
SAXReader reader = new SAXReader();
List<List<DataBean>> datalist = new ArrayList<List<DataBean>>();
try {
doc = reader.read(new File(sce.getServletContext().getRealPath("WEB-INF") + "/xml/datainfo.xml"));//用DOM-4j读取配置文件
root = doc.getRootElement();
List rootList = root.selectNodes("/datas/data");//使用X-Path读取根节点

QueryFactory queryFactory = new QueryFactory();
EngineInitializer.initializeEngine();
AoInitialize aoInitialize = new AoInitialize();
aoInitialize.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
for(Object obj : rootList){
List<DataBean> beanlist = new ArrayList<DataBean>();
List<DataBean> blist = new ArrayList<DataBean>();
Element element = (Element)obj;
String dataType = element.attributeValue("datatype");//读取子节点下的属性值
String path = element.attributeValue("path");
List rootList1 = root.selectNodes("/datas/data/trees");
for(Object o : rootList1){
Element element1 = (Element)o;
String className = element1.attributeValue("classname");
String code = element1.attributeValue("code");
String name = element1.attributeValue("name");
beanlist = queryFactory.query(dataType, className, path, code, name,"");//读取数据的方法
datalist.add(beanlist);
}
List rootList2 = root.selectNodes("/datas/data/trees/tree");
for(Object object : rootList2){
Element element2 = (Element)object;
String className = element2.attributeValue("classname");
String code1 = element2.attributeValue("code");
String name1 = element2.attributeValue("name");
String keycode = element2.attributeValue("keycode");
blist = queryFactory.query(dataType, className, path, code1, name1,keycode);
datalist.add(blist);
}
}
aoInitialize.shutdown();
InitListener.setList(datalist);//数据保存在静态变量中存放于内存里
} catch (IOException e) {
e.printStackTrace();
}catch (DocumentException e) {
e.printStackTrace();
}

}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值