这与this问题非常相似,但我无法弄清楚如何匹配网址模式。
的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。
那么,我该如何映射这个网址模式?
答案 0 :(得分: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说的一样,您应该将此配置与完整网址(@RequestMapping(value = {"/activate/{key}"}
)一起使用:
<url-pattern>/</url-pattern>
答案 1 :(得分:2)
将url-pattern元素更改为以下内容。 单个斜杠,没有星号:
<url-pattern>/</url-pattern>
首先,servlet容器将请求的URL与模式匹配,然后调用Spring的DispatcherServlet,它将调度到正确的控制器。
当您使用斜杠+星号/*
时,URI /activate/123456789
的片段会匹配,这会让DispatcherServlet的空字符串找到控制器。
当你有一个斜杠/
时,只有斜杠与servlet容器匹配,这使得字符串/activate/123456789
与DispatcherServlet匹配;使用此字符串,DispatcherServlet能够找到控制器。
答案 2 :(得分:1)
我见过的所有请求映射都使用了一个前导斜杠。你试过这个: @RequestMapping( “/激活/ {键}”)