概述

在目前的企业级应用开发中,前后端分离是趋势,但是视图层技术还占有一席之地SpringBoot对视图层技术提供了很好的支持,官方推荐使用的模板引擎是 Thymeleaf,不过像 FreeMarker也支持,JSP 技术在这里并不推荐使用。

整合Thymeleaf

1.创建项目,导入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

至于它的相关配置也可以在application.properties里面更改

#是否开启缓存,开发时可设置为 false,默认为 true
spring.thymeleaf.cache=true
#检查模板是否存在,默认为 true
spring.thymeleaf.check-template=true 
#检查模板位置是否存在,默认为 true
spring.thymeleaf.check-template-location=true 
#模板文件编码
spring.thymeleaf.encoding=UTF-8
#模板文件位置
spring.thymeleaf.prefix=classpath:/templates/
#Content-Type配置
spring.thymeleaf.servlet.content-type=text/html
#模板文件后缀
spring.thymeleaf.suffix=.html

首先来做个很简单的案例,分别准备一个实体类和控制器

public class Book {
    private Integer id;
    private String name;
    private String author;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

@Controller
public class BookController {
    @GetMapping("/books")
    public ModelAndView books() {
        ArrayList<Book> books = new ArrayList<>();
        Book b1 = new Book();
        b1.setId(1);
        b1.setName("阿里Java开发手册");
        b1.setAuthor("小李");
        Book b2 = new Book();
        b2.setId(2);
        b2.setAuthor("小豪");
        b2.setName("重构,改善代码的既有设计");
        books.add(b1);
        books.add(b2);
        ModelAndView mv = new ModelAndView();
        mv.addObject("books",books);
        mv.setViewName("books");
        return mv;
    }
}

图片说明

整合FreeMarker

与Thymeleaf不同, FreeMarker需要经过解析才能够在浏览器中展示出来,至于案例这里就不作演示了,除了语法上的差异,功能这些都无异为渲染页面数据罢了。

整合web开发

JSON是目前主流的前后端数据传输方式,Spring MVC 中使用消息转换器 HttpMessageConverter对JSON 的转换提供了很好的支持,在 Spring Boot 中更进一步,对相关配置做了更进一步的简化。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这个依赖中默认加入了jackson-databind作为 JSON 处理器,此时不需要添加额外的JSON处理器就能返回一段JSON了。

   @GetMapping("/tojson")
    public Book book() {
        Book book = new Book();
        book.setName("小豪");
        book.setAuthor("喜欢看书");
        return book;
    }

图片说明
其实还有其它类似的json解析工具,如常见的有google的Gson,阿里的fastjson都是不错的选择,需要使用只需要导入依赖,修改转换器配置类就ok了。

CORS支持

CORS (Cross-Origin Resource Sharing)是由 W3C 制定的一种跨域资源共享技术标准,其目的就是为了解决前端的跨域请求。在 Java EE开发中,最常见的前端跨域请求解决方案是JSONP,但是JSONP只支持GET请求,这是一个很大的缺陷,而CORS则支持多种 HTTP请求方法。
当浏览器发起请求时,请求头中携带了如下信息:

Host:localhost:8080 
Origin:http://localhost:8081 
Referer:http://localhost:8081/index.html 

假如服务端支持CORS,则服务端给出的响应信息如下:

Access-Control-Allow-Origin:http://localhost:8081 
Content-Length:20 
Content-Type:text/plain;charset=UTF-8 
Date:Thu, 12 Jul 2018 12 : 51:14 GMT 

以DELETE请求为例,当前端发起一个DELETE请求时,这个请求的处理会经过两个步骤:

  1. 这个请求将向服务端询问是否具备该资源的 DELETE 权限,服务端会给浏览器一个响应,服务端给浏览器的响应,Allow头信息表示服务端支持的请求方法,这个请求相当于一个探测请求,当浏览器分析了请求头宇段之后,知道服务端支持本次请求,则进入第2步。
  2. 发送 DELETE 请求。接下来浏览器就会发送一个跨域的DELETE请求,服务器给它一个响应,至此,一个跨域的DELETE请求完成。

无论是简单请求还是先行探测请求,前端的写法都是不变的,额外的处理都是在服务器端来完成,在传统的Java EE开发中,可以通过过滤器统一配置,而SpringBoot中对此则提供了更加简洁的解决方案。

SpringBoot实现跨域

  1. 创建项目,导入web依赖
  2. 编写控制器