java - Spring Servlet 映射困惑

标签 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 ,它 给出一个错误。 )?

感谢任何帮助。 谢谢:)

最佳答案

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/

相关文章:

java - Spring Boot应用程序的多线程问题,问题出在哪里?

java - 对 Spring 的 JSON 序列化感到困惑

java - 运行jsp后报错requested source is not available

java - 使用 JSP (JSTL) 从 Java MVC 和 JDBC 检索数据

java - 与其他字段一起上传文件

java - 使用 for 循环填充 ArrayList

java - 初始化 java 类中所有对象的简单方法

java - Spring bean messageSouce不能同时在ApplicationConfig和WebMvcConfig中

java - 无法将 Java 程序链接到 SQL 数据库

java - 无法在具有接口(interface)插件类支持(Jar 内的 Jar)的 Java 应用程序中公开自定义类