2016-04-06 17 views
1

をマッピングされていない、私はこのようにweb.xmlに私のディスパッチャサーブレットのURLマッピングを定義した:Spring MVCのは、なぜ私のコントローラは

<servlet-mapping> 
<servlet-name>dispatcher</servlet-name> 
<url-pattern>*.do</url-pattern> 
<url-pattern>/data/*</url-pattern> 
</servlet-mapping> 

私のコントローラのメソッドがでアノテートされています

@RequestMapping(value="/data/sys/CodeCatalogs") 

私が要求したとき私はこれへのマッピングを変更した場合、ブラウザ内のURLは、私は、404エラーを得た:

@RequestMapping(value="/sys/CodeCatalogs") 

完全なURL:

http://localhost:8080/cwe/data/sys/CodeCatalogs 

なぜですか?私は春のmvcに新しいです、助けてください。

私は、ワイルドカードを含まないURLテスト:

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.do</url-pattern> 
    <url-pattern>/data/*</url-pattern> 
    url-pattern>/test/foo</url-pattern> 
    </servlet-mapping> 

、この要求のマッピングは作品になります。

@RequestMapping(value="/test/foo") 
+0

も同様 –

答えて

0
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.do</url-pattern> 
    <url-pattern>/data/*</url-pattern> 
</servlet-mapping> 

、と/データおよび.doというディスパッチャという名前のDispatcherServletインスタンスによって処理される*で終わるもの始まるすべてのリクエスト。コントローラのメソッドがで注釈されているためので

@RequestMapping(value="/data/sys/CodeCatalogs") 

http://localhost:8080/cwe/data/sys/CodeCatalogs - Does not match 
http://localhost:8080/cwe/data/data/sys/CodeCatalogs - Does matches 

URLをブラウザから渡しは、最初のURLの指定されたパターンと 、その後@RequestMappingで指定されたURLと照合されます。

@RequestMapping(value="/test/foo") 

http://localhost:8080/cwe/test/foo - Matches since URL matches the exact pattern which is allowed as per Servlet Specification. 
http://localhost:8080/cwe/data/test/foo - This will also match because of pattern /data/* 
1

フォーム/data/sys/CodeCatalogsの着信要求については、お使いのサーブレットコンテナが/data/部分を消費しますがあなたのSpringサーブレットにパターンを渡す前に。コントローラーは/sys/CodeCatalogsを受け取るので、これはあなたの2番目の@RequestMappingが機能し、最初のコントローラーが動作しない理由です。前述の例で

+0

が、これはサーブレット仕様やSpring MVCのマニュアルで指定されたURLを提供します:コントローラのメソッドについては

がでアノテートされましたか? – WestFarmer

+0

見てください[ここ](http://stackoverflow.com/questions/23153778/tomcat-web-xml-documentation)。 –

関連する問題