2010-11-22 79 views
6

在我的web.xml我有一個 「用SpringMVC」 servlet的聲明(其中有一個用SpringMVC相應-servlet.xml中)Spring應用上下文的加載順序

<servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>springmvc</servlet-name> 
    <url-pattern>/myapp/*</url-pattern> 
</servlet-mapping> 

我也有我平常applicationContext.xml文件。

哪一個先得到加載? springmvc-servlet.xml或applicationContext.xml?

我問這個問題的原因是,無論何時我將<mvc:annotation-driven/>元素放入applicationContext.xml中,我都會遇到嚴重上下文錯誤。但是,當我將這個元素放入springmvc-servlet.xml中時,我的web應用運行良好。

任何想法爲什麼?

在另一個網絡應用程序中,我在applicationContext.xml中有<mvc:annotation-driven/>,它運行良好。

附錄: 我注意到的AOP存在:配置造成衝突對抗MVC:註解驅動

+0

請將異常堆棧跟蹤複製到您的問題。您是否已經在applicationContext.xml中爲mvc命名空間定義了xsd? – MarrLiss 2010-11-22 09:09:45

+0

沒有堆棧跟蹤。我只從Tomcat中獲得典型的嚴重上下文錯誤。 – chris 2010-11-22 09:20:00

回答

0

除了web.xml中沒有預定的順序。 出現這種情況:

  • web.xml文件中由servlet引擎加載,這將觸發所有定義Servlet,篩選器,監聽器的負載,
  • 的的ContextLoaderListener加載 根應用程序上下文XML,這 可能包括一個bean定義爲 的LocalSessionFactoryBean,引發 所有Hibernate映射XML的負載 文件
  • DispatcherServlet的加載網頁 應用程序上下文XML

研究web.xml以確定每種情況下的順序。

還看到:

link

+0

在我的web.xml中,我只有xxxxx-servlet.xml。我沒有聲明任何其他Spring XML文件。 applicationContext.xml默認加載,沒有任何特殊的配置。我真的不知道它爲什麼在一些基於他們的位置的應用程序上工作 – chris 2010-11-22 09:17:26

+0

我正在消化這個信息,目前正在測試...我想我到東西 – chris 2010-11-22 09:23:34

+0

好吧,我很高興這個信息幫助你。 – Michel 2010-11-22 09:37:20

5

applicationContext.xml背景是父母給dispatcher-servlet.xml上下文。我不知道這是否意味着它首先被加載,但在您的情況下無關緊要:

<mvc:annotation-driven />必須在dispatcher-servlet.xml之間,因爲它屬於應用程序的Web部分。

+0

根據觀察,我不這麼認爲。我有一個web應用程序,其中位於applicationContext.xml中。事實上,如果我放入xxxxx-servlet,我只會遇到嚴重上下文錯誤。我需要這個元素,因爲我的控制器和服務器分別使用註釋@Controller和@Service進行標記 – chris 2010-11-22 09:16:08

+0

@chris如何分享確切消息和跟蹤發送異常? – Bozho 2010-11-22 11:41:52

0

你很可能得的MVC命名空間添加到應用程序上下文:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" 
> 

(其它命名空間剝離)

+0

我已經得到了這些。當我錯過這些模式時,Eclipse會自動投訴 – chris 2010-11-22 09:14:13

+0

這麼想,但我只是在檢查完整性。 – 2010-11-22 09:14:51

3

我解決我的問題!

事實證明它與加載順序或聲明<mvc:annotation-driven/>無關。

我試着在另一個Tomcat上部署我的Web應用程序,令我驚訝的是在本地主機日誌中有一個堆棧跟蹤。我有一個試錯的提示,說明與<aop:config/>衝突。但是什麼特別的衝突?

然後我在日誌文件中看到這樣的錯誤:

java.lang.ClassCastException: org.aspectj.weaver.ResolvedType$Array cannot be cast to org.aspectj.weaver.ReferenceType 

因此,我們有一個轉換異常。我GOOGLE了上面的確切的錯誤,並發現這一點:Spring 3: adding causes ClassCastException

它似乎線程啓動器和我有同樣的確切問題。所以我下載了aspectj-1.6.10.jar,但我仍然錯過了一堂課。然後它原來應該是aspectjweaver-1.6.9

我還在使用一個非常古老的aspectjweaver。它的名字沒有任何版本。問題解決了。案件結案。

順便說作爲獎勵,我手動展開的<mvc:annotation-driven/>元素,它的等效XML聲明:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="order" value="0" /> 
</bean> 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 

他們是完全一樣的,當你根據什麼我已經研究申報<mvc:annotation-driven/>

感謝大家幫助我。

相關問題