SpringMVC:@RequestMapping和静态资源服务的优先级

时间:2015-12-04 09:22:26

标签: 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").addResourceLocations(("/static/"));
}

假设我正在访问login.html,哪一个会优先考虑? 有关by-design行为的任何官方文件?

ADD 1一些背景

我想使用纯HTML+JS来查看我的应用程序。由于我不知道如何从控制器方法返回HTML(有人说不可能),我决定使用static resource handler提供静态HTML。但似乎我仍然必须为我的Web应用程序配置映射到根路径/的处理程序方法。虽然我已经在index.html路径下放置了/static/。即,我必须有这个:

@RequestMapping(value = "/")
public String welcome(Model model) {
    return "redirect:index.html"; //must prefix with "redirect:"
}

否则,当我点击http://mysite/时,我会收到404错误。

ADD 2 - 一些实验结果

似乎优先级是这样的:

  

请求来了 - >控制器请求映射 - >如果控制器中没有有效的映射,请检查静态资源处理程序 - >如果找不到有效的静态资源,404,糟糕......

ADD 3 - 提供静态资源的3种可能选项。

我把问题转到了这里:

Static resource serving in SpringMVC

1 个答案:

答案 0 :(得分:1)

The WebMvcConfigurationSupport Javadoc描述默认情况下注册的HandlerMapping bean(即@EnableWebMvc)及其优先顺序。

映射URL路径时,顺序为:

  1. 带注释的控制器方法
  2. 直接查看姓名
  3. 控制器bean名称
  4. 提供静态资源请求
  5. 将请求转发到默认servlet
  6. 即使你正在建立一个纯粹的HTML + JS"应用程序,您可能希望将index.html转换为模板,并利用一些Spring MVC功能,例如资源处理和缓存清除等静态资源。看看this Devoxx talk