天天看點

spring 錯誤 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderServlet

觀察是否還有異常: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