【问题标题】:Configuring DispatcherServlet for REST style URLs为 REST 样式 URL 配置 DispatcherServlet
【发布时间】:2012-02-27 11:24:58
【问题描述】:

我正在尝试学习 Spring MVC 基础知识,但在将 URL 解析为控制器的方式方面存在问题。我正在使用这个tutorial 作为跳板。我可以让它在 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 执行此操作的最佳方法是什么?

【问题讨论】:

    标签: jsp spring-mvc spring-annotations


    【解决方案1】:

    试试这个:

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

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

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

    【讨论】:

    • 选择了 /,现在一切正常。
    【解决方案2】:

    尝试使用 /*

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        • 2014-10-17
        • 2017-10-06
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        相关资源
        最近更新 更多