我正在尝试学习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执行此操作的最佳方法是什么?
答案 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以忽略对这些文件的请求。