整个项目源代码可以到我的github上下载。前四个阶段我们完成了用户的注册与登录功能,并对代码进行了优化,第五阶段我们完成书城项目的图书模块,属于后台管理中的图书管理功能,主要包括图书的添加,删除,修改以及显示。
数据库表
首先编写图书模块的数据库表,使用如下Sql
语句创建t_book
表,并插入初始化测试数据。
1 | create table t_book( |
编写图书模块的JavaBean
我们在pojo
目录下创建Book
类,它的属性如下,并设置get
,set
,有参和无参构造方法。
1 | private Integer id; |
需要注意的是,对于图片路径imgPath
,我们初始化了一个默认图片路径,对于之后修改,如果传入图片路径为null
或空串,我们就不对imgPath
进行修改,因此我们需要对默认构造方法以及setImgPath
方法做出如下修改。
1 | // 要求给定的图书封面图片路径不能为空 |
编写图书模块的Dao和测试Dao
Dao
接口
1 | package com.atguigu.dao; |
BookDaoImpl
实现类
1 | package com.atguigu.dao.impl; |
BookDao
的测试:
我们在test
目录下创建BookDaoTest
类进行测试。
1 | package com.atguigu.test; |
编写图书模块的Service和测试Service
BookService
接口
1 | import com.atguigu.pojo.Book; |
BookServiceImpl
实现类
1 | package com.atguigu.service.impl; |
BookService
的测试:
在test
目录下创建BookServiceImplTest
测试类
1 | package com.atguigu.test; |
编写图书模块的Web层,页面联调测试
图书列表功能的实现
图解列表功能流程
BookServlet
程序中添加list
方法
在web
目录下创建BookServlet
类,并让其继承BaseServlet
,并实现list
方法,需要注意的是,我们直接访问是通过get
访问的,所以我们要实现doGet
方法,让其调用doPost
方法。
1 | public class BookServlet extends BaseServlet{ |
然后在web.xml
中添加映射
1 | <servlet> |
我们将其 url
放在 /manager
下是因为,图书管理属于后台管理,放在/manager
下用于区别其是后台功能。
3. 修改图书管理请求地址
我们在manager_menu.jsp
中修改图书管理请求地址
4. 修改 pages/manager/book_manager.jsp
页面的数据遍历输出
导入如下jar
包
1 | taglibs-standard-impl-1.2.1.jar |
修改book_manager.jsp
,利用JSTL
标签库遍历输出图书信息。
添加图书功能的实现
- 添加图书流程细节
- 问题说明
如果像之前一样,通过Servlet
的程序转发请求,那么前后算是同一个请求,而当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键F5
,就会发起浏览器记录的最后一次请求。那么就会重复添加图书项,所以这里要使用重定向,这样前后就是两次请求了,就算按F5
也是展示图书列表。 BookServlet
程序中添加add
方法
1 | protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { |
- 修改
book_edit.jsp
页面
这里如果使用post
方法提交会中文乱码,可以通过修改post
的编码解决。
删除图书功能的实现
- 图解删除流程
BookServlet
中添加delete
方法
删除功能需要id
项,我们通过getParameter
方法获得的id
是字符串类型,需要将其转换为Integer
型。所以我们给WebUtils
工具类添加转换Interger
类型。
1 | /** |
然后在BookServlet
中添加 delete
方法
1 | protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, |
修改删除的连接地址
给删除添加确认提示操作
删除属于危险项,所以我们需要添加确认操作,给删除的a
标签绑定单击事件。
1 | <script type="text/javascript"> |
修改图书功能的实现
图解修改图书细节
更新修改的请求地址
BookServlet
程序中添加getBook
方法
1 | protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, |
- 在
book_edit.jsp
页面中显示修改的数据 - 在
BookServlet
程序中添加update
方法
1 | protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, |
- 解决
book_edit.jsp
页面,既要实现添加,又要实现修改操作。