Spring Servlet映射混乱

时间:2016-09-12 14:28:54

标签: java spring servlets

基本上我有一个像/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,它 给出错误。 )?

感谢任何帮助。 谢谢:))

1 个答案:

答案 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

希望有所帮助。