3

这与这个问题非常相似,但我只是不知道如何匹配 url 模式。

网页.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 元素更改为以下内容。一个斜杠没有星号

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

发生的情况是,首先 servlet 容器将请求的 URL 匹配到模式中,然后它调用 Spring 的 DispatcherServlet,它分派到正确的控制器。

当你有斜杠 + 星号时,/*URI 的片段/activate/123456789被匹配,它为 DispatcherServlet 找到控制器留下空字符串。

当您有单斜杠时,/servlet 容器仅匹配斜杠,从而使字符串/activate/123456789由 DispatcherServlet 匹配;使用此字符串,DispatcherServlet 能够找到控制器。

于 2013-03-28T14:30:46.867 回答
1

我见过的所有请求映射都使用了前导斜杠。你试过这个:@RequestMapping("/activate/{key}")

于 2013-03-28T14:14:05.433 回答