2010-11-22 13 views
6

私のweb.xmlで私は(対応するspringmvc-servlet.xmlを持っている)「springmvc」サーブレット宣言春のアプリケーションコンテキストのロード順序

<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?

私がこれを求めているのは、applicationContext.xmlに<mvc:annotation-driven/>要素を置くたびに重大なコンテキストエラーが発生するためです。しかし、springmvc-servlet.xmlにその要素を入れると、私のWebアプリケーションはうまく動作します。

なぜでしょうか?

他のweb-appでは、applicationContext.xml内に<mvc:annotation-driven/>があり、正常に動作します。

補遺: 私はAOPの存在ことがわかります:定義済みの順序はありませんweb.xmlファイルを除き、アノテーション・ドリブン

+0

例外スタックトレースをご質問にコピーしてください。 applicationContext.xmlにmvcネームスペースのxsdを定義しましたか? – MarrLiss

+0

スタックトレースはありません。私はTomcatからの典型的な重大コンテキストエラーのみを取得します。 – chris

答えて

0

:コンフィグはMVCに対する葛藤をもたらします。 これが起こる:

  • のweb.xmlは、サーブレットエンジンによってロードされ、これは、定義されているすべてのサーブレット、フィルタ、リスナー、
  • の負荷をトリガーするのContextLoaderListenerが ルートアプリケーションコンテキストXMLをロードし、この が含まれる場合があります すべてのHibernateマッピングXMLのロード ファイルをトリガ LocalSessionFactoryBeanのBean定義、
  • のDispatcherServletはウェブ アプリケーションコンテキストXMLをロードし

それぞれの場合の順序を決定するためにweb.xmlを調べます。

も参照してください。

link

+0

web.xmlにはxxxxx-servlet.xmlしかありません。私は他のSpring XMLファイルを宣言しませんでした。 applicationContext.xmlはデフォルトで特別な設定なしでロードされます。私は実際に彼らの場所に基づいていくつかのアプリで動作する理由を知っていません – chris

+0

私はこの情報を消化して現在テスト中です...私は何かに入っていると思います – chris

+0

大丈夫、この情報があなたを助けてくれることを嬉しく思っています。 – Michel

5

applicationContext.xmlコンテキストがdispatcher-servlet.xmlコンテキストの親です。最初にロードされたかどうかはわかりませんが、アプリケーションのWebパーツに属しているため、

<mvc:annotation-driven />dispatcher-servlet.xmlである必要があります。

+0

観察に基づいて、私はそうは思わない。私は、がapplicationContext.xmlにあるweb-appを持っています。実際、xxxxxサーブレットを置くと、重大なエラーが発生します。コントローラとサービサーはそれぞれ@Controllerと@Serviceの注釈を使ってマークされているので、その要素が必要です – chris

+0

@chrisサーブ例外の正確なメッセージとトレースを共有するのはどうですか? – Bozho

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

+0

そうだと思いますが、完全性のためにチェックしていました。 –

3

私は私の問題を解決しました!

ロード順や、<mvc:annotation-driven/>が宣言されている場所とは関係ありません。

web-appを別のTomcatにデプロイしようとしましたが、驚いたことに、localhostログにスタックトレースがあります。試行錯誤して、矛盾が<aop:config/>であるというヒントがありました。しかし、何が特別な競合ですか?

それから私は、ログファイルにこのエラーを見た:

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

だから我々は、キャスト例外があります。私は、上記の正確なエラーを検出し、これを見つけた:Spring 3: adding causes ClassCastException

それはスレッドスターターと私は同じ正確な問題があります。だから私はaspectj-1.6.10.jarをダウンロードしましたが、まだクラスがありませんでした。それから、それはでなければならないことが分かります。aspectjweaver-1.6.9

私はまだ非常に古いaspectjweaverを使用していました。その名前にはバージョンはありませんでした。問題が解決しました。ケースが閉まった。ボーナスとしてところで

、私は手動でそれに相当するXML宣言に <mvc:annotation-driven/>要素をアンロールしました:

<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/>を宣言するとき、彼らはまったく同じです。

私を助けてくれた皆様に感謝します。