Spring Boot 视图

1、视图概述

  由于 Spring Boot 建议使用 jar 的方式发布 web 程序。所以不建议使用 jsp 视图,也不对 jsp 视图做默认的支持。

  如果确定要使用 JSP 视图发布 Spring Boot 的应用,那么需要使用 war 的方式发布。

  Spring Boot 默认自动配置支持视图时以下的模板引擎:

  ① Thymeleaf

  ② FreeMarker

  ③ Groovy

  ④ Mustache

2、FreeMarker 模板引擎的配置

  配置流程:

  ① 在 pom.xml 导入 FreeMarker 模板引擎依赖的包

1 <!-- freemarker支持包 -->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-starter-freemarker</artifactId>
5 </dependency>
6 
7             

  ② Spring Boot 的模板引擎的默认路径是 resources/templates,所以在 resources 下创建一个 templates 文件夹。将视图页面放在里面

  

  ③ 这样 Spring Boot 就可以支持返回 freemarker 的 ftl 视图了。

 1 @RequestMapping(value="/index")
 2 public String index(Model model,HttpSession session){
 3     System.out.println("-测试插入数据-");
 4     Map<String, Object> entity=new HashMap<String, Object>();
 5     //插入数据
 6     entity.put("sname", "test3");
 7     studentService.insert(entity);
 8        //返回index就会跳到index.ftl
 9     return "index";
10 }

  ④ 根据需要可以在 resources 的 application.properties 配置文件,修改 freemarker 视图的默认属性。

  

  例如:

  在 application.properties 配置文件增加以下配置

#setting freemarker encoding
spring.freemarker.charset=UTF-8

  注意事项:

  注意 Freeamarker 的自动配置的属性类为:spring-boot-autoconfigure-1.5.4.RELEASE.jar  包的 org.springframework.boot.autoconfigure.freemarker.FreeMarkerProperties类

  freemarker 视图的默认属性配置在里面:

 1 package org.springframework.boot.autoconfigure.freemarker;
 2 
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 
 6 import org.springframework.boot.autoconfigure.template.AbstractTemplateViewResolverProperties;
 7 import org.springframework.boot.context.properties.ConfigurationProperties;
 8 @ConfigurationProperties(prefix = "spring.freemarker")
 9 public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
10     //默认的视图的存放路径
11     public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
12     //默认的前缀
13     public static final String DEFAULT_PREFIX = "";
14     //默认的后缀
15     public static final String DEFAULT_SUFFIX = ".ftl";
16     private Map<String, String> settings = new HashMap<String, String>();
17     private String[] templateLoaderPath = new String[] { DEFAULT_TEMPLATE_LOADER_PATH };
18     private boolean preferFileSystemAccess = true;
19 
20     public FreeMarkerProperties() {
21         super(DEFAULT_PREFIX, DEFAULT_SUFFIX);
22     }
23 
24     public Map<String, String> getSettings() {
25         return this.settings;
26     }
27 
28     public void setSettings(Map<String, String> settings) {
29         this.settings = settings;
30     }
31 
32     public String[] getTemplateLoaderPath() {
33         return this.templateLoaderPath;
34     }
35 
36     public boolean isPreferFileSystemAccess() {
37         return this.preferFileSystemAccess;
38     }
39 
40     public void setPreferFileSystemAccess(boolean preferFileSystemAccess) {
41         this.preferFileSystemAccess = preferFileSystemAccess;
42     }
43 
44     public void setTemplateLoaderPath(String... templateLoaderPaths) {
45         this.templateLoaderPath = templateLoaderPaths;
46     }
47 
48 }

  查看 Spring Boot 内置的 FreeMarkerProperties 类的属性,发现 application.properties 里面可以设置的属性竟然比 FreeMarkerProperties 定义的属性多,为什么呢?

  答:因为 Spring Boot 直接引用了 FreeMarker 框架原来内部定义的属性,只是在前面加一个前缀。所以导致有一些没有默认值的属性不在 FreeMarkerProperties 类里面。

3、Thymeleaf 模板引擎的配置

  配置流程

  ① 导入 Thymeleaf 的支持包

1 <!-- thymeleaf支持包 -->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-starter-thymeleaf</artifactId>
5 </dependency>

  ② Spring Boot的Thymeleaf模板引擎的默认路径是resources/templates,所以在resources下创建一个templates文件夹。将视图页面放在里面

  

  内容为:

 1 <!DOCTYPE HTML>
 2 <!-- 注意Thymeleaf模板引擎一定要引入xmlns:th="http://www.thymeleaf.org"命名空间 -->
 3 <html xmlns:th="http://www.thymeleaf.org">
 4 <head>
 5     <title>hello</title>
 6     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 7 </head>
 8 <body>
 9 <!-- ${name}用于获得Controller返回的Request的取值范围的值,${}一定要在th:开头的标签里才有效 -->
10 <p th:text="'Hello!, ' + ${name} + '!'" >3333</p>
11 </body>
12 </html>

  ③ 这样Spring Boot可以支持了返回Thymeleaf的html视图了。

1 @RequestMapping(value="/index")
2 public String index(Model model){
3     System.out.println("-测试数据-");
4     model.addAttribute("name", "张三");
5     return "index";
6 }

  ④ 根据需要可以在resources的application.properties配置文件,增加Thymeleaf视图的默认属性。

spring.thymeleaf.mode=HTML5 
spring.thymeleaf.encoding=UTF-8 
spring.thymeleaf.content-type=text/html 
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false

  注意事项: 

  具体的application-thymeleaf.properties配置文件能够配置的属性,根据自身实际的情况,可以查看spring-boot-autoconfigure-1.5.4.RELEASE.jar设置。Thymeleaf的属性类为:org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties

4、JSP 视图配置(极不推荐)

  Spring Boot在默认自动配置已经不支持JSP视图。如果非要使用JSP视图。需要我们手工配置。

  配置流程:

  ① 注意事项

  因为JSP是JavaWEB技术,依赖Servlet-API。所以如果使用jsp视图发布包格式为war包;也是因为JSP是依赖Servlet-API的,所以一定要实现一个SpringBootServletInitializer类的子类作为项目的入口,功能类似于web项目的web.xml。

  不管使用任何的模板引擎代替JSP。其实就可以认为它是类似于JSP的动态页面技术。就是将原来JSP实现的功能,换一种方式来编写。。。

5、默认读取的静态资源路径

  Spring Boot默认读取CSS、JavaScript、html、图片等静态资源的根目录为:

    classpath:/META-INF/resources/

    classpath:/resources

    classpath:/static/

    classpath:/public/

  也就是说html使用到的CSS、image等静态资源可以放到以上目录文件夹,例如:

  

  注意:具体查看org.springframework.boot.autoconfigure.web.ResourceProperties类的配置,如果要修改,在appplication.properties修改默认的路径。

 

posted @ 2019-05-15 23:06  梦在原地  阅读(562)  评论(0编辑  收藏  举报