SpringMVC:@RequestMapping和静态资源服务的优先级
SpringMVC: The precedence of @RequestMapping and Static Resource serving
我有以下控制器处理程序方法的映射:
@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
来查看我的应用程序。由于我不知道如何从控制器方法 return 和 HTML(有人说这是不可能的),我决定使用 static resource handler
来提供静态 HTML。但似乎我仍然需要为我的 Web 应用程序配置一个映射到根路径 /
的处理程序方法。虽然我已经在/static/
路径下放了一个index.html
。即,我必须有这个:
@RequestMapping(value = "/")
public String welcome(Model model) {
return "redirect:index.html"; //must prefix with "redirect:"
}
否则,当我点击http://mysite/
时,我会得到一个404
错误。
ADD 2 -- 部分实验结果
好像优先级是这样的:
request comes -> Controller request mapping -> If no valid mapping in controller, check static resource handler -> if no valid static resource found, 404, Oops...
添加 3 - 3 个可能的选项来提供静态资源。
我把问题移到了这里:
Static resource serving in SpringMVC
The WebMvcConfigurationSupport Javadoc 描述了默认注册的 HandlerMapping
个 bean(即 @EnableWebMvc
)及其优先顺序。
映射URL个路径时,顺序为:
- 带注释的控制器方法
- 直接查看名字
- 控制器 bean 名称
- 服务于静态资源请求
- 将请求转发到默认 servlet
即使您正在构建 "pure HTML+JS" 应用程序,您也可能希望将其 index.html
转换为模板并利用一些 Spring MVC 功能,例如资源处理和为您的静态资源清除缓存。看看this Devoxx talk.
我有以下控制器处理程序方法的映射:
@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
来查看我的应用程序。由于我不知道如何从控制器方法 return 和 HTML(有人说这是不可能的),我决定使用 static resource handler
来提供静态 HTML。但似乎我仍然需要为我的 Web 应用程序配置一个映射到根路径 /
的处理程序方法。虽然我已经在/static/
路径下放了一个index.html
。即,我必须有这个:
@RequestMapping(value = "/")
public String welcome(Model model) {
return "redirect:index.html"; //must prefix with "redirect:"
}
否则,当我点击http://mysite/
时,我会得到一个404
错误。
ADD 2 -- 部分实验结果
好像优先级是这样的:
request comes -> Controller request mapping -> If no valid mapping in controller, check static resource handler -> if no valid static resource found, 404, Oops...
添加 3 - 3 个可能的选项来提供静态资源。
我把问题移到了这里:
Static resource serving in SpringMVC
The WebMvcConfigurationSupport Javadoc 描述了默认注册的 HandlerMapping
个 bean(即 @EnableWebMvc
)及其优先顺序。
映射URL个路径时,顺序为:
- 带注释的控制器方法
- 直接查看名字
- 控制器 bean 名称
- 服务于静态资源请求
- 将请求转发到默认 servlet
即使您正在构建 "pure HTML+JS" 应用程序,您也可能希望将其 index.html
转换为模板并利用一些 Spring MVC 功能,例如资源处理和为您的静态资源清除缓存。看看this Devoxx talk.