feature/hy
heyou 3 weeks ago
parent 3d55fed611
commit 11f9269b77

@ -20,62 +20,87 @@ INSERT INTO t_user(username,`password`,email,address) VALUES('admin','admin','ad
## 查询表
SELECT * FROM t_user;
-- 创建名为t_book的表
CREATE TABLE t_book(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
`price` DECIMAL(11,2),
`author` VARCHAR(100),
`classification` VARCHAR(20),
`sales` INT,
`stock` INT,
`imgpath` VARCHAR(200)
-- 定义名为id的字段数据类型为INT整数类型将其设置为主键并且设置为自增AUTO_INCREMENT这样每插入一条新记录时该字段的值会自动按顺序递增用于为每本图书生成唯一的标识符
`id` INT PRIMARY KEY AUTO_INCREMENT,
-- 定义名为name的字段数据类型为VARCHAR可变长度字符串长度为100用于存储图书的书名信息
`name` VARCHAR(100),
-- 定义名为price的字段数据类型为DECIMAL精确数值类型总长度为11位其中小数部分占2位用于存储图书的价格信息
`price` DECIMAL(11,2),
-- 定义名为author的字段数据类型为VARCHAR长度为100用来记录图书的作者姓名
`author` VARCHAR(100),
-- 定义名为classification的字段数据类型为VARCHAR长度为20可用于存储图书的分类信息例如文学、科技等类别
`classification` VARCHAR(20),
-- 定义名为sales的字段数据类型为INT用于记录图书的销量情况
`sales` INT,
-- 定义名为stock的字段数据类型为INT用于表示图书的库存数量
`stock` INT,
-- 定义名为imgpath的字段数据类型为VARCHAR长度为200可用于存储图书封面图片的路径信息方便在应用中展示图书封面图片
`imgpath` VARCHAR(200)
);
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('解忧杂货店','东野圭吾','文学',27.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('边城','沈从文','文学',23.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('中国哲学史','冯友兰','文学',44.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('苏东坡传','林语堂','文学',19.30,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('百年孤独','马尔克斯','文学',29.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('扶桑','严歌苓','文学',19.8,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('给孩子的诗','北岛','文学',22.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('为奴十二年','所罗门','文学',16.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('平凡的世界','路遥','文学',55.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('悟空传','今何在','文学',14.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('硬派健身','斌卡','文学',31.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('从晚清到民国','唐德刚','文学',39.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('三体','刘慈欣','文学',56.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('看见','柴静','文学',19.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('活着','余华','文学',11.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('小王子','安托万','文学',19.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('我们仨','杨绛','文学',11.30,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification,price, sales , stock , imgpath) VALUES('生命不息,折腾不止','罗永浩','文学',25.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification,price, sales , stock , imgpath) VALUES('皮囊','蔡崇达','文学',23.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('恰到好处的幸福','毕淑敏','文学',16.40,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('大数据预测','埃里克','文学',37.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('人月神话','布鲁克斯','文学',55.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('C语言入门经典','霍尔顿','文学',45.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('数学之美','吴军','文学',29.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('Java编程思想','埃史尔','文学',70.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('设计模式之禅','秦小波','文学',20.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('图解机器学习','杉山将','文学',33.80,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('艾伦图灵传','安德鲁','文学',47.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales , stock , imgpath) VALUES('教父','马里奥普佐','文学',29.00,100,100,'static/img/default.jpg');
-- 向t_book表中插入一条图书数据记录指定要插入值的字段为name, author, classification, price, sales, stock, imgpath并对应给出具体的值分别为图书的书名、作者、分类、价格、销量、库存以及封面图片路径
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('解忧杂货店','东野圭吾','文学',27.20,100,100,'static/img/default.jpg');
-- 同样是向t_book表中插入图书数据记录以下每条INSERT语句的结构和作用与上面类似只是对应不同的图书信息
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('边城','沈从文','文学',23.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('中国哲学史','冯友兰','文学',44.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('苏东坡传','林语堂','文学',19.30,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('百年孤独','马尔克斯','文学',29.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('扶桑','严歌苓','文学',19.8,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('给孩子的诗','北岛','文学',22.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('为奴十二年','所罗门','文学',16.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('平凡的世界','路遥','文学',55.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('悟空传','今何在','文学',14.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('硬派健身','斌卡','文学',31.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('从晚清到民国','唐德刚','文学',39.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('三体','刘慈欣','文学',56.5,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('看见','柴静','文学',19.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('活着','余华','文学',11.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('小王子','安托万','文学',19.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('我们仨','杨绛','文学',11.30,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification,price, sales, stock, imgpath) VALUES('生命不息,折腾不止','罗永浩','文学',25.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification,price, sales, stock, imgpath) VALUES('皮囊','蔡崇达','文学',23.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('恰到好处的幸福','毕淑敏','文学',16.40,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('大数据预测','埃里克','文学',37.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('人月神话','布鲁克斯','文学',55.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('C语言入门经典','霍尔顿','文学',45.00,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('数学之美','吴军','文学',29.90,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('Java编程思想','埃史尔','文学',70.50,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('设计模式之禅','秦小波','文学',20.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('图解机器学习','杉山将','文学',33.80,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('艾伦图灵传','安德鲁','文学',47.20,100,100,'static/img/default.jpg');
INSERT INTO t_book (name, author, classification, price, sales, stock, imgpath) VALUES('教父','马里奥普佐','文学',29.00,100,100,'static/img/default.jpg');
-- 创建名为t_order的表
CREATE TABLE t_order(
`order_id` VARCHAR(50) PRIMARY KEY,
`create_time` DATETIME,
`price` DECIMAL(11,2),
`status` INT,
`user_id` INT,
FOREIGN KEY(`user_id`) REFERENCES t_user(`id`)
-- 定义名为order_id的字段数据类型为VARCHAR可变长度字符串长度为50并且将该字段设置为主键用于唯一标识每条订单记录
`order_id` VARCHAR(50) PRIMARY KEY,
-- 定义名为create_time的字段数据类型为DATETIME用于存储日期和时间信息用来记录订单创建的时间
`create_time` DATETIME,
-- 定义名为price的字段数据类型为DECIMAL精确数值类型总长度为11位其中小数部分占2位用于存储订单的价格信息
`price` DECIMAL(11,2),
-- 定义名为status的字段数据类型为INT整数类型可能用于表示订单的状态比如不同的数值对应不同的订单处理阶段等情况
`status` INT,
-- 定义名为user_id的字段数据类型为INT该字段将作为外键与另一个表t_user中的id字段建立关联关系
`user_id` INT,
-- 使用FOREIGN KEY关键字为user_id字段添加外键约束指定它参照t_user表中的id字段意味着t_order表中的user_id值必须在t_user表的id字段值中存在以此建立起两张表之间的关联通常表示订单所属的用户
FOREIGN KEY(`user_id`) REFERENCES t_user(`id`)
);
-- 创建名为t_order_item的表
CREATE TABLE t_order_item(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(100),
`count` INT,
`price` DECIMAL(11,2),
`total_price` DECIMAL(11,2),
`order_id` VARCHAR(50),
FOREIGN KEY(`order_id`) REFERENCES t_order(`order_id`)
-- 定义名为id的字段数据类型为INT整数类型并将该字段设置为主键同时设置为自增AUTO_INCREMENT这样每当插入一条新记录时该字段的值会自动按顺序递增常用于为每条记录生成唯一的标识符
`id` INT PRIMARY KEY AUTO_INCREMENT,
-- 定义名为name的字段数据类型为VARCHAR长度为100可用于存储商品名称等相关信息比如订单中具体商品的名字
`name` VARCHAR(100),
-- 定义名为count的字段数据类型为INT用于记录商品的数量比如某个商品在该订单中的购买数量
`count` INT,
-- 定义名为price的字段数据类型为DECIMAL总长度11位小数部分占2位可能用于存储单个商品的价格信息
`price` DECIMAL(11,2),
-- 定义名为total_price的字段数据类型为DECIMAL总长度11位小数部分占2位用于存储该商品的总价可能是通过商品单价乘以数量计算得出
`total_price` DECIMAL(11,2),
-- 定义名为order_id的字段数据类型为VARCHAR长度为50该字段将作为外键与t_order表中的order_id字段建立关联关系
`order_id` VARCHAR(50),
-- 使用FOREIGN KEY关键字为order_id字段添加外键约束指定它参照t_order表中的order_id字段意味着t_order_item表中的order_id值必须在t_order表的order_id字段值中存在以此建立起两张表之间的关联表明该订单项所属的订单
FOREIGN KEY(`order_id`) REFERENCES t_order(`order_id`)
);

@ -1,11 +1,6 @@
<%--
Created by IntelliJ IDEA.
User: jhu
Date: 2020/10/5
Time: 15:44
To change this template use File | Settings | File Templates.
此文件的创建信息注释,表明是由 IntelliJ IDEA 创建,作者是 jhu创建日期是 2020 年 10 月 5 日,时间是 15 时 44 分,并且提示修改此模板的相关设置路径。
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
@ -13,17 +8,21 @@
<head>
<meta charset="UTF-8">
<title>书城首页</title>
<%-- 包含公共的头部页面header.jsp可能包含一些通用的样式、脚本或者页面头部结构相关的内容方便复用。 --%>
<%@include file="/pages/common/header.jsp"%>
<script type="text/javascript">
// 当页面 DOM 加载完成后执行以下函数(这是 jQuery 的 $(function() {}) 语法的作用,相当于 DOMContentLoaded 事件的简写形式)
$(function () {
// 给加入购物车按钮绑定单击事件
// 给所有 class 为 addToCart 的 button 元素绑定单击事件(通过 jQuery 的 click 方法实现事件绑定)
$("button.addToCart").click(function () {
// 获取当前被点击按钮的 bookId 属性值(通过 jQuery 的 attr 方法获取元素的自定义属性值),这个 bookId 应该是对应书籍的唯一标识,用于后续操作。
var bookId = $(this).attr("bookId");
// 发送AJAX请求将商品添加到购物车
// 使用 jQuery 的 $.getJSON 方法发送一个 AJAX 请求,请求的 URL 是 "http://localhost:8080/Book/cartServlet",同时传递了参数 "action=ajaxAddItem&id=" 加上获取到的 bookId期望服务器返回 JSON 格式的数据。
// 并且在请求成功后的回调函数中处理返回的数据(这里回调函数接收一个 data 参数,就是服务器返回的 JSON 数据解析后的对象)。
$.getJSON("http://localhost:8080/Book/cartServlet", "action=ajaxAddItem&id=" + bookId, function (data) {
// 更新购物车商品总数
// 更新购物车商品总数的显示内容,通过 jQuery 的 text 方法将指定元素id 为 cartTotalCount 的元素的文本内容更新为包含服务器返回的商品总数data.totalCount的提示信息。
$("#cartTotalCount").text("您的购物车中有" + data.totalCount + "件商品");
// 更新购物车中最新添加的商品名称
// 更新购物车中最新添加的商品名称的显示内容,通过 jQuery 的 html 方法将指定元素id 为 cartLastName 的元素)的 HTML 内容更新为包含服务器返回的最新添加商品名称data.lastName的提示信息这里使用双引号包裹文本所以里面的文本可以包含 HTML 标签(如果有的话)。
$("#cartLastName").html("您刚刚将【" + data.lastName + "】加入到了购物车中");
});
});
@ -35,38 +34,40 @@
<img class="logo_img" alt="" src="static/img/logo1.jpg" >
<span class="wel_word">Bookstore</span>
<div>
<!-- 判断用户是否登录 -->
<!-- 使用 JSTL 的 c:if 标签判断 sessionScope 中 user 对象是否为空,以此来区分用户是否登录empty 关键字用于判断是否为空值(比如 null、空字符串等 -->
<c:if test="${empty sessionScope.user}">
<!-- 未登录状态 -->
<!-- 如果 user 对象为空,说明用户未登录,显示登录和注册链接,以及热榜链接,方便用户进行相应操作。 -->
<a href="pages/user/login.jsp">登录</a> |
<a href="pages/user/regist.jsp">注册</a> &nbsp;&nbsp;
<a href="client/bookServlet?action=pageOrder">热榜</a>
</c:if>
<c:if test="${not empty sessionScope.user}">
<!-- 已登录状态 -->
<!-- 如果 user 对象不为空,说明用户已登录,显示欢迎语以及包含用户用户名的个性化欢迎信息,同时提供我的订单、个人信息、注销等相关操作链接。 -->
<span>欢迎<span class="um_span">${sessionScope.user.username}</span>光临书城</span>
<a href="client/orderServlet?action=myOrders">我的订单</a>
<a href="pages/user/userinfo.jsp">个人信息</a>
<a href="userServlet?action=logout">注销</a>&nbsp;&nbsp;
</c:if>
<!-- 购物车和后台管理链接 -->
<!-- 始终显示购物车和后台管理链接,方便用户进入购物车页面查看商品或者进入后台管理页面(可能需要相应权限)。 -->
<a href="pages/cart/cart.jsp">购物车</a>
<a href="pages/manager/manager.jsp">后台管理</a>
</div>
</div>
<div id="main">
<!-- 图书搜索功能 -->
<!-- 图书搜索功能区域 -->
<div class="book_check">
<form action="client/bookServlet" method="get">
<!-- 隐藏域,用于传递特定的参数 action其值为 pageByNameOrAuthor用于告知服务器此次请求是按照书名或作者名进行页面查询相关操作。 -->
<input type="hidden" name="action" value="pageByNameOrAuthor">
图书搜索<input id="nameorauthor" type="text" placeholder="请输入书名或作者名" name="nameorauthor" value="${param.nameorauthor}">
<input type="submit" value="查询" />
</form>
</div>
<div id="book">
<!-- 价格区间筛选功能 -->
<!-- 价格区间筛选功能区域 -->
<div class="book_cond">
<form action="client/bookServlet" method="get">
<!-- 同样是隐藏域,传递 action 参数,值为 pageByPrice用于告知服务器此次请求是按照价格区间进行页面查询相关操作。 -->
<input type="hidden" name="action" value="pageByPrice">
价格:<input id="min" type="text" name="min" value="${param.min}"> 元 -
<input id="max" type="text" name="max" value="${param.max}"> 元
@ -74,7 +75,7 @@
</form>
</div>
<div style="text-align: center">
<!-- 判断购物车是否为空 -->
<!-- 再次使用 JSTL 的 c:if 标签判断 sessionScope 中 cart 对象的 items 属性是否为空,以此来判断购物车是否为空 -->
<c:if test="${empty sessionScope.cart.items}">
<span id="cartTotalCount"></span>
<div>
@ -82,16 +83,16 @@
</div>
</c:if>
<c:if test="${not empty sessionScope.cart.items}">
<!-- 显示购物车商品总数 -->
<!-- 如果购物车不为空,显示购物车商品总数,通过 EL 表达式(${sessionScope.cart.totalCount})获取购物车中商品的总数并展示出来。 -->
<span id="cartTotalCount">您的购物车中有${sessionScope.cart.totalCount}件商品</span>
<div>
<!-- 显示最新加入购物车的商品名称 -->
<!-- 显示最新加入购物车的商品名称,同样通过 EL 表达式获取最新加入商品的名称并展示,这里还设置了颜色为红色,用于突出显示。 -->
您刚刚将<span style="color: red" id="cartLastName">${sessionScope.lastName}</span>加入到了购物车中
</div>
</c:if>
</div>
<!-- 遍历书籍列表 -->
<!-- 使用 JSTL 的 c:forEach 标签遍历 requestScope 中 page 对象的 items 属性(这里的 items 应该是一个集合,可能是书籍信息的列表),每次遍历将当前元素赋值给变量 book然后在循环体中进行相应的页面展示操作。 -->
<c:forEach items="${requestScope.page.items}" var="book">
<div class="b_list">
<div class="img_div">
@ -119,7 +120,7 @@
<span class="sp2">${book.stock}</span>
</div>
<div class="book_add">
<!-- 加入购物车按钮 -->
<!-- 加入购物车按钮,设置了自定义属性 bookId其值为当前遍历的书籍的 id方便前面的 JavaScript 代码获取并发送对应的添加到购物车的请求。 -->
<button bookId=${book.id} class="addToCart">加入购物车</button>
</div>
</div>
@ -128,12 +129,12 @@
</div>
<!-- 分页导航 -->
<!-- 包含公共的分页导航页面page_nav.jsp可能包含分页相关的链接、页码显示等功能方便复用。 -->
<%@include file="/pages/common/page_nav.jsp"%>
</div>
<!-- 页脚 -->
<!-- 包含公共的页脚页面footer.jsp可能包含版权信息、联系方式等页面底部相关的通用内容方便复用。 -->
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>

@ -1,9 +1,5 @@
<%--
Created by IntelliJ IDEA.
User: jhu
Date: 2020/10/19
Time: 22:56
To change this template use File | Settings | File Templates.
此部分为文件的创建相关注释,表明该文件是通过 IntelliJ IDEA 创建的,创建者是 jhu创建时间为 2020 年 10 月 19 日 22 时 56 分,同时说明了修改该模板的相关设置操作的路径信息。
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
@ -12,11 +8,10 @@
<head>
<meta charset="UTF-8">
<title>图书热销榜单</title>
<%-- 包含公共的头部页面header.jsp这里面通常会放置页面通用的样式表引入、脚本引入或者一些页面头部布局相关的内容以实现代码复用。 --%>
<%@include file="/pages/common/header.jsp"%>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo1.jpg" >
<span class="wel_word">图书热销榜单</span>
@ -35,6 +30,7 @@
<td>作者</td>
<td style="color: red">销量</td>
</tr>
<%-- 在 JSP 页面中嵌入 Java 代码片段,定义一个整型变量 i 并初始化为 1这个变量将用于记录图书的排名。 --%>
<%int i=1;%>
<c:forEach items="${requestScope.page.items}" var="book">
<tr>
@ -44,10 +40,9 @@
<td>${book.author}</td>
<td style="color: red">${book.sales}</td>
</tr>
<%-- 使用 JSTL 的 c:forEach 标签来遍历 requestScope 中 page 对象的 items 属性(通常这里是一个包含图书信息的集合),每次循环将集合中的一个元素赋值给变量 book然后在表格行tr中展示对应图书的各项信息包括通过表达式输出的排名通过 Java 代码片段中的 i 变量来展示,并且每次循环自增 1以及图书的名称、价格、作者和销量通过 EL 表达式 ${book.name} 等获取相应属性值进行展示)。 --%>
</c:forEach>
<tr>
<td></td>
<td></td>
@ -61,4 +56,4 @@
<%@include file="/pages/common/footer.jsp"%>
</body>
</html>
</html>

@ -1,37 +1,35 @@
<%--
Created by IntelliJ IDEA.
User: jhu
Date: 2020/10/5
Time: 22:17
To change this template use File | Settings | File Templates.
此部分为文件的创建相关注释,说明该文件是由 IntelliJ IDEA 创建的,创建用户是 jhu创建时间为2020年10月5日22时17分同时告知若要修改此模板可通过文件设置里的文件模板相关功能来操作。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>404</title>
<%-- 引入公共的头部页面header.jsp一般这个头部页面中会包含诸如页面通用的样式文件引入、脚本文件引入或者一些页面头部通用布局结构等内容方便在多个页面间复用代码。 --%>
<%@include file="/pages/common/header.jsp"%>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" >
<span class="wel_word">404error</span>
</div>
<div id="main">
<table>
<tr>
<td style="width: 300px">亲,您访问的页面不存在或已被删除!</td>
<%-- 在表格的第一行的单元格中,显示提示信息,告知用户所访问的页面出现了不存在或者已被删除的情况。 --%>
</tr>
<tr>
<td>
<a href="index.jsp" style="size: 300px;color: red">返回首页</a>
<%-- 在表格的第二行单元格中设置一个超链接链接到“index.jsp”页面并且设置了链接文字的样式包括字号原代码中“size”属性写法有误正确的是“font-size”这里是按原代码注释和颜色引导用户点击返回首页。 --%>
</td>
</tr>
</table>
</div>
<!-- 这是页脚的引入 -->
<%@ include file="/pages/common/footer.jsp" %>
<%-- 通过此指令引入公共的页脚页面footer.jsp该页脚页面通常包含页面底部的一些通用信息比如版权声明、联系方式等内容同样是为了实现代码复用。 --%>
</body>
</html>

@ -1,37 +1,36 @@
<%--
Created by IntelliJ IDEA.
User: jhu
Date: 2020/10/5
Time: 22:17
To change this template use File | Settings | File Templates.
这部分是文件创建相关的注释信息表明该文件是由IntelliJ IDEA创建的创建者是“jhu”创建时间是2020年10月5日22时17分同时提示若要修改这个模板文件可以通过“File | Settings | File Templates”这个路径去操作。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>500</title>
<%-- 通过JSP的指令引入公共的头部页面header.jsp通常在这个公共头部页面里会包含页面通用的样式表链接、JavaScript脚本引入或者一些通用的页面头部布局相关的代码等目的是实现代码复用让多个页面能共享这些公共部分的设置。 --%>
<%@include file="/pages/common/header.jsp"%>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" >
<span class="wel_word">500error</span>
<%-- 在“header”这个div区域中展示了一个logo图片虽然图片的替代文本为空可适当补充使其更友好以及显示“500error”字样用于提示当前页面出现的是500相关错误情况。 --%>
</div>
<div id="main">
<table>
<tr>
<td style="width: 300px">HTTP状态 500 - 内部服务器错误</td>
<%-- 在表格的第一行单元格里明确给出提示信息告知用户当前出现了HTTP状态码为500的内部服务器错误让用户知晓页面无法正常显示的原因所在。 --%>
</tr>
<tr>
<td>
<a href="index.jsp" style="size: 300px;color: red">返回首页</a>
<%-- 在表格的第二行单元格里创建了一个超链接链接指向“index.jsp”页面同时设置了这个链接文字的样式原代码中“size”属性写法不符合规范正确的是“font-size”用于设置字号这里按原代码注释颜色设置为红色引导用户点击该链接返回首页去尝试其他操作。 --%>
</td>
</tr>
</table>
</div>
<!-- 这是页脚的引入 -->
<%@ include file="/pages/common/footer.jsp" %>
<%-- 此处使用JSP的指令引入公共的页脚页面footer.jsp一般在页脚页面里会放置诸如版权信息、联系方式、网站相关声明等页面底部通用的内容同样是为了复用代码保持网站各页面底部信息的一致性。 --%>
</body>
</html>
</html>

@ -1,38 +1,38 @@
<%--
Created by IntelliJ IDEA.
User: jhu
Date: 2020/10/5
Time: 10:45
To change this template use File | Settings | File Templates.
这部分是关于该文件创建的相关注释内容说明了此文件是通过IntelliJ IDEA创建的创建者是“jhu”创建时间为2020年10月5日10时45分并且告知若要对这个模板文件进行修改可以在文件设置里找到文件模板相关功能来操作。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>404</title>
<%-- 通过JSP的指令引入公共的头部页面header.jsp通常这个公共头部页面包含了页面通用的一些元素比如样式表的链接、脚本文件的引入或者是页面头部通用的布局结构代码等这样做是为了实现代码复用多个页面可以共用这些设置减少重复编写代码的工作量。 --%>
<%@include file="/pages/common/header.jsp"%>
</head>
<body>
<div id="header">
<img class="logo_img" alt="" src="static/img/logo.gif" >
<span class="wel_word">错误提示</span>
<%-- 在“header”这个div区域中展示了一个图片其替代文本为空最好能补充合适的替代文本方便屏幕阅读器等识别同时显示“错误提示”字样用于给用户一个直观的页面提示信息的开头部分告知用户当前页面是用于提示出现错误情况的。 --%>
</div>
<div id="main">
<table>
<tr>
<td style="width: 300px">亲,你没有管理员权限哦!</td>
<%-- 在表格的第一行单元格中,明确给出提示信息,告知用户当前操作因为没有管理员权限而无法进行,让用户清楚知晓出现此页面的原因。 --%>
</tr>
<tr>
<td>
<a href="pages/user/login.jsp" style="size: 300px;color: red">管理员登录</a>
<%-- 创建一个超链接链接指向“pages/user/login.jsp”页面也就是引导用户去进行管理员登录操作同时设置了链接文字的样式不过原代码中“size”属性的写法不符合规范正确的应该是“font-size”用于设置字号这里按原代码注释颜色设置为红色使其更醒目方便用户看到并点击操作。 --%>
<a href="index.jsp" style="size: 300px;color: red">返回首页</a>
<%-- 再创建一个超链接指向“index.jsp”页面用于引导用户返回首页同样设置了字号原代码中写法有误和颜色样式给用户提供另一种操作选择方便用户离开当前提示页面。 --%>
</td>
</tr>
</table>
</div>
<!-- 这是页脚的引入 -->
<%@ include file="/pages/common/footer.jsp" %>
<%-- 使用JSP指令引入公共的页脚页面footer.jsp一般来说页脚页面里会放置像版权信息、网站的联系方式、相关声明等页面底部通用的内容通过这种引入方式实现代码复用保证整个网站各个页面的页脚部分信息呈现的一致性。 --%>
</body>
</html>
</html>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save