下面我将为大家详细讲解 "浅谈SpringMVC之视图解析器(ViewResolver)"的完整攻略,包含以下几个方面:
- 什么是ViewResolver
在Spring MVC中,ViewResolver用于将逻辑视图解析为实际视图,即将Controller层中返回的逻辑视图名(可以是JSP、Velocity等模板引擎生成的视图名称)解析为实际的可视化视图,例如JSP、HTML等。
SpringMVC为我们提供了很多种类型的视图解析器,例如InternalResourceViewResolver、VelocityViewResolver等,我们可以通过配置文件来进行切换。
- InternalResourceViewResolver
InternalResourceViewResolver是SpringMVC提供的最常用的一个视图解析器。它的作用是将逻辑视图名称解析为物理视图(JSP文件)。该解析器会自动在视图名称前面添加“/WEB-INF/views/”,并在后面添加.jsp,生成实际视图名称。
下面是一个示例:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
在上述示例中,我们通过配置InternalResourceViewResolver
,将所有的逻辑视图名称都解析为/WEB-INF/views/
目录下的.JSP文件。
- 示例1:使用InternalResourceViewResolver解析不使用后缀的逻辑视图名
下面是一个简单示例,它展示了如何使用InternalResourceViewResolver解析逻辑视图名称,但是不添加文件后缀:
@Controller
public class HomeController {
@RequestMapping(value = "/")
public String home(Model model) {
model.addAttribute("message", "Hello, World!");
return "home"; //逻辑视图名称
}
}
我们要做的就是创建一个名为“home.jsp”的JSP文件,并将其放置在WEB-INF/views文件夹中。
由于我们在Web中配置了InternalResourceViewResolver,并为JSP视图设置了前缀和后缀,因此我们的“home”字符串将被解析为“/WEB-INF/views/home.jsp”文件。
- 示例2:使用ThymeleafViewResolver使逻辑视图名带有"html"后缀的文件被解析
除了InternalResourceViewResolver
之外,SpringMVC还支持许多其他视图解析器,例如ThymeleafViewResolver。
Thymeleaf是一种流行的模版引擎,它可以渲染HTML,XML,JS,CSS和其他文本文件。下面是一个示例演示如何使用Thymeleaf渲染HTML页面:
@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public ViewResolver thymeleafViewResolver() {
final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setViewNames(new String[]{"*.html"});
return viewResolver;
}
@Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
private ITemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("/WEB-INF/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCacheable(false);
return resolver;
}
}
@Controller
public class HomeController {
@RequestMapping("/")
public String home(Model model) {
model.addAttribute("message", "Hello, World!");
return "home"; // return "home.html"
}
}
上述示例中,我们通过创建视图解析器ThymeleafViewResolver
并告知它来解析带有“.html”后缀的视图名称。然后,我们创建一个“home.html”模板并将其放置在“/ WEB-INF / templates /”目录中。最后,我们定义HomeController的方法,并返回逻辑视图名称"home"来告诉SpringMVC调用HTML文件"/ WEB-INF / templates / home.html"作为实际的视图。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈SpringMVC之视图解析器(ViewResolver) - Python技术站