最近在项目中写了一个将数据初始化到内存的模块,以下是我整理的一个DEMO。
首先在 web.xml 中注册listener
<listener>
<listener-class>com.mlxp.listener.InitDataListener</listener-class>
</listener>
然后写一个类继承ServletContextListener类(当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法(销毁,创建)。)
public class InitDataListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("detroyed");
}
@Override
public void contextInitialized(ServletContextEvent context) {
// TODO Auto-generated method stub
List<ChartData> list = new ArrayList<ChartData>();
ChartData chartData = new ChartData();
chartData.setName("直接访问");
chartData.setValue(335);
list.add(chartData);
chartData = new ChartData();
chartData.setName("邮件营销");
chartData.setValue(1325);
list.add(chartData);
chartData = new ChartData();
chartData.setName("联盟广告");
chartData.setValue(123);
list.add(chartData);
chartData = new ChartData();
chartData.setName("视频广告");
chartData.setValue(215);
list.add(chartData);
chartData = new ChartData();
chartData.setName("搜索引擎");
chartData.setValue(735);
list.add(chartData);
JSONArray json = JSONArray.fromObject(list);
String strJson = json.toString();
context.getServletContext().setAttribute("chartdata",strJson);
System.out.println("end init");
}
}
Contorler中获取内存中数据并传到页面
String json = request.getSession().getServletContext().getAttribute("chartdata").toString();
request.setAttribute("data", json);
最后页面获取到数据并展示出来,我在这里利用数据画了一个饼状图
POINT:
1、把service注入listener
通过WebApplicationContextUtils获取spring应用的上下文。
参考:http://blog.csdn.net/wangjia55/article/details/51712470
http://www.cnblogs.com/fjdingsd/p/5731982.html
2、spring容器的生命周期与各种 Listener
可以通过不同的Listener来实现各种需求
参考:http://blog.csdn.net/zjs40/article/details/61466349
3、ServletContext的讲解和使用
利用ServletContext可以实现网站计数器,网站在线用户的显示等功能。
参考:http://blog.csdn.net/jiben071/article/details/6024655
DEMO:http://download.csdn.net/download/lazyrabbitlll/10033416