书城项目第五阶段-图书模块2

简介: 书城项目第五阶段-图书模块2

1.5、编写图书模块的Web层,和页面联调测试

1.5.1、图书列表功能的实现

1、图解列表流程

注意访问顺序 首页–》后台管理–》图书管理,不能直接访问图书管理,无数据

2 BookServlet web包下

package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class BookServlet extends BaseServlet {
    private BookService bookService=new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1  通过BookService 查询全部图书
        List<Book> books = bookService.queryBooks();
        //2  把全部图书保存到Request域中
        req.setAttribute("books",books);
        //3  请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
}

在web.xml下配置

  <servlet>
        <servlet-name>BookServlet</servlet-name>
        <servlet-class>com.atguigu.web.BookServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookServlet</servlet-name>
        <url-pattern>/manager/bookServlet</url-pattern><!--  /manager方便管理  -->
    </servlet-mapping>

3 修改book_manager.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>图书管理</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
</head>
<body>
    <div id="header">
        <img class="logo_img" alt="" src="../../static/img/logo.gif">  <span class="wel_word">图书管理系统</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <table>
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>作者</td>
                <td>销量</td>
                <td>库存</td>
                <td colspan="2">操作</td>
            </tr>
          <c:forEach items="${requestScope.books}" var="book">
              <tr>
                  <td>${book.name}</td>
                  <td>${book.price}</td>
                  <td>${book.author}</td>
                  <td>${book.sales}</td>
                  <td>${book.stock}</td>
                  <td><a href="book_edit.jsp">修改</a> </td>
                  <td><a href="#">删除</a> </td>
              </tr>
          </c:forEach>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td><a href="pages/manager/book_edit.jsp">添加图书</a> </td>
          </tr>
        </table>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>

4 修改manager_menu.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 05:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div>
    <a href="manager/bookServlet?action=list">图书管理</a>
    <a href="order_manager.jsp">订单管理</a>
    <a href="../../index.jsp">返回商城</a>
</div>

增加语句 BaseServlet

package com.atguigu.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
public abstract class BaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action=req.getParameter("action");
//        System.out.println(action);
        //action的value和调用的方法名是统一的
//        if ("login".equals(action)){
            System.out.println("处理登录的需求");
//           login(req,resp);
//        }else if ("regist".equals(action)){
            System.out.println("处理注册的需求");
