3

この質問とよく似ていますが、URL パターンを一致させる方法がわかりませんでした。

web.xml:

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/activate/*</url-pattern>
</servlet-mapping>

私のコントローラー:

@RequestMapping(value = {"activate/{key}"}, method = RequestMethod.GET)
public ModelAndView activate(@PathVariable(value = "key") String key) {
  ...
}

にアクセスしようとするとlocalhost:9999/myApp/activate/123456789、次のエラーが表示されます。

No mapping found for HTTP request with URI [/myApp/activate/123456789] in DispatcherServlet with name 'dispatcher'

私も試しましたが<url-pattern>/*</url-pattern>、同じことが起こります。

ただし、エラーが表示されないように変更<url-pattern>/activate/*</url-pattern>すると <url-pattern>/**</url-pattern>、まだ 404 が表示されます。では、この URL パターンをどのようにマッピングすればよいでしょうか。

4

3 に答える 3

3

@RequestMapping次のように、にスラッシュを付ける必要があります。

@RequestMapping(value = {"/activate/{key}"}, method = RequestMethod.GET)
public ModelAndView activate(@PathVariable(value = "key") String key) {
  ...
}

とにかく、次のコンテキストにアクセスしたい場合:

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/activate/</url-pattern>
</servlet-mapping>

これを試すことはできません:

@RequestMapping(value = {"/{key}"}, method = RequestMethod.GET)
public ModelAndView activate(@PathVariable(value = "key") String key) {
  ...
}

【編集済】

Leonel が言ったように、完全な URL ( @RequestMapping(value = {"/activate/{key}"})で使用するには、この構成が必要です。

<url-pattern>/</url-pattern>
于 2013-03-28T14:16:30.647 に答える
2

url-pattern 要素を次のように変更します。スラッシュ1つ、アスタリスクなし:

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

何が起こるかというと、最初にサーブレット コンテナーが要求された URL をパターンに一致させ、次に正しいコントローラーにディスパッチする Spring の DispatcherServlet を呼び出します。

スラッシュ + アスタリスクがある場合/*、URI のスニペット/activate/123456789が一致し、DispatcherServlet がコントローラーを見つけるために空の文字列が残ります。

単一のスラッシュ がある場合/、スラッシュのみがサーブレット コンテナーによって照合され、文字列/activate/123456789は DispatcherServlet によって照合されます。この文字列を使用すると、DispatcherServlet はコントローラーを見つけることができます。

于 2013-03-28T14:30:46.867 に答える
1

私が見たすべてのリクエスト マッピングでは、先頭にスラッシュが使用されています。これを試しましたか: @RequestMapping("/activate/{key}")

于 2013-03-28T14:14:05.433 に答える