Spring之利用ServletContextListener初始化数据到内存

最近在项目中写了一个将数据初始化到内存的模块,以下是我整理的一个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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在Spring Boot中,可以通过实现CommandLineRunner接口或ApplicationRunner接口来在启动成功后进行一些初始化操作。这两个接口都定义了一个run()方法,用于接收一个字符串数组作为参数。通过实现这两个接口并实现run方法,可以在Spring Boot启动成功后执行相应的逻辑。\[1\]\[2\]其中,CommandLineRunner接口的run方法的参数是String类型的数组,而ApplicationRunner接口的run方法的参数是ApplicationArguments类型的对象。在run方法中,可以编写初始化数据等逻辑。需要注意的是,实现这两个接口的类可以使用@Service注解进行标注,以便Spring Boot能够自动扫描并执行相应的逻辑。\[1\]\[2\]另外,Spring Boot中的类初始化方法的执行顺序可以参考以下顺序:main方法 -> 实现ServletContextListener接口 -> 实现InitializingBean接口 -> 使用@PostConstruct注解 -> 实现ApplicationRunner接口 -> 实现CommandLineRunner接口。\[3\] #### 引用[.reference_title] - *1* *2* [SpringBoot 启动成功初始化数据](https://blog.csdn.net/yamaxifeng_132/article/details/108406606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Spring Boot中的类初始化方法的执行先后顺序](https://blog.csdn.net/qq_38628046/article/details/126178298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值