Java Web基础入门第九十一讲 在线网上书店(六)——实现图书管理模块
发布日期:2021-06-30 18:04:27 浏览次数:2 分类:技术文章

本文共 13430 字,大约阅读时间需要 44 分钟。

后台添加图书

后台要添加图书的时候,应该说明图书的类型是什么。要想在显示添加图书的页面上知道全部类型的id,就要经过Servlet把类型的集合传送过去。

首先,我们要找到后台左侧导航页面——left.jsp,在添加图书的超链接上绑定处理请求的BookServlet。
在这里插入图片描述
然后,在BookServlet中获取到类型的集合,并带到添加图书的页面上。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.liayun.domain.Category;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;@WebServlet("/manager/BookServlet")public class BookServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("forAddUI".equals(method)) {
forAddUI(request, response); } } private void forAddUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List
categories = service.getAllCategory(); request.setAttribute("categories", categories); request.getRequestDispatcher("/manager/addbook.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

紧接着,在manager目录中创建出添加图书的addbook.jsp页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
添加图书的页面
书名
作者
售价
图片
描述
所属分类

从以上页面中,可以看到我们在添加图书的时候,还得添加图片,所以需要在WebRoot根目录下新建一个images目录,用于保存上传的图书图片。

在这里插入图片描述
管理员填写完图书的基本信息,并为图书选择了一张相关图片后,点击添加书籍按钮,就要将请求交给BookServlet,现在我们来编写该Servlet用来处理添加图书请求的代码。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;import cn.liayun.utils.WebUtils;@WebServlet("/manager/BookServlet")public class BookServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("forAddUI".equals(method)) {
forAddUI(request, response); } if ("add".equals(method)) {
add(request, response); } } private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Book book = WebUtils.upload(request, this.getServletContext().getRealPath("/images")); service.addBook(book); request.setAttribute("message", "添加成功!!"); } catch (Exception e) {
e.printStackTrace(); request.setAttribute("message", "添加失败!!"); } request.getRequestDispatcher("/message.jsp").forward(request, response); } private void forAddUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List
categories = service.getAllCategory(); request.setAttribute("categories", categories); request.getRequestDispatcher("/manager/addbook.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

接着,我们还要在WebUtils工具类中增加一个upload方法,WebUtils工具类内部会从request里面取出数据,除了把上传的图书图片保存下来,并且还会把上传图书信息封装到一个Book对象里面返回给你。

package cn.liayun.utils;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.List;import java.util.Map;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;//主要把请求数据封装到一个JavaBean中public class WebUtils {
public static
T request2Bean(HttpServletRequest request, Class
beanClass) {
try {
T bean = beanClass.newInstance(); Map
map = request.getParameterMap(); BeanUtils.populate(bean, map); return bean; } catch (Exception e) {
throw new RuntimeException(e); } } public static Book upload(HttpServletRequest request, String uploadPath) {
try {
Book book = new Book(); DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding(request.getCharacterEncoding()); List
list = upload.parseRequest(request); for (FileItem item : list) {
if (item.isFormField()) {
String inputName = item.getFieldName(); String value = item.getString("UTF-8"); if ("category_id".equals(inputName)) {
BusinessService service = new BusinessServiceImpl(); Category c = service.findCategory(value); book.setCategory(c); } else {
BeanUtils.setProperty(book, inputName, value); } } else {
String filename = item.getName();//拿到上传文件的名称 filename = filename.substring(filename.lastIndexOf("\\") + 1); String savepath = uploadPath; String saveFilename = UUID.randomUUID().toString() + filename; InputStream in = item.getInputStream(); FileOutputStream out = new FileOutputStream(savepath + File.separator + saveFilename); int len = 0; byte[] buffer = new byte[1024]; while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len); } out.close(); in.close(); item.delete(); book.setImage(saveFilename); } } book.setId(UUID.randomUUID().toString()); return book; } catch (Exception e) {
throw new RuntimeException(e); } } }

最后,我们测试一番。

在这里插入图片描述

后台显示图书

找到后台左侧导航页面——left.jsp,在查看图书的超链接上绑定处理请求的BookServlet。

在这里插入图片描述
紧接着,在BookServlet处理显示图书的请求。

package cn.liayun.web.manager;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.liayun.domain.Book;import cn.liayun.domain.Category;import cn.liayun.service.BusinessService;import cn.liayun.service.impl.BusinessServiceImpl;import cn.liayun.utils.WebUtils;@WebServlet("/manager/BookServlet")public class BookServlet extends HttpServlet {
private BusinessService service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method"); if ("forAddUI".equals(method)) {
forAddUI(request, response); } if ("add".equals(method)) {
add(request, response); } if ("list".equals(method)) {
list(request, response); } } private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List
list = service.getAllBook(); request.setAttribute("list", list); request.getRequestDispatcher("/manager/listbook.jsp").forward(request, response); } private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Book book = WebUtils.upload(request, this.getServletContext().getRealPath("/images")); service.addBook(book); request.setAttribute("message", "添加成功!!"); } catch (Exception e) {
e.printStackTrace(); request.setAttribute("message", "添加失败!!"); } request.getRequestDispatcher("/message.jsp").forward(request, response); } private void forAddUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List
categories = service.getAllCategory(); request.setAttribute("categories", categories); request.getRequestDispatcher("/manager/addbook.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

接着,在manager目录中创建出显示图书的listbook.jsp页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
展示后台书籍列表的页面

图书信息

书名 作者 描述 图片 操作
${book.name } ${book.author } ${book.description } 查看图片 修改 删除

从以上页面中可以看到,我们是根据记载在Book对象的图片名称,弄一个超链接,超链接指向服务端的图片,这样就可以查看图片了!温馨提示:在后台展示书籍列表时,我们并没有进行分页。

最后,测试效果如下:
在这里插入图片描述

前台显示图书

看回我们前台页面的成果图,我们可以把整个body页面分成是三个div。

  • body占整个div;
  • 页头是一个div;
  • 显示图书的地方是一个div。

在这里插入图片描述

设计好大概的布局

下面是前台首页中的3个div。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
前台首页
这是展示书籍的地方(包括书籍分类列表和书籍详细信息)
书籍分类列表: ......
书籍详细信息:
图书的图片......
图书的详细信息......

页面中的CSS代码如下:

body {
margin: 0px; padding: 0px; text-align: center;}#container {
width: 100%; height: 300px; /* border: solid 1px red; */ text-align: left;}#main {
margin-top: 20px;}#head {
text-align: center;}#categories {
border: solid 1px blue; width: 250px; height: 400px; padding-left: 20px; line-height: 40px; float: left;}#books {
float: left; margin-left: 20px;}#image {
float: left;}#info {
float: left;}#book {
float: left; width: 350px;}

