我最后一次冒险的新鲜事,现在我正试图绘制更复杂的URL,并试图让它按照Spring的文档建议的方式运行。
同样,工具是:
我要做的是匹配foo / bar / id 形式的网址,其中 id 是一个整数。我应该这样做的方式是注释我的控制器方法,如下所示:
@RequestMapping("/foo/bar/{id}")
然后在web.xml中使用它:
<url-filter>/foo/*</url-filter>
或者这个:
<url-filter>/foo/bar/*</url-filter>
然后在部署到Tomcat之后,我应该能够访问/ mycontext / foo / bar / id 。但这不起作用。
为了完整性,这里有几个变体和结果:
所有失败都来自DispatcherServlet for mycontext的错误消息,即未找到任何映射,即使所有这些消息都报告在部署时设置映射成功。由于我从正确的DispatcherServlet收到错误,这表明我的url-filter设置没问题。但是关于在部署时成功映射的消息引用了@RequestMapping注释中的任何内容,所以我不知道Spring的第一个说它没关系,然后说它不匹配。
在这里我是否对通配符有所了解?
答案 0 :(得分:1)
如果你有@RequestMapping("/foo/bar/{id}")
,那么在与DispatcherServlet的url-pattern匹配结合后会映射它。考虑一个案例,例如,url-pattern如下:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/dispatcher</url-pattern>
</servlet-mapping>
在这种情况下,只有来自客户端的调用是:/dispatcher/foo/bar/1
因此,如果您想要说@RequestMapping来回复http://<server>/<context>/foo/bar/1
,请将DispatcherServlet的url-pattern设置为/
:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>