SpringMVC:@RequestMapping和静态资源服务的优先级
我有控制器处理程序方法的以下映射:SpringMVC:@RequestMapping和静态资源服务的优先级,spring,spring-mvc,web-development-server,Spring,Spring Mvc,Web Development Server,我有控制器处理程序方法的以下映射: @RequestMapping(value = "login.html") public String doLogin(Model model) { return "login"; } 对于静态*.html资源,我有以下配置: public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("*.html").ad
@RequestMapping(value = "login.html")
public String doLogin(Model model) {
return "login";
}
对于静态*.html
资源,我有以下配置:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("*.html").addResourceLocations(("/static/"));
}
因此,假设我访问的是login.html
,那么哪一个将优先?
关于设计的行为的任何官方文件
添加1个背景
我想使用纯HTML+JS
查看我的应用程序。因为我不知道如何从控制器方法返回HTML(有人说这是不可能的),所以我决定使用静态资源处理程序
来提供静态HTML。但似乎我仍然必须为我的web应用程序配置一个映射到根路径/
的处理程序方法。尽管我已经在/static/
路径下放置了一个index.html
。i、 我必须有这个:
@RequestMapping(value = "/")
public String welcome(Model model) {
return "redirect:index.html"; //must prefix with "redirect:"
}
否则,当我点击http://mysite/
,我将得到一个404
错误
添加2--一些实验结果
似乎优先顺序是这样的:
请求来->控制器请求映射->如果控制器中没有有效映射,请检查静态资源处理程序->如果没有找到有效的静态资源,404,Oops
添加3-3个可能的选项来服务静态资源。
我把问题移到这里:
描述默认情况下注册的HandlerMapping
bean(即通过@EnableWebMvc
)及其优先顺序
映射URL路径时,顺序为:
带注释的控制器方法
直接查看名称
控制器bean名称
服务静态资源请求
将请求转发到默认servlet
即使您正在构建一个“纯HTML+JS”应用程序,您也可能希望将该index.HTML
转化为一个模板,并利用Spring MVC的一些特性,例如静态资源的资源处理和缓存破坏。看看。谢谢你的回答。我是Spring的新手,我不喜欢过早地跳转到Spring Boot。您能详细介绍一下如何将index.html转换成模板吗?Spring团队向经验丰富的开发人员和新手推荐Spring Boot。至于你的其他问题,我认为它们与你的第一个问题是正交的,属于一个单独的SO线程。记住,这对其他人也应该有用,不要让读者被内容和多个问题淹没。明白了。准备好单词后,我将为我的添加3
启动另一个线程。