`
Copperfield
  • 浏览: 255241 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:24687
社区版块
存档分类

listener在struts2中的使用--程序初始化时加载数据

阅读更多

 

问题: 有一些web系统的页面大量用户需要经常访问,比如大型网站的首页。

如果A用户访问了首页,程序需要从数据库取一次数据,那么B用户再访问同样的页面时,程序是否还会从数据库取数据呢?如果不进行合理的设计,后台的压力巨大,且效率很低。

 

解决方法1: 可以采用单例模式:

第一个用户访问时,从数据库取数据。并将数据保存为一个全局对象;其他用户访问时,程序不再查询数据库,而将对象直接返回。

解决方法2: 可以采用在服务器启动时就初始化对象

启动时从数据库获取数据,并将数据保存到application对象中。整个程序运行期间都有数据,页面可以直接使用这些数据。即,使用listener,继承ServletContextListener借口,并重写contextInitialized方法。

 

方法2的步骤:

1.写一个类,继承特定接口,重写特定方法。

2.在web.xml中配置listener.

 <listener>
     <listener-class>com.jrj.datamart.utils.IndexListener</listener-class>
   </listener> 

 

listener的核心内容

public class IndexListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent event) {

ServletContext context = event.getServletContext();
  //取得appliction上下文
   ApplicationContext ctx =WebApplicationContextUtils.

getRequiredWebApplicationContext(context);
   //取得特定bean
  tableService=(TableService)ctx.getBean("tableService");
  list = tableService.getTBType();
  mapsize = list.size();
  System.out.println(mapsize+"=========");
  TBType tempTBType = new TBType();
  for (int i = 0; i < list.size(); i++) {
   tempTBType = list.get(i);
   if (tempTBType.getLevel() == 1) {
    mainList.add(tempTBType);
   }
  }
  //将对象放入上下文
  context.setAttribute("mainList",mainList);
  context.setAttribute("list",list);

}

//你也可以有选择的重写以下方法

public void contextDestroyed(ServletContextEvent sce) { }

分享到:
评论

相关推荐

    基于EXT SSI的简单树实现

    一个基于EXT实现的树,先上图。 动态加载加右键菜单。 希望拿到可以跑起来看看效果的,需要按以下步骤做。...3 在代码中使用方式 static Log log = LogFactory.getLog("Action类"); log.debug("result is " + result);

    ssh(structs,spring,hibernate)框架中的上传下载

    3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。  通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。  以上是Spring+...

    Spring中文帮助文档

    6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    Spring API

    6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7. Spring AOP APIs 7.1. 简介 7.2. Spring中的切入点API 7.2.1. 概念 7.2.2. 切入点运算 7.2.3. AspectJ切入点表达式 7.2.4. 便利的切入...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    2.5.4 初始化托管Bean的属性 85 2.5.5 通过FacesContext访问应用环境 89 2.6 导航模型 91 2.6.1 静态导航 93 2.6.2 动态导航 93 2.7 使用UI标签创建视图页面 94 2.7.1 UI标签概述 94 2.7.2 UI标签的通用属性 97 ...

    关于JSP配置文件web.xml加载顺序详解

    一、 1、启动一个WEB项目的时候,WEB容器会去读取它的配置...load-on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该s

Global site tag (gtag.js) - Google Analytics