14web启动将数据加载到内存中
来源:互联网 发布:传奇当年有多火 知乎 编辑:程序博客网 时间:2024/05/05 18:38
这里用到了Servlet的listener,首先我们在web.xml中配置这个listener,如下所示:
<listener>
<listener-class>pub.LoadInMemory</listener-class>
</listener>
LoadInMemory.java是一个listener,将调用loadInfo.java将数据加载到内存中。它的内容如下:
package pub;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class LoadInMemory implements ServletContextListener{
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
//得到LoadInfo对象
manage.memory.LoadInfo load=this.loadInfo(servletContext);
//调用LoadInfo的init()方法
load.init();
}
public void contextDestroyed(ServletContextEvent event) {
}
protected manage.memory.LoadInfo loadInfo(ServletContext servletContext)
{
//从Spring中得到LoadInfo这个Bean的对象。
return (manage.memory.LoadInfo) WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("loadInfo");
}
}
LoadInfo.java用于把从数据库中查询到得数据放到内存Map中。
package manage.memory;
import java.util.HashMap;
import java.util.Map;
import manage.iface.facade.IDgzzUserFacade;
import manage.vo.dgzzUserVo;
import org.springframework.stereotype.Component;
//将LoadInfo放进Spring中,由Spring管理这个bean
@Component
public class LoadInfo {
private IDgzzUserFacade dgzzUserFacade;
//infoMap中存放着我们从数据库得到数据
public static Map infoMap;
private dgzzUserVo uservo;
private LoadInfo(){
}
//在init()方法中,dgzzUserFacade.selectUserById(100);从数据库中查到数据然后把数据存放到infoMap中
public void init(){
infoMap=new HashMap();
uservo=dgzzUserFacade.selectUserById(100);
infoMap.put("user", uservo);
}
public IDgzzUserFacade getDgzzUserFacade() {
return dgzzUserFacade;
}
public void setDgzzUserFacade(IDgzzUserFacade dgzzUserFacade) {
this.dgzzUserFacade = dgzzUserFacade;
}
}
经过上面的步骤我们完成了在Web服务器启动时将某些要用到的数据放进内存中。下面是从infoMap中读取数据:
public void readMemory(){
dgzzUserVo uservo=(dgzzUserVo)LoadInfo.infoMap.get("user");
JSONObject jsonobj=JSONObject.fromObject(uservo);
System.out.println(jsonobj.toString());
}
刷新内存的页面refresh.jsp:
<body>
<%
HttpSession httpSession = request.getSession();
LoadBaseInfo loadBaseInfo = (manage.memory.LoadInfo) WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("loadInfo");
loadBaseInfo.init();
out.print("内存刷新成功!!!");
%>
</body>
如何得到WebApplicationContext
当 Web 应用集成 Spring 容器后,代表 Spring 容器的WebApplicationContext对象将以
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 为键存放在ServletContext的属性列表中。您当然可以直接通过以下语句获取 WebApplicationContext:
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
但通过位于 org.springframework.web.context.support 包中的WebApplicationContextUtils 工具类获取 WebApplicationContext 更方便:
WebApplicationContext wac =WebApplicationContextUtils.getWebApplicationContext(servletContext);
当 ServletContext 属性列表中不存在 WebApplicationContext 时,getWebApplicationContext() 方法不会抛出异常,它简单地返回 null。如果后续代码直接访问返回的结果将引发一个 NullPointerException 异常,而 WebApplicationContextUtils 另一个 getRequiredWebApplicationContext(ServletContext sc) 方法要求 ServletContext 属性列表中一定要包含一个有效的 WebApplicationContext 对象,否则马上抛出一个 IllegalStateException 异常。我们推荐使用后者,因为它能提前发现错误的时间,强制开发者搭建好必备的基础设施。
然后调用WebApplicationContext.getBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,
<listener>
<listener-class>pub.LoadInMemory</listener-class>
</listener>
LoadInMemory.java是一个listener,将调用loadInfo.java将数据加载到内存中。它的内容如下:
package pub;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class LoadInMemory implements ServletContextListener{
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
//得到LoadInfo对象
manage.memory.LoadInfo load=this.loadInfo(servletContext);
//调用LoadInfo的init()方法
load.init();
}
public void contextDestroyed(ServletContextEvent event) {
}
protected manage.memory.LoadInfo loadInfo(ServletContext servletContext)
{
//从Spring中得到LoadInfo这个Bean的对象。
return (manage.memory.LoadInfo) WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("loadInfo");
}
}
LoadInfo.java用于把从数据库中查询到得数据放到内存Map中。
package manage.memory;
import java.util.HashMap;
import java.util.Map;
import manage.iface.facade.IDgzzUserFacade;
import manage.vo.dgzzUserVo;
import org.springframework.stereotype.Component;
//将LoadInfo放进Spring中,由Spring管理这个bean
@Component
public class LoadInfo {
private IDgzzUserFacade dgzzUserFacade;
//infoMap中存放着我们从数据库得到数据
public static Map infoMap;
private dgzzUserVo uservo;
private LoadInfo(){
}
//在init()方法中,dgzzUserFacade.selectUserById(100);从数据库中查到数据然后把数据存放到infoMap中
public void init(){
infoMap=new HashMap();
uservo=dgzzUserFacade.selectUserById(100);
infoMap.put("user", uservo);
}
public IDgzzUserFacade getDgzzUserFacade() {
return dgzzUserFacade;
}
public void setDgzzUserFacade(IDgzzUserFacade dgzzUserFacade) {
this.dgzzUserFacade = dgzzUserFacade;
}
}
经过上面的步骤我们完成了在Web服务器启动时将某些要用到的数据放进内存中。下面是从infoMap中读取数据:
public void readMemory(){
dgzzUserVo uservo=(dgzzUserVo)LoadInfo.infoMap.get("user");
JSONObject jsonobj=JSONObject.fromObject(uservo);
System.out.println(jsonobj.toString());
}
刷新内存的页面refresh.jsp:
<body>
<%
HttpSession httpSession = request.getSession();
LoadBaseInfo loadBaseInfo = (manage.memory.LoadInfo) WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("loadInfo");
loadBaseInfo.init();
out.print("内存刷新成功!!!");
%>
</body>
如何得到WebApplicationContext
当 Web 应用集成 Spring 容器后,代表 Spring 容器的WebApplicationContext对象将以
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 为键存放在ServletContext的属性列表中。您当然可以直接通过以下语句获取 WebApplicationContext:
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
但通过位于 org.springframework.web.context.support 包中的WebApplicationContextUtils 工具类获取 WebApplicationContext 更方便:
WebApplicationContext wac =WebApplicationContextUtils.getWebApplicationContext(servletContext);
当 ServletContext 属性列表中不存在 WebApplicationContext 时,getWebApplicationContext() 方法不会抛出异常,它简单地返回 null。如果后续代码直接访问返回的结果将引发一个 NullPointerException 异常,而 WebApplicationContextUtils 另一个 getRequiredWebApplicationContext(ServletContext sc) 方法要求 ServletContext 属性列表中一定要包含一个有效的 WebApplicationContext 对象,否则马上抛出一个 IllegalStateException 异常。我们推荐使用后者,因为它能提前发现错误的时间,强制开发者搭建好必备的基础设施。
然后调用WebApplicationContext.getBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,
0 0
- 14web启动将数据加载到内存中
- 简单的Servlet,tomcat启动将数据加载到内存中去
- Tomcat启动时加载数据到缓存[web.xml中listener加载顺序]
- 如何将数据加载到 ArrayList 中
- web服务刚启动时SpringMVC注解就加载一定的数据库数据进入内存中
- 从文件中加载数据到内存
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)
- 将ApplicationContext.xml加载到java内存中
- Android下将图片加载到内存中
- 将数据对象加载到下拉列表中
- 164,将.plist文件中的数据加载到程序中
- 将json中的数据加载到table和ul中
- 将内存中的对象写入到二进制文件,然后从文件中加载到内存
- SpringMvc 系统启动时加载数据到内存中
- SpringMvc 系统启动时加载数据到内存中
- iOS开发将数据保存到内存中
- 将web中多控件数据导入到EXECL
- C# 将文件加载到内存
- 13Spring文件上传下载
- Math.random()随机产生【x,y)的随机数
- oracle基础二
- Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图
- Linux下编译软件时指定安装目录
- 14web启动将数据加载到内存中
- 一个解决背景切换的shader
- 禁止ViewPager的左右滑动事件
- iptables规则的查看、添加、删除和修改
- Java学习之Iterator(迭代器)的一般用法 (转)
- ceph自动化测试用例编写
- xml报错 Parse Fatal Error :在实体引用中,实体名称必须紧跟在'&'后面
- 多张图片合成加载动画
- 网络流-最小费用最大流