觀察是否還有異常:java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderServlet
是以ContextLoaderServlet 沒有成功加載,導緻web.xml建構spring容器失敗!是以在引用WebApplicationContextUtils時,出現java.lang.NoClassDefFoundError:org/springframework/web/context/support/WebApplicationContextUtils
情況1:WebApplicationContext wctx=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
我的spring-web.jsr的包已經加上了,為什麼程式運作時,找不到WebApplicationContextUtils類呢?
有一個教程上說了這樣的一句話,我不了解是什麼意思“在Action初始化時獲得一個應用程式上下文。重用spring的WebApplicationContextUtils類,如果沒有可用的上下文,該動作不會正确的初始化”。
情況2:(大多數是在這,被雷到了!哈哈)
你的工程包有可能都是引用的,需要把它們都手動拷貝到工程中來!
情況3:
spring架構有自已内在一套映射機制,樓主的問題是由于沒有找到相應的映射BEAN引用而産生!
<context-param>
<param-name>contextconfiglocation</param-name>
<param-value>com/wenjing/hibernate/test/wenjing-servlet.xml</param-value>
</context-param>
這一段換一種方式試一試,可以寫到spring-servlet.xml當中引用
内容如下
bean id="newBaseAction" class="db.PBaseAction">
<property name="view"><value>newBaseAction</value></property>
</bean>
情況4:
你用的是hibernate3.0吧! 但你的spring配置檔案中不是
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
應該是:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
你試試!
情況5:
關鍵字: Spring與Web應用內建的方法細講
1、将spring的相關jar包,拷貝到web應用的WEB-INF/lib目錄下
2、修改web.xml,讓應用伺服器自動加載spring的BeanFactory對象
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3、在web元件裡,可以使用WebApplicationContextUtils工具類來
獲得BeanFactory對象的執行個體,擁有了BeanFactory對象,就擁有
了spring的容器管理的能力。
解釋:
這種配置的結果是,spring通過ContextLoaderListener将WebApplicationContext對象
(BeanFactory的子類)放入ServletContext中,并取名為一個靜态變量的值:
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
* 通過WebApplicationContextUtils.getApplicationContext()方法就可以獲得WebApplicationContext
對象的值
* 或者通過request.getSession().getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICAT