4

Spring MVC アプリを JBoss 7.1.1 から Wildfly 8.1 に移行していますが、古い「web」モジュールの代わりに新しい「undertow」モジュールを使用する必要がありました (推奨されましたか?)。/という注釈が付けられたコントローラー メソッドを呼び出すために使用されていた " "への要求が@RequestMapping("/")、コントローラー メソッドに到達しなくなったことを除いて、事態は順調に進んでいます。代わりに、そのようなリクエストはすぐに (リダイレクトではなく) " /index.html" に書き換えられているようです。私はそのようなファイルを持っていない (そして必要としたことがない) ため、" /" に対するすべての要求で 404 エラーが生成されます。

興味深いことに、他の @RequestMappingすべての注釈付きコントローラー メソッドは引き続き正常に機能します。

これが私のstandalone.xmlファイルからの関連するスニペットです。

<subsystem xmlns="urn:jboss:domain:undertow:1.1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" max-post-size="4194304"/>
        <host name="default-host" alias="localhost">
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config development="true"/>
    </servlet-container>
</subsystem>

Wildfly の undertow モジュールのsubsystem定義で が明示的に宣言されていないhandler場合、Wildfly はデフォルトでfileハンドラーになり、URL の書き換えに関与している可能性があると思われますが、これについては確信が持てません。

Wildfly の undertow モジュールが基づいている Undertow プロジェクトのハンドラーに関するドキュメントは、「リダイレクト」ハンドラーのサポートを示しています。予期しない「/」書き換えを回避するためにこれを使用することを検討しましたが、Wildfly の undertow モジュールがこれをサポートしているかどうか、およびサポートしている場合は で構成する方法が明確ではありませんstandalone.xml。ただし、できたとしても、ハックのように感じると思います。代わりに、問題の根本に到達することを好みます (しゃれは意図されていません)。

残念な動作を説明する SO の質問が多数あり、他のパス ( 、など)RequestMapping("/")を使用することを提案する多くの回答がありますが、既存の (変更されていない) コードは JBoss 7.1.1 で問題なく動作することを忘れないでください。(また、これらの質問のどれも、おそらくこの質問の重要な考慮事項である Wildfly について言及していません。) それにもかかわらず、私はさまざまな提案を試しましたが、どこにも行きませんでした。ディスパッチャ サーブレットに到達する前に、URL が書き換えられているように見えます。"""/index"

要約すると、私の質問は次のとおりです。

RequestMapping("/")JBoss 7.1.1 と同じように、Spring MVC アプリを Wildfly 8.1 で実行するにはどうすればよいですか?

4

1 に答える 1

3

Wildfly では、要素web.xmlがない場合<welcome-file-list>は、次のように構成したかのように、要素が提供されます。

 <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      <welcome-file>index.htm</welcome-file>
      <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

このデフォルト設定では、Wildfly が「/」のリクエストを受け取ると、パスは自動的に に書き換えられindex.htmlます。このパスは、注釈が付けられたコントローラー メソッドと一致しませんRequestMapping("/")

JBoss 7 の動作は明らかに異なります。おそらく、一致するサーブレットが見つからなかった後にウェルカム ファイル リストを参照するだけです。

<welcome-file>原因が何であれ、独自のウェルカム ファイル リストを明示的に定義し、最後の要素として空のウェルカム ファイルを含めることで、新しい動作を回避できます。

 <welcome-file></welcome-file>

これにより、Wildfly は " /" を " "に書き換える/ことができ、" " に対する要求を/サーブレット ディスパッチャで処理できるようになります (url-patternが に設定されている場合/)。次に、サーブレット ディスパッチャは、 で注釈が付けられたコントローラ メソッドを呼び出しますRequestMapping("/")

于 2014-12-10T00:56:24.373 に答える