第三章Spring Boot集成视图层

1 概述

本章节主要讲述如何使用Spring Boot集成jsp、freemarker、thymeleaf视图层技术,并着重介绍thymeleaf相关语法

2 集成JSP

2.1 创建maven项目

在这里插入图片描述
在这里插入图片描述

2.2 修改jdk版本

SpringBoot 2.0以后的版本使用的是jdk 1.8.
SpringBoot 2.0 以前的版本使用jdk1.7
可以通过修改pom文件来修改jdk版本
在这里插入图片描述

2.3 添加Spring Boot启动器及jsp相关依赖

在这里插入图片描述

2.4 创建Spring Boot配置文件

在这里插入图片描述

2.5 创建Controller

package com.liulg.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.liulg.pojo.Info;

@Controller
public class InfoController {
	@RequestMapping("show")
	public String showInfo(Model model){
		List<Info> list = new ArrayList<>();
		list.add(new Info(1,"abc","a'"));
		list.add(new Info(2,"def","d'"));
		list.add(new Info(3,"ghi","g'"));
		model.addAttribute("list", list);
		return "showList";
	}
}

2.6 创建jsp页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<table>
		<c:forEach items="${list }" var ="info">
			<tr><td>${info.id}</td><td>${info.name}</td><td>${info.type}</td></tr>
		</c:forEach>
	</table>
</body>
</html>

2.7 创建启动类

package com.liulg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

2.8 运行结果

在这里插入图片描述

3 集成Freemarker

3.1 创建maven项目

在这里插入图片描述

3.2 添加Spring Boot启动器和Freemarker依赖

在这里插入图片描述

3.3 创建视图

注意:Spring Boot规定模板形式的视图层文件必须放到src/main/resources/templates文件夹下,templates文件夹为手动创建,不能该更文件夹名称。

freemarker模板文件的后缀名为.ftl

<html>
	<head>
		<title>展示数据</title>
		<meta charset="utf-8"></meta>
	</head>
	<body>
		<table>
			<#list list as info>
				<tr><td>${info.id}</td><td>${info.name}</td><td>${info.type}</td></tr>
			</#list>
		</table>
	</body>
</html>

3.4 创建Controller

package com.liulg.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.liulg.pojo.Info;

@Controller
public class InfoController {
	@RequestMapping("show")
	public String showInfo(Model model){
		List<Info> list = new ArrayList<>();
		list.add(new Info(1,"第一","一"));
		list.add(new Info(2,"第二","二"));
		list.add(new Info(3,"第三","三"));
		model.addAttribute("list", list);
		return "showList";
	}
}

3.5 创建启动类

package com.liulg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

3.6 运行结果

在这里插入图片描述

4 集成Thymeleaf

4.1 创建maven项目

在这里插入图片描述

4.2 添加Spring Boot启动器及Thymeleaf依赖

在这里插入图片描述

4.3 创建Controller

package com.liulg.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
	@RequestMapping("show")
	public String showInfo(Model model){
		model.addAttribute("msg","Hello World");
		return "index";
	}
}

4.4 创建视图

创建src/main/resources/templates文件夹。
注意:该目录是安全的,该目录下的内容不允许直接访问。因为该目录下的模板文件必须经过数据渲染后才能展示。

Thymeleaf是通过特定语法对html的标记做渲染,所以thymeleaf文件的后缀名称是html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Thymeleaf</title>
</head>
<body>
	<span th:text="${msg}"></span>
</body>
</html>

4.5 运行结果及注意事项

在本地运行时,能够进入到Controller,但是一直无法跳转到页面,显示404错误,后来在另一台机子上,清除本地maven库之后,重新运行,就可以正常跳转了。根据网上的资料显示,SpringBoot 1.x没有这个问题,这个问题是SpringBoot2.x内部集成Thymeleaf导致的,解决办法就是清除本地maven库。

