关于 java:”No mapping found for HTTP request” 当我更改 DispatcherServlet 的路径时

 2022-01-08 

"No mapping found for HTTP request" when I change the path for DispatcherServlet

我在 Spring MVC 中迈出了第一步,我可能遗漏了一些东西,因为这对我来说没有意义:

我从 mvn-basic spring 示例开始,并让它运行。然后我想看看我是否可以让它在子路径上工作,以便我可以将它与我拥有的遗留代码一起使用。我做了以下更改:

在 servlet-context.xml:

1
2
-   <mvc:view-controller path="/" view-name="welcome"/>
+   <mvc:view-controller path="/web/" view-name="welcome"/>

在 AccountController.java 中:

1
2
-@RequestMapping(value="/account")
+@RequestMapping(value="/web/account")

在 web.xml:

1
2
-       <url-pattern>/</url-pattern>
+       <url-pattern>/web/*</url-pattern>

我还增加了对 DEBUG 的日志记录。我重建并尝试运行,但尝试访问 http://localhost:8080/web/account 导致 404,并且在日志中"未找到映射",即使在日志的前面我可以看到"映射的 URL 路径 [/ web/account] 到处理程序'accountController'"。

我发现如果我撤消对 web.xml 的更改,一切正常,但随后 DispatcherServlet 接管了所有请求。

所以我有两个问题:

  • 我究竟做错了什么?如何将 DispatcherServlet 限制在站点的某个子部分?
  • 它最初是如何工作的?该演示似乎只向 DispatcherServlet 发送对"/"的请求,那么"/account"为什么也可以工作?
  • 我正在使用 Spring 3.0.5.RELEASE

    更新:解决方案是将请求映射保留在原处,谢谢@axtavt。否则 URL 变为 http://localhost:8080/web/web/account(注意重复的 /web)。不过,我仍然想回答我的第二个问题。


    你实际上不需要做任何修改

    在 servlet-context.xml 中:

    web.xml:

    如果您希望您的路径为"/web/account",那么您的请求映射将为

    @RequestMapping(value="/web/account")

    如果您在调用视图时已经在 web(例如 http://localhost/urproject/web/currentpage)目录中,则需要使用"帐户"调用它
    如果您的目录不在网络中(例如 http://localhost/urproject/currentpage),则使用"/web/account"

    调用它

    希望对你有帮助


    使用此设置:

    1
     <url-pattern>/web/*</url-pattern>

    1
     <mvc:view-controller path="/web/" view-name="welcome"/>

    1
      @RequestMapping(value="/web/account")

    可访问的 URL 是:

    http://localhost:8080/web/web/ --> 定义为视图控制器配置
    http://localhost:8080/web/web/account --> 控制器请求映射中定义的

    如果您只想以 /web/account 的身份访问帐户页面,请将您的请求映射重新定义为:

    1
    @RequestMapping(value="/account")