1.创建Spring Boot Web应用ch5_4
2.修改pom.xml文件,添加Servlet、Tomcat和JSTL依赖
3.设置Web应用ch5_4的上下文路径及页面配置信息
4.创建实体类Book
5.创建控制器类ThymeleafController
6.整理脚本样式静态文件
7.View视图页面
8.运行
<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>
<groupId>com.jsp</groupId>
<artifactId>SpringBoot-JSP</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<!-- 声明项目配置依赖编码格式为 utf-8 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<fastjson.version>1.2.24</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<!-- 由于commons-fileupload组件不属于Spring Boot,所以需要加上版本 -->
<version>1.3.3</version>
</dependency>
<!-- 添加Servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
<!--provided 被依赖包理论上可以参与编译、测试、运行等阶段,相当于compile, 但是在打包阶段做了exclude的动作。适用场景:例如,
如果我们在开发一个web 应用, 在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar包, 因为这个jar包已由应用服务器提供,此时我们需要使用
provided 进行范围修饰。 -->
</dependency>
<!-- 添加Tomcat依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- Jasper是Tomcat使用的引擎, 使用tomcat-embed-jasper可以将Web应用在内嵌的tomcat下运行 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- 添加JSTL依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<!-- 如果没有指定 scope值,该元素的默认值为 compile。 被依赖包需要参与到当前项目的编译,测试,打包,运行等阶段。 打包的时候通常会包含被依赖包。 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引入JSTL标签 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta charset="UTF-8">
<title>JSP测试</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/bootstrap-theme.min.css" rel="stylesheet">
</head>
<body>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">第一个基于JSP技术的Spring Boot Web应用</h3>
</div>
</div>
<div class="container">
<div>
<h4>图书列表</h4>
</div>
<div class="row">
<div class="col-md-4 col-sm-6">
<!-- 使用EL表达式 -->
<a href=""> <img src="images/${aBook.picture}" alt="图书封面"
style="height: 180px; 40%;" />
</a>
<div class="caption">
<h4>${aBook.bname}</h4>
<p>${aBook.author}</p>
<p>${aBook.isbn}</p>
<p>${aBook.price}</p>
<p>${aBook.publishing}</p>
</div>
</div>
<!-- 使用JSTL标签forEach循环取出集合数据 -->
<c:forEach var="book" items="${books}">
<div class="col-md-4 col-sm-6">
<a href=""> <img src="images/${book.picture}" alt="图书封面"
style="height: 180px; 40%;" />
</a>
<div class="caption">
<h4>${book.bname}</h4>
<p>${book.author}</p>
<p>${book.isbn}</p>
<p>${book.price}</p>
<p>${book.publishing}</p>
</div>
</div>
</c:forEach>
</div>
</div>
</body>
</html>
server.servlet.context-path=/ch5_4
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
package com.ch.ch5_4.model;
public class Book {
String isbn;
Double price;
String bname;
String publishing;
String author;
String picture;
public Book(String isbn, Double price, String bname, String publishing, String author, String picture) {
super();
this.isbn = isbn;
this.price = price;
this.bname = bname;
this.publishing = publishing;
this.author = author;
this.picture = picture;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public String getPublishing() {
return publishing;
}
public void setPublishing(String publishing) {
this.publishing = publishing;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
}
package com.ch.ch5_4.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.ch.ch5_4.model.Book;
@Controller
public class ThymeleafController {
@RequestMapping("/")
public String index(Model model) {
Book teacherGeng = new Book("9787302464259", 59.5, "Java 2实用教程(第5版)", "清华大学出版社", "耿祥义", "073423-02.jpg");
List<Book> chenHeng = new ArrayList<Book>();
Book b1 = new Book("9787302529118", 69.8, "Java Web开发从入门到实战(微课版)", "清华大学出版社", "陈恒", "082526-01.jpg");
chenHeng.add(b1);
Book b2 = new Book("9787302502968", 69.8, "Java EE框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)", "清华大学出版社", "陈恒",
"079720-01.jpg");
chenHeng.add(b2);
model.addAttribute("aBook", teacherGeng);
model.addAttribute("books", chenHeng);
return "index";
}
}
package com.ch.ch5_4;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Ch54Application {
public static void main(String[] args) {
SpringApplication.run(Ch54Application.class, args);
}
}