获取首页数据

在显示首页的下部分的时候,应该先去寻找一个Servlet来把数据交给对应的JSP。因为我们的JSP一般都是放在WEB-INF下,是不能直接访问的,还有就是JSP往往是需要我们后台的数据的,因此我们使用Servlet来获取得到数据,再交由JSP来展示就最好不过了。

首先,在WebRoot根目录下新建整个网站首页,即index.jsp。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
在线网上书店前台进入页面

然后,在cn.liayun.web.client包中新建一个IndexServlet,用于获取首页数据,并将数据交给前台首页来展示。

package cn.liayun.web.client;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import cn.liayun.domain.Category;import cn.liayun.domain.PageBean;import cn.liayun.domain.QueryInfo;import cn.liayun.service.impl.BusinessServiceImpl;import cn.liayun.utils.WebUtils;//获取首页数据@WebServlet("/client/IndexServlet")public class IndexServlet extends HttpServlet {
private BusinessServiceImpl service = new BusinessServiceImpl(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//首先看别人有没有带查询条件过来 QueryInfo info = WebUtils.request2Bean(request, QueryInfo.class); String category_id = request.getParameter("category_id"); //IndexServlet即处理某个分类下面的分页请求,又处理所有的分页请求,所以要判断客户机有没有带category_id过来 if (category_id != null && !category_id.trim().equals("")) {
info.setQueryname("category_id"); info.setQueryvalue(category_id); } List
categories = service.getAllCategory(); PageBean pageBean = service.bookPageQuery(info); request.setAttribute("categories", categories); request.setAttribute("pageBean", pageBean); request.getRequestDispatcher("/client/index.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response); }}

IndexServlet既处理某个分类下面的分页请求,又处理所有的分页请求,所以要判断客户机有没有带category_id过来。

接下来,在前台首页(即client/index.jsp)中显示数据,如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
前台首页
书籍分类列表:
  • ${c.name }
  • ${book.name }
  • ${book.author }
  • ${book.price }
  • 购买
  • <%-- 这里要清除浮动,十分重要! --%>
    <%-- 这里要清除浮动,十分重要! --%>
    总共${pageBean.totalpage }页, 当前第${pageBean.currentpage }页,
    ${pagenum }

    重要的是:如果div浮动都黏贴在一起了,那么在后边多加个div,用于清除浮动效果。

    最后,测试的效果如下:
    在这里插入图片描述

    转载地址:https://liayun.blog.csdn.net/article/details/91350215 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

    上一篇:Java Web基础入门第九十二讲 在线网上书店(七)——实现订单管理模块
    下一篇:Java Web基础入门第九十讲 在线网上书店(五)——实现分类管理模块

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2024年04月08日 23时30分13秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    【深度学习笔记】组卷积 2019-04-30
    【深度学习笔记】循环神经网络和递归神经网络区别 2019-04-30
    【学习笔记】英文科技论文常见英语句式积累 2019-04-30
    【深度学习笔记】PixelShuffle 2019-04-30
    【python3学习笔记】斜杠和双斜杠运算符的区别 2019-04-30
    【深度学习笔记】torch.nn.Sequential(* args) 与 torch.nn.Module 2019-04-30
    【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型 2019-04-30
    【深度学习笔记】用torch.nn.ModuleList搭建神经网络 2019-04-30
    【解决错误】AttributeError: module ‘scipy.misc‘ has no attribute ‘imread‘ 2019-04-30
    【解决错误】复现RCAN的时候遇到了ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’ 2019-04-30
    【解决错误】ModuleNotFoundError: No module named ‘skimage‘ 2019-04-30
    【深度学习笔记】pytorch的点乘(dot product) 2019-04-30
    【深度学习笔记】残差 2019-04-30
    【错误解决】cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\sr 2019-04-30
    【python学习笔记】读取指定文件夹中的图片,结合边缘保留滤波EPF 2019-04-30
    【工具和环境】Linux下安装pycharm 2019-04-30
    【Accumulation】The last two sentences of the abstract 2019-04-30
    【Accumulation】The definition of SISR 2019-04-30
    【工具与环境】Windows下安装Sublime Text 3 2019-04-30
    【解决错误】ValueError: some of the strides of a given numpy array are negative. 2019-04-30