特别是在Spring MVC中最重要的区别之一是ABSOLUTE和RELATIVE路径。
如您所知:
在 Spring MVC 中,您可以将视图作为String
对象ModelAndView
。
重要提示:
在这两种情况下,您都必须注意相对/绝对路径:
- 如果您
/
在视图名称的开头声明,则使用的是绝对路径。
即不管类级别 @RequestMapping
,直接将自己作为最终视图名称进行介绍。
- 如果您没有
/
在视图名称的开头声明,则您使用的是相对路径(相对于类路径),因此它附加到类级别 @RequestMapping
以构造最终视图名称。
因此,在使用 Spring MVC 时,您必须考虑上述注意事项。
示例: 1.在spring(boot)结构的文件夹中
创建两个HTML文件:
请注意,在test1.html
相对路径的情况下,类级别表现为文件夹路径。test2.html
static
@RequestMapping
--- resources
--- static
--- classLevelPath //behaves as a folder when we use relative path scenario in view names
--- test2.html //this will be used for relative path [case (2)]
--- test1.html //this will be used for absolute path [case (1)]
- 创建一个控制器类,如下所示。此示例显示了 return
String
以及相对路径和绝对路径ModelAndView
的不同情况。
@Controller
@RequestMapping("/classLevelPath")
public class TestController {
//case(1)
@RequestMapping("/methodLevelAbsolutePath1")
public String absolutePath1(Model model){
//model.addAttribute();
//...
return "/test1.html";
}
//case(1)
@RequestMapping("/methodLevelAbsolutePath2")
public ModelAndView absolutePath2(Model model){
ModelAndView modelAndView = new ModelAndView("/test1.html");
//modelAndView.addObject()
//....
return modelAndView;
}
//case(2)
@RequestMapping("/methodLevelRelativePath1")
public String relativePath1(Model model){
//model.addAttribute();
//...
return "test2.html";
}
//case(2)
@RequestMapping("/methodLevelRelativePath2")
public ModelAndView relativePath2(Model model){
ModelAndView modelAndView = new ModelAndView("test2.html");
//modelAndView.addObject()
//....
return modelAndView;
}
}
注意:
你可以通过a来指定你的视图文件的后缀ViewResolver
(例如InternalResourceViewResolver
或者spring.mvc.view.suffix=.html
在appliction.properties
Spring Boot的文件中)并且不要.html
在上面的代码中声明后缀。
最良好的问候