Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring DefaultAnnotationHandlerMapping的工作原理_Spring_Spring Mvc - Fatal编程技术网

Spring DefaultAnnotationHandlerMapping的工作原理

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>

我对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>  
在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})