0

我正在尝试学习 Spring MVC 基础知识,并且在将 URL 解析为控制器的方式方面存在问题。我正在使用本教程作为跳板。我可以让它在 tomcat 下正常运行,并且 url /context/welcome.htm 解析为这样注释的控制器:

@Controller
@RequestMapping("/welcome")
public class HelloWorldController

web.xml 配置使用

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

我希望能够输入 /context/welcome 并解析 HelloWorldController 但这不起作用。我尝试设置 * 但这会导致 servlet 无法加载。如果有人能解释为什么这个 url 模式无效,以及如何配置这个控制器来处理所有请求,比如 /welcome 和 /welcome 而不仅仅是那些以 *.htm 结尾的请求,那将不胜感激。在 ASP.NET MVC 中,提供了一个路由页面来调试此类控制器映射问题。使用 Spring 执行此操作的最佳方法是什么?

4

3 回答 3

5

尝试这个 :

<servlet-mapping>
   <servlet-name>mvc-dispatcher</servlet-name>
   <url-pattern>/*</url-pattern>
</servlet-mapping>

模式 /* 将把所有东西都通过你的 servlet。

模式 / 使您的 servlet 成为应用程序的默认 servlet,这意味着它将选择没有另一个完全匹配的每个模式。

于 2012-02-05T20:04:44.557 回答
1

使用现有代码,您可以通过将请求映射更改为 RequestMapping("/welcome.htm") 来解决,因为您已经在 servlet 映射中创建了 .htm。我们希望我们的应用程序 url 应该是怎样的。制作 / 的其他建议也将起作用,不同之处在于 /* 允许您点击的任何 url 模式,但 *.htm 限制其他模式被解决。

我不认为 js 或 css 会因此出现问题,因为 js 和 css 不依赖于 spring dispatcher servlet。js 和 css 可以在没有 servlet 的情况下嵌入。考虑一个独立的 html 有 js 和 css,它只需要服务器的上下文而不是 servlet

于 2012-02-25T01:55:15.640 回答
0

尝试使用 /*

您的其他模式无效,因为它不符合 serlvet 规范中指定的要求:https ://jira.sakaiproject.org/secure/attachment/16135/servlet-2_4-fr-spec.pdf

使用它时可能遇到的一个问题是对 js 文件和 css 文件的请求是通过调度程序路由的。您将需要设置 spring 以忽略对这些文件的请求。

于 2012-02-05T20:09:28.570 回答