004.SpringBoot(1.5.10版本)视图层技术学习(jsp+Freemarker+Thymeleaf)

整合jsp

jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

  1. 创建项目

  2. 添加坐标
    pom.xml jsp开发需要2个坐标 jsp引擎(因为他不推荐用jsp 所以需要自己加)

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>08-spring-boot-view-jsp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- jdk1.7 -->
<properties>
<java.version>1.7</java.version>
</properties>
<dependencies>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
  1. 创建 springBoot 的全局配置文件, application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
在这里插入图片描述

  1. 创建 Controller
@Controller
public class UserController {
/*
* 处理请求, 产生数据
*/
@RequestMapping("/showUser")
public String showUser(Model model){
List<Users> list = new ArrayList<>();
list.add(new Users(1,"张三",20));
list.add(new Users(2,"李四",22));
list.add(new Users(3,"王五",24));
//需要一个 Model 对象
model.addAttribute("list", list);
//跳转视图
return "userList";}
}
  1. 创建 jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" align="center" width="50%">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr><c:forEach items="${list }" var="user">
<tr>
<td>${user.userid }</td>
<td>${user.username }</td>
<td>${user.userage }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
  1. 创建启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

整合 freemarker+配合工具HBuilder

freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便

选择它理由

1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便

  1. 修改 pom 添加坐标
    < dependencies> 内
<!-- freemarker 启动器的坐标 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 编写视图

注意: springBoot 要求模板形式的视图层技术的文件必须要放到 src/main/resources 目录下必须要一个名称为 templates

<html>
<head>
<title>展示用户数据</title>
<meta charset="utf-9"></meta>
</head>
<body>
<table border="1" align="center" width="50%">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
<#list list as user ><tr>
<td>${user.userid}</td>
<td>${user.username}</td>
<td>${user.userage}</td>
</tr>
</#list>
</table>
</body>
</html>

FreeMarker 不依赖于Servlet ,网络或Web 环境;它仅仅是通过合并模板和Java 对 象(数据模型)来生成文本输出的类库。你可以在任意地方任意时间来执行模板;

不需要HTTP 的请求转发或类似的手段,也不需要Servlet 环境。出于这些特点你可 以轻松的将它整合到任何系统中去。
在模板中没有servlet 特定的范围和其它高级技术。FreeMarker 一开始就是为MVC 设计的,它仅仅专注于展示。

你可以从任意位置加载模板;从类路径下,从数据库中等。
默认情况下,数字和日期格式是本地化敏感的。因为我们对用户输出,你所做的仅 仅是书写 x < f m t : f o r m a t N u m b e r v a l u e = " {x},而不是<fmt:formatNumber value=" {x}" />。你 也可以很容易就改变这个行为,默认输出没有本地化的数字。
易于定义特设的宏和函数。

隐藏错误并假装它不存在。丢失的变量默认会引起错误,也不会默认给任意值。而 且null-s 也不会默认视为0/false/空字符串。参见FAQ 第三点来获取更多信息。

“对象包装”允许你在模板中以自定义,面向表现的方式来展示对象。(比如:参

见XML 处理指南/必要的XML 处理/通过例子来学习部分,来看看使用这种技术时 W3C 的DOM 节点是如何通过模板展现出来的。)
宏和函数仅仅是变量(和JSP 的自定义标记工作方式来比较),就像其它任意值一 样,所以它们可以很容易的作为参数值来传递,放置到数据模型中等。 当第一次访问一个页面时几乎察觉不到的延迟(或在它改变之后),因为没有更高 级的编译发生。

FreeMarker 的缺点:
不是一个标准。很少的工具和IDE 来集成它,少数的开发者知道它,很少的工业化 的支持。(然而,如果没有使用.tag文件,JSP 标签库在FreeMarker 模板中工作 不需要改变) 因为宏和函数仅仅是变量,不正确的指令,参数名和丢失的必须变量仅仅在运行时会被检测到。

除了一些视觉上的相似性,它的语法不同于 HTML/XML 语法规则,这会使得新用

