基本上我有一个像/A/B/something
这样的映射,其映射给出为:
@Controller
@RequestMapping("/B")
public class BController {
...
@RequestMapping(value = "/something", method = RequestMethod.POST)
public ModelAndView func1()....
func1()被调用。 在web.xml中,仅为A给出定义。 所以它类似于:
<servlet>
<servlet-name>A</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>A</servlet-name>
<url-pattern>/A/*</url-pattern>
</servlet-mapping>
在applicationcontext.xml中,有这个BController的组件扫描。
<context:component-scan base-package="BController" />
所以,我的问题是:
/A
的映射转移到/B
的映射。怎么样
是func1()
被叫? /B
考虑一下,为什么在我从调用中删除/A
后没有调用func1()如果我从我的应用程序中调用/B/something
,它
给出错误。 )?感谢任何帮助。 谢谢:))
答案 0 :(得分:2)
spring DispatcherServlet是一个中心组件,它将所有请求分派给已注册的处理程序(控制器)。在您的情况下,它已映射到/ A相对路径:
<url-pattern>/A/*</url-pattern>
上面的行基本上告诉web容器,每个以/ A开头的请求都应该由spring DispatcherServlet处理。从这一点开始,它可以由Spring来处理映射。
@RequestMapping("/B")
上面的行加起来就是DispatcherServlet,所以到目前为止它映射到/ A / B
@RequestMapping(value = "/something")
与上一个请求映射类似,上面的行总计为类级别映射,因此最终将使用以下调用调用方法func1:
POST <yourhost>/A/B/something
希望有所帮助。