//            regist(req,resp);
//        }
        //反射
        try {
            //获取action业务鉴别字符串,获取相应的业务方法 反射对象
            Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
            //调用目标业务方法
            method.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1.5.2、前后台的简单介绍



1.5.3、添加图书功能的实现



修改 book_edit.jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>编辑图书</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <style type="text/css">
        h1 {
            text-align: center;
            margin-top: 200px;
        }
        h1 a{
            color:red;
        }
        input {
            text-align: center;
        }
    </style>
<body>
    <div id="header">
        <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif">
        <span class="wel_word">编辑图书</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <form action="manager/bookServlet" method="get">
            <input type="hidden" name="action" value="add"/>
            <table>
                <tr>
                    <td>名称</td>
                    <td>价格</td>
                    <td>作者</td>
                    <td>销量</td>
                    <td>库存</td>
                    <td colspan="2">操作</td>
                </tr>
                <tr>
                    <td><input name="name"  type="text" value="时间简史"/></td>
                    <td><input name="price" type="text"  value="30.00"/></td>
                    <td><input name="author" type="text" value="霍金"/></td>
                    <td><input name="sales"  type="text" value="200"/></td>
                    <td><input name="stock" type="text" value="300"/></td>
                    <td><input type= "submit" value="提交"/></td>
                </tr>
            </table>
        </form>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>

增加语句 BookServlet

package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class BookServlet extends BaseServlet {
    private BookService bookService=new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数==封装成为Book对象
        Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook0保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//        /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1  通过BookService 查询全部图书
        List<Book> books = bookService.queryBooks();
        //2  把全部图书保存到Request域中
        req.setAttribute("books",books);
        //3  请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
}

1.5.4、删除图书功能的实现



修改 book_manager.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>图书管理</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <script type="text/javascript">
        //给删除的a标签绑定单击事件,用于删除的确认提示操作
        $(function (){
            $("a.deleteClass").click(function (){
                // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。
                /**
                 * confirm是确认提示框函数
                 * 参数是它的提示内容
                 * 他有两个按钮,一个确认,一个是取消。
                 * 返回true表示点击了,确认,返回false表示点击取消。
                 */
                return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?");
                // return false;//阻止元素的默认行为===不提交请求
            });
        });
    </script>
</head>
<body>
    <div id="header">
        <img class="logo_img" alt="" src="../../static/img/logo.gif">  <span class="wel_word">图书管理系统</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <table>
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>作者</td>
                <td>销量</td>
                <td>库存</td>
                <td colspan="2">操作</td>
            </tr>
          <c:forEach items="${requestScope.books}" var="book">
              <tr>
                  <td>${book.name}</td>
                  <td>${book.price}</td>
                  <td>${book.author}</td>
                  <td>${book.sales}</td>
                  <td>${book.stock}</td>
                  <td><a href="book_edit.jsp">修改</a> </td>
                  <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</a> </td>
              </tr>
          </c:forEach>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td><a href="pages/manager/book_edit.jsp">添加图书</a> </td>
          </tr>
        </table>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>

增加语句 WebUtils

package com.atguigu.utils;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
public class WebUtils {
    /**
     * 把Map中的值注入到对应的JavaBean属性中
     * @param value
     * @param bean
     *
     * HttpServletRequest
     * Dao层
     * Service层
     * web层  耦合度高
     *
     */
//    public static void copyParamToBean(HttpServletRequest req,Object bean ){
    public static <T>  T copyParamToBean(Map value, T bean ){
        try {
            System.out.println("注入之前:"+bean);
            /**
             * 把所有请求的参数都注入到user对象中
             */
            BeanUtils.populate(bean,value);//出现NoClassDefFoundError错误导入commons-collections3.x.jar,4.x不行
            System.out.println("注入之后:"+bean);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bean;
    }
    /**
     * 将字符串转换成为int类型的数据
     * @param strInt
     * @param defaultValue
     * @return
     */
    public static int parseInt(String strInt,int defaultValue){
        try {
            return Integer.parseInt(strInt);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defaultValue;
    }
}

增加语句 BookServlet

package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class BookServlet extends BaseServlet {
    private BookService bookService=new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数==封装成为Book对象
        Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook0保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//        /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数id,图书编程
      int id=WebUtils.parseInt(req.getParameter("id"),0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//        3、重定向回图书列表管理页西
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1  通过BookService 查询全部图书
        List<Book> books = bookService.queryBooks();
        //2  把全部图书保存到Request域中
        req.setAttribute("books",books);
        //3  请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
}

1.5.5、修改图书信息

第一步 回显修改的信息



修改 book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>图书管理</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <script type="text/javascript">
        //给删除的a标签绑定单击事件,用于删除的确认提示操作
        $(function (){
            $("a.deleteClass").click(function (){
                // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。
                /**
                 * confirm是确认提示框函数
                 * 参数是它的提示内容
                 * 他有两个按钮,一个确认,一个是取消。
                 * 返回true表示点击了,确认,返回false表示点击取消。
                 */
                return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?");
                // return false;//阻止元素的默认行为===不提交请求
            });
        });
    </script>
</head>
<body>
    <div id="header">
        <img class="logo_img" alt="" src="../../static/img/logo.gif">  <span class="wel_word">图书管理系统</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <table>
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>作者</td>
                <td>销量</td>
                <td>库存</td>
                <td colspan="2">操作</td>
            </tr>
          <c:forEach items="${requestScope.books}" var="book">
              <tr>
                  <td>${book.name}</td>
                  <td>${book.price}</td>
                  <td>${book.author}</td>
                  <td>${book.sales}</td>
                  <td>${book.stock}</td>
                  <td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a> </td>
                  <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</a> </td>
              </tr>
          </c:forEach>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td><a href="pages/manager/book_edit.jsp">添加图书</a> </td>
          </tr>
        </table>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>
修改 book_edit.jsp
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>编辑图书</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <style type="text/css">
        h1 {
            text-align: center;
            margin-top: 200px;
        }
        h1 a{
            color:red;
        }
        input {
            text-align: center;
        }
    </style>
<body>
    <div id="header">
        <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif">
        <span class="wel_word">编辑图书</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <form action="manager/bookServlet" method="get">
            <input type="hidden" name="action" value="add"/>
            <table>
                <tr>
                    <td>名称</td>
                    <td>价格</td>
                    <td>作者</td>
                    <td>销量</td>
                    <td>库存</td>
                    <td colspan="2">操作</td>
                </tr>
                <tr>
                    <td><input name="name"  type="text" value="${requestScope.book.name}"/></td>
                    <td><input name="price" type="text"  value="${requestScope.book.price}"/></td>
                    <td><input name="author" type="text" value="${requestScope.book.author}"/></td>
                    <td><input name="sales"  type="text" value="${requestScope.book.sales}"/></td>
                    <td><input name="stock" type="text" value="${requestScope.book.stock}"/></td>
                    <td><input type= "submit" value="提交"/></td>
                </tr>
            </table>
        </form>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>
增加语句 BookServlet
package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class BookServlet extends BaseServlet {
    private BookService bookService=new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数==封装成为Book对象
        Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook0保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//        /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数id,图书编程
      int id=WebUtils.parseInt(req.getParameter("id"),0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//        3、重定向回图书列表管理页西
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1获取请求的参数图书编号
        int id=WebUtils.parseInt(req.getParameter("id"),0);
        //2调用bookService.queryBookById查询图书
        Book book= bookService.queryBookById(id);
        //3保存到图书到Request域中
        req.setAttribute("book",book);
        //4请求转发到。pages/manager/book_edit.jsp页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1  通过BookService 查询全部图书
        List<Book> books = bookService.queryBooks();
        //2  把全部图书保存到Request域中
        req.setAttribute("books",books);
        //3  请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
}

第二步 提交给服务器保存修改



修改 book_manager.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>图书管理</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <script type="text/javascript">
        //给删除的a标签绑定单击事件,用于删除的确认提示操作
        $(function (){
            $("a.deleteClass").click(function (){
                // 在事件的fuction函数中,有一个this对象。这个this对象,是当前正在响应事件的dom对象。
                /**
                 * confirm是确认提示框函数
                 * 参数是它的提示内容
                 * 他有两个按钮,一个确认,一个是取消。
                 * 返回true表示点击了,确认,返回false表示点击取消。
                 */
                return confirm("你确定要删除【"+$(this).parent().parent().find("td:first").text()+"】?");
                // return false;//阻止元素的默认行为===不提交请求
            });
        });
    </script>
</head>
<body>
    <div id="header">
        <img class="logo_img" alt="" src="../../static/img/logo.gif">  <span class="wel_word">图书管理系统</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <table>
            <tr>
                <td>名称</td>
                <td>价格</td>
                <td>作者</td>
                <td>销量</td>
                <td>库存</td>
                <td colspan="2">操作</td>
            </tr>
          <c:forEach items="${requestScope.books}" var="book">
              <tr>
                  <td>${book.name}</td>
                  <td>${book.price}</td>
                  <td>${book.author}</td>
                  <td>${book.sales}</td>
                  <td>${book.stock}</td>
                  <td><a href="manager/bookServlet?action=getBook&id=${book.id}">修改</a> </td>
<%--                  <td><a href="manager/bookServlet?action=getBook&id=${book.id}&method=update">修改</a> </td>   <!---方案一 --->  --%>
                  <td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</a> </td>
              </tr>
          </c:forEach>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td><a href="pages/manager/book_edit.jsp">添加图书</a> </td>
<%--                <td><a href="pages/manager/book_edit.jsp?method=add">添加图书</a> </td>    <!---方案一 --->  --%>
          </tr>
        </table>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>
修改 book_edit.jsp
<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2021/8/21
  Time: 下午 02:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>编辑图书</title>
    <%--静态包含 base标签,css样式,jquery文件 --%>
    <%@ include file="/pages/common/head.jsp"%>
    <style type="text/css">
        h1 {
            text-align: center;
            margin-top: 200px;
        }
        h1 a{
            color:red;
        }
        input {
            text-align: center;
        }
    </style>
<body>
<%--    是否添加操作:${empty param.id?"add":"update"}  <!---方案二 ---> --%>
<%--    是否添加操作:${empty requestScope.book?"add":"update"}  <!---方案三 --->  --%>
    <div id="header">
        <img class="logo_ing" alt="" arc="../../static/1mg/logo.gif">
        <span class="wel_word">编辑图书</span>
        <%-- 静态包含manager 管理模块的菜单       --%>
        <%@ include file="/pages/common/manager_menu.jsp"%>
    </div>
    <div id="main">
        <form action="manager/bookServlet" method="get">
<%--            <input type="hidden" name="action" value="add"/>  --%>
<%--                    <input type="hidden" name="action" value="${param.method}"/>  <!---方案一 --->    --%>
<%--            <input type="hidden" name="action" value="${empty param.id?"add":"update"}"/>  <!---方案二 --->     --%>
            <input type="hidden" name="action" value="${empty requestScope.book?"add":"update"}"/><!---方案三 --->
            <input type="hidden" name="id" value="${requestScope.book.id}"/>
    <table>
                <tr>
                    <td>名称</td>
                    <td>价格</td>
                    <td>作者</td>
                    <td>销量</td>
                    <td>库存</td>
                    <td colspan="2">操作</td>
                </tr>
                <tr>
                    <td><input name="name"  type="text" value="${requestScope.book.name}"/></td>
                    <td><input name="price" type="text"  value="${requestScope.book.price}"/></td>
                    <td><input name="author" type="text" value="${requestScope.book.author}"/></td>
                    <td><input name="sales"  type="text" value="${requestScope.book.sales}"/></td>
                    <td><input name="stock" type="text" value="${requestScope.book.stock}"/></td>
                    <td><input type= "submit" value="提交"/></td>
                </tr>
            </table>
        </form>
    </div>
    <%--静态包含页脚内容--%>
    <%@include file="/pages/common/footer.jsp"%>
</body>
</html>
增加语句 BookServlet
package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class BookServlet extends BaseServlet {
    private BookService bookService=new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数==封装成为Book对象
        Book book= WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.addBook0保存图书
        bookService.addBook(book);
//        3、跳到图书列表页面
//        /manager/bookServlet?action=list
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);//请求转发有bug
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");//重定向
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数id,图书编程
      int id=WebUtils.parseInt(req.getParameter("id"),0);
//        2、调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
//        3、重定向回图书列表管理页西
//                /book/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1、获取请求的参数==封装成为Book对象
        Book book=WebUtils.copyParamToBean(req.getParameterMap(),new Book());
//        2、调用BookService.updateBook( book);修改图书
        bookService.updateBook(book);
//        3、重定向回图书列表管理页面
//              地址:/工程名/manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1获取请求的参数图书编号
        int id=WebUtils.parseInt(req.getParameter("id"),0);
        //2调用bookService.queryBookById查询图书
        Book book= bookService.queryBookById(id);
        //3保存到图书到Request域中
        req.setAttribute("book",book);
        //4请求转发到。pages/manager/book_edit.jsp页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1  通过BookService 查询全部图书
        List<Book> books = bookService.queryBooks();
        //2  把全部图书保存到Request域中
        req.setAttribute("books",books);
        //3  请求转发到/pages/manager/book_manager.jsp页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
}
相关文章
|
6月前
|
算法 搜索推荐 Java
拼多多与抖音电商 API 接口,哪个更适合带货?
在数字化营销时代,拼多多与抖音电商API成为带货关键工具。拼多多API集成简便,适合低价、团购型商品推广;抖音电商API则依托短视频与直播,实现高互动内容带货。本文对比两者功能、优势与适用场景,助你选择更高效带货方案。
211 0
|
3月前
|
监控 安全 数据可视化
开发更可控,部署更便捷:AgentScope 迈入1.0时代
AgentScope 1.0 是通义实验室推出的开源多智能体开发框架,旨在打造稳定、安全、开箱即用的智能体生产级解决方案。通过“核心框架+运行时+可视化工具”三层架构,支持智能体的构建、部署、监控全生命周期管理,具备实时干预、高效工具调用与智能上下文管理能力,助力开发者实现从“能跑”到“可控、可落地”的跨越。
1387 0
|
8月前
|
设计模式 消息中间件 Java
【设计模式】【行为型模式】命令模式(Command)
一、入门 什么是命令模式? 命令模式是一种行为设计模式,它将请求或操作封装为对象,从而使你可以用不同的请求对客户进行参数化,并支持请求的排队、记录、撤销等操作。 命令模式的核心是将“请求”封装为独立的
249 15
qml import 自定义模块 cmake
qml import 自定义模块 cmake
888 1
|
传感器 安全
可持续建筑:绿色建筑材料的最新进展
【9月更文挑战第18天】绿色建筑材料的最新进展不仅体现了科技的力量和环保的理念,更为建筑行业的可持续发展提供了有力支撑。作为建筑行业的一员,我们应该积极关注绿色建筑材料的研发和应用动态,推动绿色建筑材料的普及和推广。只有这样,我们才能共同构建一个更加绿色、健康、可持续的未来。
462 12
|
存储
LangChain 构建问题之MetaGPT 对复杂任务的处理如何解决
LangChain 构建问题之MetaGPT 对复杂任务的处理如何解决
237 0
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
453 0
|
弹性计算 IDE 开发工具
ECS热门应用 | 轻松打造一套 Web IDE
使用ECS云服务器搭建网页IDE,增强编码便捷性,提升开发者体验。
ECS热门应用 | 轻松打造一套 Web IDE
|
Go Android开发
flutter调用go
flutter调用go
|
运维 安全 网络安全
DDoS攻击增速惊人,谈谈防御DDoS攻击的几大有效方法
DDoS攻击增速惊人,谈谈防御DDoS攻击的几大有效方法
507 0