户感到混乱。(这就是简洁的价值所在) 不能和JSF 一起使用。(这在技术上可行,但是没有人来实现它)
4. 创建 Controller

@Controller
public class UserController {
/*
* 处理请求, 产生数据
*/
@RequestMapping("/showUser")
public String showUser(Model model){
List<Users> list = new ArrayList<>();
list.add(new Users(1,"张三",20));
list.add(new Users(2,"李四",22));
list.add(new Users(3,"王五",24));
//需要一个 Model 对象
model.addAttribute("list", list);
//跳转视图
return "userList";
}
}


启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}

工具HBuilder

在这里插入图片描述
写一个页面+刷新
在这里插入图片描述
取数据

<#list list as user ><tr>
<td>${user.userid}</td>
<td>${user.username}</td>
<td>${user.userage}</td>
</tr>
</#list>

整合 Thymeleaf(重点)

介绍

解决的痛点:
原本的数据获取通过JSP 页面来访问后台 ,但访问人数多了以后
第一是占用过多资源 效率变慢
第二是 有很多重复的工作了 比如看文章 只是内容不同

内容
它可以生成特定格式的文档,⽤于网站的模板引擎就会生成一个标准的 HTML 文档
数据+模板 =标准的 HTML 文档

模板引擎的实现方式有很多,最简单的是“置换型”模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(⼦字符串)替换,便生成了最终需要的业务数据(如⽹页)。
“置换型”模板引擎实现简单,但其效率低下,无法满足高负载的应⽤需求(比如有海量访问的⽹网站),因此还出现了了“解释型”模板引擎和“编译型”模板引擎等

Thymeleaf 从设计之初就遵循 Web 标准——特别是 HTML 5 标准,如果需要, Thymeleaf 允许创建完全符合HTML 5 验证标准的模板。
Spring Boot 体系内推荐使用 Thymeleaf 作为前端⻚面模板,并且 Spring Boot 2.0 中默认使用 Thymeleaf3.0,性能提升幅度很大

Thymeleaf 从设计之初就遵循 Web 标准——特别是 HTML 5 标准,如果需要, Thymeleaf 允许创建完全符合HTML 5 验证标准的模板。
Spring Boot 体系内推荐使用 Thymeleaf 作为前端⻚面模板,并且 Spring Boot 2.0 中默认使用 Thymeleaf3.0,性能提升幅度很大

特点:
可以完全替代JSP, 有网 没网都能运行
开箱即用
Thymeleaf 提供 Spring 标准⽅言和一个与 SpringMVC 完美集成的可选模块,可以快速地实现表单绑定、属性编辑器、国际化等功能
Thymelaef 是通过他特定语法对 html 的标记做渲染

入门代码

  1. pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<groupId>com.jkk</groupId>
<artifactId>10-spring-boot-view-thymeleaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.7</java.version>
</properties>
<dependencies>
<!-- springBoot 的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- springBoot thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
</project>

在这里插入图片描述

  1. 创建存放视图的目录
    目录位置: src/main/resources/templates
    templates: 该目录是安全的。 意味着该目录下的内容是不允许外界直接访问的。为可以渲染页面提供了环境

  2. 编写 Controller

/**
* Thymeleaf 入门案例
* * *
/
@Controller
public class DemoController {
@RequestMapping("/show")
public String showInfo(Model model){
model.addAttribute("msg", "Thymeleaf 第一个案例");
return "index";
}
}


创建视图 .html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Thymeleaf 入门</title>
</head>
<body>
<span th:text="Hello"></span>
<hr/>
<span th:text="${msg}"></span>
</body>
</html>

具体使用

文档:第2-3课:模板引擎 Thymeleaf 基础使?..
链接:http://note.youdao.com/noteshare?id=178dc6efd203dfc1cb6b8a6aa85a7000&sub=D28E4DFF6D1C4795BA05EC49DCEC6AF8

在有道云补充 这里就不写了…

发布了162 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39088066/article/details/103558219
今日推荐