第5章 Spring Boot的Web开发 五、Spring Boot对JSP的支持

学习目标:

Spring Boot对JSP的支持


学习内容:

尽管Spring Boot建议使用HTML完成动态页面,但也有部分Java Web应用使用JSP完成动态页面。遗憾的是Spring Boot官方不推荐使用JSP技术,但考虑到是常用的技术,本节将介绍Spring Boot如何集成JSP技术。

【例5-11】Spring Boot集成JSP技术。

1.创建Spring Boot Web应用ch5_4

在这里插入图片描述

2.修改pom.xml文件,添加Servlet、Tomcat和JSTL依赖

因为在JSP页面中使用EL和JSTL标签显示数据,所以在POM.XML文件中,除了添加Servlet和Tomcat依赖外,还需要添加JSTL依赖,具体代码如下:

<!-- 添加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>

3.设置Web应用ch5_4的上下文路径及页面配置信息

在这里插入图片描述

server.servlet.context-path=/ch5_4
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

4.创建实体类Book

在这里插入图片描述

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;
	}
}

5.创建控制器类ThymeleafController

在这里插入图片描述

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";
	}
}

6.整理脚本样式静态文件
在这里插入图片描述

7.View视图页面
在这里插入图片描述

<%@ 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; width: 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; width: 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>

8.运行
在这里插入图片描述
在这里插入图片描述


学习时间:

在这里插入图片描述


学习产出:

1、 技术笔记 1 遍
2、CSDN 技术博客 1 篇

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值