基本上我有一个像 /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" />
所以,我的问题是:
- servlet 如何知道从
/A
的映射移动到/B
的映射。如何 func1() 被调用了吗? - 如果applicationcontext.xml直接将
/B
带入 考虑到,为什么在我从调用中删除/A
后,为什么 func1() 没有被调用(如果我从我的应用程序中调用/B/something
,它 给出一个错误。 )?
感谢任何帮助。 谢谢:)
最佳答案
spring DispatcherServlet 是一个中心组件,它将所有请求分派(dispatch)到注册的处理程序( Controller )。在您的情况下,它已映射到/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
希望有帮助。
关于java - Spring Servlet 映射困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452745/