配置视图解析器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置视图解析器相关的知识,希望对你有一定的参考价值。

参考技术A

spring内置的 ViewResolver 实现.

注意:此时 DispatcherServlet 的 url-pattern 配置为 / , 否则可能无法访问jsp文件.

使用JSTL标签, 则指定 InternalResourceViewResolver 的 viewClass 属性为 org.springframework.web.servlet.view.JstlView .
即添加如下配置:

注: JSTL全称为JavaServer Pages Standard Tag Library.

标签示例:

标签示例:

它的作用是定义视图布局, 即提供公共的页面部分. 现用Apache Tiles3. 了解.

注:Thymeleaf与spring的集成由Thymeleaf负责, 所以要引入相应的依赖.

注: 如果没有这个依赖, 会提示 org.springframework.ui.freemarker.FreeMarkerCofigurationFactory 找不到异常.

SpringMVC--07 视图解析器&整合freemarker

8 视图解析器

我们可以使用视图解析器来对我们访问的一个url进行优化

SpringMVC默认为我们提供了一套视图解析器InternalResourceViewResolver,该视图解析器默认是支持JSP的,我们也可以去使用其他的模版引擎

8.1 配置文件

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <!--前缀,一般用来设置模版引擎的公共目录-->
  <property name="prefix" value="/views/"/>
  <!--后缀,就是模版引擎的后缀名-->
  <property name="suffix" value=".jsp"/>
</bean>

8.2 Java配置文件

@Bean
public ViewResolver viewResolver() {
  // 通过构造器设置前缀和后缀
  return new InternalResourceViewResolver("/views/", ".jsp");
}

9 整合Freemarker模版引擎

Freemarker模版引擎和JSP一样可以支持我们去操作前端页面,但是freemarker操作的前端文件是.ftl文件

9.1 导入依赖

Spring对第三方整合需要使用的上下文扩展包spring-context-support

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>5.2.12.RELEASE</version>
</dependency>

Freemarker的包

<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
  <version>2.3.28</version>
</dependency>

9.2 XML配置文件

我们可以通过XML配置文件来配置俩个bean,第一个bean是配置的SpringMVC的视图解析器,这里使用FreeMarkerViewResolver这个视图解析器。第二个bean是freemarker的配置文件

<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  <!--模版引擎渲染后的页面的编码-->
  <property name="contentType" value="text/html;charset=utf-8"/>
  <!--一般文件以.ftl结尾-->
  <property name="suffix" value=".ftl"/>
</bean>

<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  <!--相当于前缀-->
  <property name="templateLoaderPath" value="/WEB-INF/ftl"/>
  <!--配置编码属性-->
  <property name="freemarkerSettings">
    <props>
      <!--FreeMarker文件里面编码-->
      <prop key="defaultEncoding">UTF-8</prop>
    </props>
  </property>
</bean>

9.3 Java配置文件

同样的俩个bean我们也可以选择Java配置文件的方式来配置

@Bean
public ViewResolver viewResolver() {
  // 实例freemarker视图解析器
  FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
  // 设置ContentType
  viewResolver.setContentType("text/html;charset=utf-8");
  // 设置后缀
  viewResolver.setSuffix(".ftl");
  // 直接返回bean,这里不需要设置前缀,因为还有一个bean需要配置
  return viewResolver;
}

@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
  // 实例freemarker配置类
  FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
  // 使用properties来存放配置数据
  Properties properties = new Properties();
  // 添加配置文件中默认字符
  properties.setProperty("defaultEncoding", "UTF-8");
  // 添加配置文件
  configurer.setFreemarkerSettings(properties);
  // 设置模版的路径,其实就是前缀
  configurer.setTemplateLoaderPath("/WEB-INF/ftl");
  // 返回bean
  return configurer;
}

9.4 测试

ftl文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
${name}
</body>
</html>

Java:

@GetMapping("/free")
public ModelAndView freeMarker(ModelAndView modelAndView){
  modelAndView.addObject("name","感谢!");
  modelAndView.setViewName("FreeMarkerDemo");
  return modelAndView;
}

以上是关于配置视图解析器的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC--07 视图解析器&整合freemarker

SpringMVC--07 视图解析器&整合freemarker

如何在 Spring Boot 中使用注释配置视图解析器? [复制]

springMVC 配置多个视图解析器

springMVC配置jsp/html视图解析器

beetl 配置多视图解析器