1

私の問題に似たこの投稿を読みましたが、問題を解決できませんでした。

基本的に、私は私の中に次のサーブレットマッピングを持っていましたweb.xml:

<servlet-mapping>
  <servlet-name>myServlet</servlet-name>
  <url-pattern>/index.html</url-pattern>
  <url-pattern>/channel1</url-pattern>
  <url-pattern>/channel2</url-pattern>
</servlet-mapping>

次のURLをマップする必要があるまで、これは完全に機能しました。

/channel1/{id}/{random_text}

{id} はオブジェクトの数値 ID 値であり、{random_text} は「親しみやすい URL」のためだけにあります。@RequestMappingコントローラーでを使用@PathVariableし、 URL から変数をプルすることで、これを機能させることができました。

ただし、新しい URL を正常にマップすることができた唯一の方法は、追加することです

<url-pattern>/</url-pattern>

web.xmlのサーブレットマッピングの一番下に。しかし、これを行うと、他のすべてのページ ( /channel1/channel2) が静的コンテンツ (css、jsp など) にアクセスせずに表示されます。No mapping found for HTTP request with URI静的ファイルのを取得します。投稿したリンクで提案されているように、マッピングのさまざまな組み合わせを試しましたが、何も機能しませんでした。どんな助けでも素晴らしいでしょう!!!

更新:コントローラーの RequestMapping は次のようになります(問題の解決に役立つ場合..):

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" })
4

3 に答える 3

3

次のURLをマップする必要があるまで、これは完全に機能しました。

/channel1/{id}/{random_text}

url-patternこれはofでカバーされ/channel1/*ます。末尾に注意してください/*。のurl-pattern/channel1、背後にある pathinfo でこれ以上何も受け入れず、正確な URL とオプションのクエリ パラメータのみを受け入れます。

于 2010-02-19T19:18:05.617 に答える
3

残りの形式で処理する場合のベスト プラクティスは、 で処理する必要があるすべての URL を のDispatcherServletような別の名前空間に保持webすることです。これにより、静的リソースが直接提供され、すべてのコントローラー URL が Dispatcher を介して渡されるようになります。は一例です..

<servlet>
    <servlet-name>web</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>namespace</param-name>
        <param-value>web</param-value>
    </init-param>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/web-servlet.xml</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>web</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>
于 2010-02-19T19:19:12.900 に答える
0

問題が何であるかを認識しました(おそらく、以前にコントローラーで @RequestMapping の設定を詳しく説明しなかった私のせいです):

web.xmlにはURLパターンがありました:

<url-pattern>/channel/*</url-pattern>

また、コントローラーで次のマッピングを使用しました。

@RequestMapping(value = { "/channel1/{id}", "/channel1/{id}/{text}" })

/channel1問題は、その部分を複製していたことです。私はランダムに(幸運にも)この問題を説明するこの投稿に出くわしました.

簡単に言えば、コントローラーのマッピングを次のように変更すると、完全に機能します。

@RequestMapping(value = { "/{id}", "/{id}/{text}" })
于 2010-02-19T21:05:37.497 に答える