Spring DefaultAnnotationHandlerMapping的工作原理
我对DefaultAnnotationHandlerMapping的工作方式感到困惑 在我的web.xml中,我有Spring DefaultAnnotationHandlerMapping的工作原理,spring,spring-mvc,Spring,Spring Mvc,我对DefaultAnnotationHandlerMapping的工作方式感到困惑 在我的web.xml中,我有 <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/somePath/someWork</url-pattern> <url-pattern>/users</url-pattern>
<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>
在jsp文件中,我有
<form:form id="adduser" method="post" action="/user/adduser" commandName="myData">
同样有效。提交页面时,它会到达正确的控制器
我现在对@ReuqestMapping的工作方式感到困惑。当请求类似于“/user/adduser”时,它将从中开始寻找正确的类和方法。Spring将与
HttpServletRequest的pathInfo
属性匹配
如果您的web.xml
指定了/user/*
,则pathInfo
将是带有/user
前缀的路径,因此@RequestMapping
必须是/adduser
如果web.xml
指定/user/adduser
,则pathInfo
将是完整的/user/adduser
路径,因此@RequestMapping
必须与之匹配
这不是由Spring完成的,而是由servlet容器完成的,有时可能会有点混乱
您可以通过在@RequestMapping
中使用通配符来缓解这种情况,例如:
@RequestMapping(value="**/adduser", method={RequestMethod.POST})
谢谢你的回复,斯卡夫曼。这给了我洞察力。另一个相关问题。在生产环境中,人们真的会像*.do这样进行映射吗?我还没有见过这样的真实例子。@kalyan:*.do
是Struts糟糕的旧时代遗留下来的东西。不过,你仍然可以在“真实”的网站上看到它。
<url-pattern>/user/adduser</url-pattern>
@RequestMapping(value="/adduser", method={RequestMethod.POST})
@RequestMapping(value="**/adduser", method={RequestMethod.POST})