pw 2011-01-17 16:27
浏览 192
已采纳

在SSH(struts2.21+hibernate3.3.2+spring2.5)整合中遇到一个问题:

在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?在网上也没查到相关的问题。

  • 写回答

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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发