我对DefaultAnnotationHandlerMapping的工作方式感到困惑.
在我的web.xml中我有
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/somePath/someWork</url-pattern>
<url-pattern>/users</url-pattern>
<url-pattern>/user/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我有这样的控制器,
@RequestMapping(value="/user/adduser", method={RequestMethod.POST})
public void addAdmin(@ModelAttribute("myData") myData data) {
System.out.println("We reached adduser controller");
}
Run Code Online (Sandbox Code Playgroud)
在我有的jsp文件中
<form:form id="adduser" method="post" action="/user/adduser" commandName="myData">
Run Code Online (Sandbox Code Playgroud)
这不起作用.我得到错误没有为"/ adduser"找到处理程序映射,404为页面"/ user/adduser"
但是如果我提到的话,在.xml文件中
<url-pattern>/user/adduser</url-pattern>
Run Code Online (Sandbox Code Playgroud)
它工作,或者如果我使控制器像,
@RequestMapping(value="/adduser", method={RequestMethod.POST})
Run Code Online (Sandbox Code Playgroud)
也有效.提交页面时,它会到达正确的控制器.
我现在对@ReuqestMapping的工作方式很困惑.当一个请求来自"/ user/adduser"时,它将从哪里开始寻找合适的类和正确的方法?
ska*_*man 10
春天将匹配的pathInfo
属性HttpServletRequest
.
如果你web.xml
指定<url-pattern>/user/*</url-pattern>
,那么pathInfo
将/user
删除前缀的路径,所以@RequestMapping
必须是/adduser
.
如果web.xml
指定<url-pattern>/user/adduser</url-pattern>
,那么pathInfo
将是完整/user/adduser
路径,因此@RequestMapping
必须与之匹配.
这不是由Spring完成的,而是由servlet容器完成的,有时会让人感到有些困惑.
您可以通过使用通配符来减轻这种影响@RequestMapping
,例如
@RequestMapping(value="**/adduser", method={RequestMethod.POST})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13212 次 |
最近记录: |