在SSH(struts2.21+hibernate3.3.2+spring2.5)整合中遇到一个问题:
菜鸟求解~~知道的大师们给个解决方案把~~~
目的:在容器启动后,自动从数据库中读出数据然后在WEB的application范围内写入数据 ,这样在index.jsp,里只要直接读取application数据就行了,不每次都过action。(都是一些一般不变的数据。且数据不多)
试验:1、在把Action设为单例后,容器启动后会自动运行,不能访问spring里的bean,及在构造方法里打印ActionContext.getContext()为空值。找不到办法~~
2、继承ApplicationListener类容器启动后会自动运行,可以访问spring里的bean,但打印ActionContext.getContext()为空值。还是找不到办法。
3、使用hibernate的EhCache,使用二级缓存及查询缓存能实现,但每次都要过action.不能在容器启动后就在application写入数据。
4、ServletContextListener等也试了下,好像都差不多。
我想问下。有没有其它的办法能解决问题。还是只能每次都过action?在网上也没查到相关的问题。

在SSH(struts2.21+hibernate3.3.2+spring2.5)整合中遇到一个问题:
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- archy123 2011-01-18 09:13关注
通过ServletContextListener应该是可以实现的
这个是通过容器初始化时获取数据库的url实例 ssh实现web.xml配置
[code="java"]
ServletContextLoaderListener
[/code]
ServletContextLoaderListener类
[code="java"]import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.support.WebApplicationContextUtils;//只是一个接口,具体实现看自己需要。
import UrlManager;public class ServletContextLoaderListener implements ServletContextListener {
/* (non-Javadoc) * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) */ public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext servletContext = servletContextEvent.getServletContext(); UrlManager urlManager = this.getUrlManager(servletContext); List<?> urlAuthorities = urlManager.loadUrlAuthorities(); servletContext.setAttribute("urlAuthorities", urlAuthorities); } /* (non-Javadoc) * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) */ public void contextDestroyed(ServletContextEvent servletContextEvent) { servletContextEvent.getServletContext().removeAttribute("urlAuthorities"); } /** * Get UrlManager from ApplicationContext * * @param servletContext * @return UrlManager */ protected UrlManager getUrlManager(ServletContext servletContext) { return (UrlManager) WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean("urlManager"); }
}
[/code]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报