"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 接管了所有请求。
所以我有两个问题:
我正在使用 Spring 3.0.5.RELEASE
更新:解决方案是将请求映射保留在原处,谢谢@axtavt。否则 URL 变为 http://localhost:8080/web/web/account(注意重复的
你实际上不需要做任何修改
在 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") |