SpringBoot视图层技术

SpringBoot整合jsp

  • 创建spring-boot项目
  • 引入spring-boot-web启动器
<dependency>
  		<!-- spring-boot启动器 -->
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 因为spring-boot并不推荐使用jsp,所以需要手动导入jsp引擎:
    	<!-- jstl -->
<dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jstl</artifactId>
</dependency>
    	<!-- jasper:jsp引擎 -->
<dependency>
    	<groupId>org.apache.tomcat.embed</groupId>
    	<artifactId>tomcat-embed-jasper</artifactId>
    	<scope>provided</scope>
</dependency>
    
<dependency>
		<groupId>org.eclipse.jdt.core.compiler</groupId>
		<artifactId>ecj</artifactId>
		<version>4.6.1</version>
		<scope>provided</scope>
</dependency>
  • 创建spring-boot的全局配置文件application.properties,在src/main/resources目录下
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
  • 创建controller
@Controller
public class UserController {
	
	@RequestMapping("/showUser")
	public String showUser(Model model) {
		List<User> list = new ArrayList<>();
		list.add(new User(1, "张三"));
		list.add(new User(2, "李四"));
		
		model.addAttribute("user", list);
		
		return "userList";
	}
}
public class User {
	private int id;
	private String username;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public User(int id, String username) {
		super();
		this.id = id;
		this.username = username;
	}
}
  • src/main/webapp/WEB-INF/jsp下新建jsp文件。
<body>
	<table border="1" align="center">
		<tr>
			<th>ID</th>
			<th>NAME</th>
		</tr>
		<c:forEach items="${user }" var="user">
			<tr>
				<td>${user.id }</td>
				<td>${user.username }</td>
			</tr>
		</c:forEach>
	</table>
</body>
  • 新建启动类
@SpringBootApplication
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}


SpringBoot整合Freemarker

  • 创建项目
  • 修改pom文件,添加坐标
<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>2.2.4.RELEASE</version>
  </parent>
  <groupId>com.x</groupId>
  <artifactId>08-spring-boot-view-freemarker</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <properties>
  	<java.version>1.8</java.version>
  </properties>
  
  <dependencies>
  		<!-- spring-boot启动器 -->
  	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 		<!-- freemarker启动器 -->
 	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    
  </dependencies>
</project>
  • 编写controller
@Controller
public class UserController {
	
	@RequestMapping("/showUser")
	public String showUser(Model model) {
		List<User> list = new ArrayList<>();
		list.add(new User(1, "张三"));
		list.add(new User(2, "李四"));
		
		model.addAttribute("user", list);
		
		return "userList";
	}
}
  • 编写application.properties
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
  • 利用HBulider编写视图

①因为ecplise没有freemarker插件,所以编写比较麻烦;
②freemarker文件的后缀名为:.ftl
注意:spring-boot要求模板形式的视图层技术的文件,必须放置在src/main/resources/templates,且必须叫templates

<html>
	<head>
		<title>展示用户信息</title>
		<meta charset="utf-8"></meta>
	</head>
	<body>
		<table border="1" align="center" width="50%">
			<tr>
				<th>ID</th>
				<th>NAME</th>
			</tr>
			
			<#list user as u>
				<tr>
					<th>${u.id }</th>
					<th>${u.username }</th>
				</tr>
			</#list>
		</table>
	</body>
</html>
  • 编写启动器类


SpringBoot整合Thymeleaf

  • 创建项目
  • 修改pom文件
<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>2.1.12.RELEASE</version>
  </parent>
  <groupId>com.x</groupId>
  <artifactId>09-spring-boot-view-thymeleaf</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <properties>
  	<java.version>1.8</java.version>
  	<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
  </properties>
  
  <dependencies>
  		<!-- spring-boot启动器 -->
  	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    	<!-- thymeleaf启动器 -->
  	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    
</dependencies>
  • src/main/resources/templates,创建templates文件夹,用来存放视图文件
注意
templates:该目录是安全的,该目录下的文件是不允许外界直接访问的,意味着该目录下的文件只能通过java代码即controller等进行访问。
  • 编写controller
@Controller
public class DemoController {
	@RequestMapping("/show")
	public String getMes(Model model) {
		model.addAttribute("msg", "thymeleaf案例");
		return "index";
	}
}
  • 创建视图
    templates/index.html
