在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?在网上也没查到相关的问题。 问题补充:yuyuypjk 写道

解决方案

通过ServletContextListener应该是可以实现的这个是通过容器初始化时获取数据库的url实例 ssh实现web.xml配置<listener> <listener class> ServletContextLoaderListener </listener-class></listener>ServletContextLoaderListener类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"); }}
解决方案二:
其实你就是想要一个全局的Bean是吗?public Class Cache{ private static Map<String,Object> cacheMap; private Cache(){ throw new AssertionError();} static{ initCacheMap();} private static initCacheMap(){ if(cacheMap == null) cacheMap = new HashMap<String,Object>(); cacheMap.put("mydata1","value1"); } public static Object get(String key){ return cacheMap != null ? cacheMap.get(key) : null ;}}直接建一个Servlet 随容器初始化,如果你要一个线程安全的集合就改成 ConcurrencyMap
解决方案三:
额。index.jsp 通过小脚本获得hibernate查询数据源的结果。 spring注入业务逻辑和数据库层。因为用不到action所以不用注入action。这样初始化index.jsp时就调用业务逻辑类查询数据库。获得结果返回出来。
解决方案四:
你为什么一定要用Action去完成全局数据的初始化呢?你完成可以用Servlet的过虑器完成啊!先取出你放在Application中的数据,如果为空就拿着Spring里配置好的数据源去数据库查,将查到的数据扔到Application。如果不空就跳过,执行下一个过滤器。在过虑器中获得Spring容器和数据源的方法:// 获得Spring容器ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);// 获得数据源DataSource dataSource = ctx.getBean("dataSource");当然你也可以去拿Spring容器中的Service或DAO。其实更好的方法是写一个Servlet的listener,在服务启动的时候加载一次,以后就可以直接用了,不过一定要放在Spring的listener之后执行。
解决方案五:
在页面上 用$ 调用action 中的方法是不是可以, 写在action父类中 通过action返回这些值, 值就可以不用存application中了 设置成静态就行了, 不知道理解lz意思没 呵呵
解决方案六:
不通过action的话,可以初始化页面index时,用jstl标签采用jdbc方式获得初始化数据。

时间: 2024-10-03 09:05:14

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

struts2-2.2.1+hibernate3.3.1+spring2.5.6整合

问题描述 我首先整合的hibernate和spring,通过测试是成功的.然后开始struts2的整合,出现错误,请各位帮忙看下,是怎么个情况?涉及到的配置文件和错误如下:web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=&q

struts2+spring2.0整合的问题

问题描述 小弟在做strut2和spring2.0整合的时候.老是出现下面的问题. 我先单独做的struts2的一个例子程序,没有问题, 再按照<struts2权威指南>这本书上进行整合,可就是报下面的错误,希望哪位大哥帮忙解决. 小弟都调试两天了....另外我想问问: 为什么我做struts2的例子的时候, 加入这个struts2-spring-plugin-2.0.11.1.jar包导入就出问题:嚴重的: Error filterStart, 把这个包去掉就可以... 是我的环境的问题还是

Struts2.1+Hibernate3.3+Spring3.0请高手帮帮忙

问题描述 我是个Java初学者,现在用Struts2.1+Hibernate3.3+Spring3.0出现如图所示的问题sessionFactory的配置如图:listener的配置如图:请高手们帮帮忙啊 解决方案 解决方案二:检查一下驱动jar,还有listeners在这里配置吗?解决方案三:有没少jar包?web.xml有没配下面的:<!--向监听器类中传递初始化参数,以获取BeanFactory对象(告诉spring到哪里去加载配置文件)--><context-param>&

无语中 第一次用struts2 与spring2.5整合出现一打错误 麻烦大侠写看哈

问题描述 Contextinitializationfailedjava.lang.NoClassDefFoundError:org/springframework/context/support/AbstractRefreshableConfigApplicationContextatjava.lang.ClassLoader.defineClass1(NativeMethod)atjava.lang.ClassLoader.defineClass(UnknownSource)atjava.s

Jboss7上+maven搭建struts2+spring3+hibernate3完整能运行

这是一个采用maven项目管理工具,集成struts2+spring3+hibernate3+mysql的一套框架模板,只是提供集成成功,struts2我采用的是零配置方式的,如果对着stuts2零配置方式不理解的,则回头学习一下.该程序测试时在jboss7 AS上运行成功.但是没有使用jndi数据源,在jboss7中数据源配置需要按照module的方式配置,但是jboss4中数据源则相对简单一点.jboss4中使用spring和struts2集成时会有问题,这里有一个解决的文章可以参考一下:h

ssh mysql5.0 hibernate3.0 插入数据乱码问题

问题描述 1.jsp.java类.数据库.编码格式都是UTF-8,为什么插入数据库的中文是乱码呢hibernate.cfg.xml链接也加编码格式了<propertyname="connection.url">jdbc:mysql://xxxxxx/aras?useUnicode=true?characterEncoding=utf8</property><propertyname="connection.useUnicode">

SSH——Struts2中引入Spring

一,为什么要使用Spring           1,装配JavaBean                   摒弃老旧的new方式,spring为我们提供了一种机制,使得创建javaBean以及设置javaBean属性的工作可以通过配置文件以及Spring框架本身来完成.这样,当某些地方需要改变时,修改Spring的配置文件即可.这个过程实际上就是Spring框架通过读取相应的配置文件中的内容,并根据这些配置自动装在javaBean对象,设置JavaBean的属性.            2,

struts2实现用户登录 并能查询数据库中的数据显示出来 按条件查询

问题描述 struts2实现用户登录 并能查询数据库中的数据显示出来 按条件查询 struts2实现用户登录 并能查询数据库中的数据显示出来 按条件查询,多张表按条件查询 我要例子 主要的功能是显示数据库的内容 请看清要求!!! 解决方案 用 户 解决方案二: HIBERNATE中的ORG关联 解决方案三: 先搭个框架,再实现 解决方案四: 可以参考马士兵的struts2 视频,讲解的非常详细,如果需要给以给你 解决方案五: http://blog.csdn.net/lisq037/articl

ssh框架在整合中出现了问题,求指导。

问题描述 ssh框架在整合中出现了问题,求指导. 2015-8-14 15:02:47 org.apache.catalina.core.AprLifecycleListener init 信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:UsersThinkPadApp