概述
在目前的企业级应用开发中,前后端分离是趋势,但是视图层技术还占有一席之地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请求时,这个请求的处理会经过两个步骤:
- 这个请求将向服务端询问是否具备该资源的 DELETE 权限,服务端会给浏览器一个响应,服务端给浏览器的响应,Allow头信息表示服务端支持的请求方法,这个请求相当于一个探测请求,当浏览器分析了请求头宇段之后,知道服务端支持本次请求,则进入第2步。
- 发送 DELETE 请求。接下来浏览器就会发送一个跨域的DELETE请求,服务器给它一个响应,至此,一个跨域的DELETE请求完成。
无论是简单请求还是先行探测请求,前端的写法都是不变的,额外的处理都是在服务器端来完成,在传统的Java EE开发中,可以通过过滤器统一配置,而SpringBoot中对此则提供了更加简洁的解决方案。
SpringBoot实现跨域
- 创建项目,导入web依赖
- 编写控制器