<html>
<head>
<meta charset="UTF-8">
<title>Thymeleaf入门</title>
</head>
<body>
	<span th:text="${msg}"></span>
</body>
</html>
  • 编写启动器


Thymeleaf语法

  • Thymeleaf的基本使用

Thymeleaf特点:是通过其特定的语法,对html的标记做渲染。
Thymeleaf内置对象:使用#进行调用,大部分的内置对象都以s结尾,如:strings、numbers、dates等。th:text="${内置对象函数}"

  • 变量输出与字符串操作
操作符作用
th:field进行数据回显。<input type="text" name="username" th:field="${user.username}">可以进行数据修改。但是注意传递数据需要使用model.addAttribute(),页面取不到该数据。public String show(HttpServletRequest req, Model model)
th:text将某值在页面输出。<span th:text="${}"></span>
th:value将某值放入到input标签的value中。<input type="text" name="n" th:value="${}"/>
${#strings.isEmpty(key)}判断字符串是否为空,返回true;否则返回false;<span th:text="${#strings.isEmpty(Attribute的key)}"></span>
${#strings.contains(key,‘s1’)}判断字符串是否包含某个字符,包含返回true;不包含返回false。区分大小写。
${#strings.startsWith(key,‘s1’)}判断字符串是否以某个字符开头,是返回true,否则返回false。
${#strings.endsWith(key,‘s1’)}判断字符串是否以某个字符结尾,是返回true,否则返回false。
${#strings.length(key)}返回字符串的长度。
${#strings.indexof(key,‘s1’)}返回子串的索引位置,没找到返回-1。
${#strings.substring(key, index)}截取字符串,参数为1个、2个、3个。与jdk方法相同
${#strings.toUpperCase(key)}、${#strings.toLowerCase(key)}字符串转换大小写
  • 日期格式化处理

model.addAttribute(“key”,new Date());

操作符作用
${#dates.format(key)}根据浏览器默认语言进行格式化。
${#dates.format(key,‘yyy/MM/dd’)}根据自定义格式进行格式化。
${#dates.year(key)}取年
${#dates.month(key)}取月
${#dates.day(key)}取日
  • 条件判断

model.addAttribute(“sex”,“男”);
model.addAttribute(“id”,“2”);

操作符作用
th:if<span th:if="${sex} == '男' ">性别:男</span>
th:switch多分支判断。例如下:
<div th:switch="${id}">
	<span th:case="1">ID为1</span>
	<span th:case="2">ID为2</span>
</div>
  • 迭代遍历
操作符作用
th:each迭代遍历,类似java中的for(Obj : obj)。th:each="u : ${list}",例1:
th:each="u,var : ${list}"var为状态变量,可取:index(迭代器索引,从0开始)、count(迭代对象的技术,从1开始)、size(被迭代对象的长度)、even(迭代次数是偶数,布尔值)、odd(迭代次数是基数)、first(是否是第一条)、last(是否是最后一条)
th:each=“maps : ${map}”迭代map; 方法有:.value.key
例1:
<tr th:each="u : ${list}">
	<td th:text="${u.id}"></td>
</tr>
  • 域对象操作

request.setAttribute(“req”,“HttpServletRequest”);
request.getSession().setAttribute(“session”,“HttpSession”);
request.getSession().getServletContext().setAttribute(“app”,“application”);

操作符作用
th:text="${#httpServletRequest.getAttribute(‘req’)}"从request中取值。
th:text="${session.session}"从session中取值。
th:text="${application.app}"从application中取值。
  • URL表达式

URL表达式语法
基本语法:@{}
URL类型
绝对路径:
相对路径:

@Controller
public class DemoController {
	@RequestMapping("/{page}")
	public String getMes(@PathVariable String page) {
		return page;
	}
}
操作符作用
th:href<a th:href="@{http://www.baidu.com}">绝对路径</a>等同于 <a href="http://www.baidu.com">绝对路径1</a>
th:href<a th:href="@{/show}">相对路径</a>,从当前项目的根目录进行查找相应的controller。
th:href<a th:href="@{~/project2/resources-name}">相对路径1</a>,从当前服务器的根目录进行查找相应的项目下的资源。
th:href<a th:href="@{/show(key=value)}">相对路径2</a>,url参数传递。
th:href<a th:href="@{/path/{id}/show(key=value)}">相对路径3</a>,url中通过restful风格进行参数传递。
th:src
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值