4.6 常用基本语法介绍

  • th:text 在页面中输出值
  • th:value 将值赋值给input标签的value属性
  • ${#strings.isEmpty(key)} 判断字符串是否为空,为空返回true,否则返回fasle
  • ${#strings.contains(str,’T’)} 判断字符串是否包含指定子串,包含返回true,否则返回false
  • ${#strings.startWith(str,’T’)} 判断字符串是否以子串开头
  • ${#strings.endWith(str,’T’)} 判断字符串是否以子串结尾
  • ${#strings.length(str)} 返回字符串长度
  • ${#strings.indexOf(str,’T’)} 查找子串的位置,并返回子串的下标,如果没有找到返回-1
  • ${#strings.subString(str,start)} 从下标13开始截取字符串
  • ${#strings.subString(str,start,end)} 从下标13开始截取到下标15之前,包含13不包含15.
  • ${#strings.toUpperCase(str)} 将字符串转成大写
  • ${#strings.toLoweCase(str)} 将字符串转成小写
  • ${#dates.format(key)} 格式化日期,以浏览器默认语言为格式标准
  • ${#dates.format(key,’yyyy/MM/dd’)} 按照给定的格式格式化日期
  • ${#dates.year(key)} 取年
  • ${#dates.month(key)} 取月
  • ${#dates.day(key)} 取日

4.7 条件判断

4.7.1 th:if

	<span th:if="${sex}==''">
		性别:男
	</span>
	<span th:if="${sex}==''">
		性别:女
	</span>

4.7.2 th:switch

<div th:switch="${id}">
	<span th:case="1">ID为1</span>
	<span th:case="2">ID为2</span>
	<span th:case="3">ID为3</span>
</div>

4.8 迭代遍历

4.8.1 th:each迭代List

package com.liulg.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.liulg.pojo.Info;

@Controller
public class UserController {
	@RequestMapping("show")
	public String showInfo(Model model){
		List<Info> list = new ArrayList<>();
		list.add(new Info(1,"第一","一"));
		list.add(new Info(2,"第二","二"));
		list.add(new Info(3,"第三","三"));
		model.addAttribute("list", list);
		return "showList";
	}
}
<table>
	<tr th:each="info : ${list}">
		<td th:text="${info.id}"></td>
		<td th:text="${info.name}"></td>
		<td th:text="${info.type}"></td>
	</tr>
</table>

4.8.2 th:each 状态变量

<table>
	<tr th:each="info ,var : ${list}">
		<td th:text="${info.id}"></td>
		<td th:text="${info.name}"></td>
		<td th:text="${info.type}"></td>
		<td th:text="${var.index}"></td>
		<td th:text="${var.count}"></td>
		<td th:text="${var.size}"></td>
		<td th:text="${var.even}"></td>
		<td th:text="${var.odd}"></td>
		<td th:text="${var.first}"></td>
		<td th:text="${var.last}"></td>
	</tr>
</table>
  1. index:当前迭代器的索引
  2. count:当前迭代对象的计数,从1开始
  3. size:被迭代对象的长度
  4. even/odd:布尔值,当前循环是奇数还是偶数,从0开始
  5. first:当前循环是否是第一条。如果是返回true,否则返回false
  6. last:当前循环是否是最后一条。如果是返回true,否则返回false

4.8.3 th:each迭代Map

	@RequestMapping("show")
	public String showInfo(Model model){
		Map<String,Info> map= new HashMap<String,Info>();
		map.put("i1",new Info(1,"第一","一"));
		map.put("i2",new Info(2,"第二","二"));
		map.put("i3",new Info(3,"第三","三"));
		model.addAttribute("list", map);
		return "showList";
	}
<table>
	<tr th:each="maps :${map}">
		<td th:each="entry:${maps}" th:text="${entry.value.id}">
		<td th:each="entry:${maps}" th:text="${entry.value.name}">
		<td th:each="entry:${maps}" th:text="${entry.value.id}">
	</tr>
</table>

4.9 域对象操作

4.9.1 HttpServletRequest对象

request.setAttribute("req", "HttpServletRequest");
 <span th:text="${#httpServletRequest.getAttribute('req')}"></span>

4.9.2 HttpSession对象

request.getSession().setAttribute("sess", "HttpSession");
<span th:text="${session.sess}"></span>

4.9.3 Application对象

request.getSession().getServletContext().setAttribute("app", "Application");
<span th:text="${application.app}"></span>

4.10 URL表达式

  • th:href
  • th:src

4.10.1 语法

基本语法:@{}

4.10.2 URL类型

4.10.2.1 绝对路径
<a th:href="@{http://www.baidu.com}">绝对路径</a>
4.10.2.2 相对路径
  • 相对于当前项目的根
<a th:href="@{/show}">相对路径</a>
  • 相对于服务器的根
<a th:href="@{~/project2/resourcename}">相对路径</a>

4.10.3 在url中传递参数

<a th:href="@{/show (id=1,name=lisi)}">相对路径</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值