为REST样式URL配置DispatcherServlet

时间:2012-02-05 19:53:56

标签: jsp spring-mvc spring-annotations

我正在尝试学习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执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

试试这个:

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

模式/ *会将所有内容放在您的servlet中。

模式/使您的servlet成为应用程序的默认servlet,这意味着它将获取每个没有其他完全匹配的模式。

答案 1 :(得分:1)

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

我不认为js或css会因此而产生问题,因为js和css不依赖于spring dispatcher servlet。可以嵌入js和css而无需使用servlet。考虑一个独立的html有js和css,它需要的是服务器的上下文而不是servlet

答案 2 :(得分:0)

尝试使用/ *

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

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