0
点赞
收藏
分享

微信扫一扫

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


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

  • ​​书城项目​​
  • ​​页面样式​​
  • ​​后台管理​​
  • ​​图书管理​​
  • ​​添加图书​​
  • ​​修改图书​​
  • ​​第五阶段​​
  • ​​1、MVC概念​​
  • ​​书城第五阶段​​
  • ​​1、图书模块​​
  • ​​1.1、编写图书模块的数据库表​​
  • ​​1.2、编写图书模块的JavaBean​​
  • ​​Book pojo包下​​
  • ​​1.3、编写图书模块的Dao和测试Dao​​
  • ​​BookDao dao包下​​
  • ​​BookDaoImpl dao/impl包下​​
  • ​​BookDaoTest test包下​​
  • ​​1.4、编写图书模块的Service和测试Service​​
  • ​​BookService service包下​​
  • ​​BookServiceImpl service/impl下​​
  • ​​BookServiceTest test包下​​
  • ​​1.5、编写图书模块的Web层,和页面联调测试​​
  • ​​1.5.1、图书列表功能的实现​​
  • ​​1、图解列表流程​​
  • ​​2 BookServlet web包下​​
  • ​​在web.xml下配置​​
  • ​​3 修改book_manager.jsp​​
  • ​​4 修改manager_menu.jsp​​
  • ​​增加语句 BaseServlet​​
  • ​​1.5.2、前后台的简单介绍​​
  • ​​1.5.3、添加图书功能的实现​​
  • ​​修改 book_edit.jsp​​
  • ​​增加语句 BookServlet​​
  • ​​1.5.4、删除图书功能的实现​​
  • ​​修改 book_manager.jsp​​
  • ​​增加语句 WebUtils​​
  • ​​增加语句 BookServlet​​
  • ​​1.5.5、修改图书信息​​
  • ​​第一步 回显修改的信息​​
  • ​​修改 book_manager.jsp​​
  • ​​修改 book_edit.jsp​​
  • ​​增加语句 BookServlet​​
  • ​​第二步 提交给服务器保存修改​​
  • ​​修改 book_manager.jsp​​
  • ​​修改 book_edit.jsp​​
  • ​​增加语句 BookServlet​​

书城项目

页面样式

后台管理

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

图书管理

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

添加图书

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

修改图书

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

第五阶段

1、MVC概念

MVC全称:Model模型、View视图、Controller 控制器。

MVC最早出现在JavaEE三层中的Web层,它可以有效的指导Web层的代码如何有效分离,单独工作。

View视图:只负责数据和界面的显示,不接受任何与显示数据无关的代码,便于程序员和美工的分工合作一一JSP/HTML。

Controller控制器:只负责接收请求,调用业务层的代码处理请求,然后派发页面,是一个“调度者”的角色-一Servlet。
转到某个页面。或者是重定向到某个页面。

Model模型:将与业务逻辑相关的数据封装为具体的JavaBean类,其中不掺杂任何与数据处理相关的代码一一JavaBean/domain/entity/pojo。

MVC是一种思想
MVC的理念是将软件代码拆分成为组件,单独开发,组合使用(目的还是为了降低耦合度) 。

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

MVC的作用还是为了降低耦合。让代码合理分层。方便后期升级和维护。

书城第五阶段

1、图书模块

1.1、编写图书模块的数据库表

create table t_book(
id int primary key auto_increment,
name varchar(100),
price decimal(11,2),
author varchar(100),
sales int,
stock int,
img_path varchar(200),
);

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

insert into t_book(id ,name,author,price,sales,stock,img_path)values(null,'java从入门到放弃','国哥',80,9999 ,9,'static/img/default.jpg');

insert into t_book(id ,name,author,price,sales,stock,img_path)values(null,'怎样拐跑别人的媳妇','龙伍', 68,99999,52 ,'static/img/default.jpg');

insert into t_book(id ,name,author,price,sales,stock,img_path)values(null,'C++编程思想','刚哥' , 68,99989,52,'static/img/default.jpg');

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

1.2、编写图书模块的JavaBean

Book pojo包下

package com.atguigu.pojo;

import java.math.BigDecimal;

public class Book {
private Integer id;
private String name;
private String author;
private BigDecimal price;
private Integer sales;
private Integer stock;
private String imgPath="static/img/default.jpg";

public Book() {
}

public Book(Integer id, String name, String author, BigDecimal price, Integer sales, Integer stock, String imgPath) {
this.id = id;
this.name = name;
this.author = author;
this.price = price;
this.sales = sales;
this.stock = stock;
//要求给定的图书封面图片路径不能为空
if (imgPath!=null&& !"".equals(imgPath)){
this.imgPath = imgPath;
}
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public BigDecimal getPrice() {
return price;
}

public void setPrice(BigDecimal price) {
this.price = price;
}

public Integer getSales() {
return sales;
}

public void setSales(Integer sales) {
this.sales = sales;
}

public Integer getStock() {
return stock;
}

public void setStock(Integer stock) {
this.stock = stock;
}

public String getImgPath() {
return imgPath;
}

public void setImgPath(String imgPath) {
//要求给定的图书封面图片路径不能为空
if (imgPath!=null&& !"".equals(imgPath)){
this.imgPath = imgPath;
}

}

@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", sales=" + sales +
", stock=" + stock +
", imgPath='" + imgPath + '\'' +
'}';
}
}

1.3、编写图书模块的Dao和测试Dao

BookDao dao包下

package com.atguigu.dao;

import com.atguigu.pojo.Book;

import java.util.List;

public interface BookDao {
//Ctrl+Shift+T
public int addBook(Book book);

public int deleteBook(Integer id );

public int updateBook(Book book);

public Book queryBookById(Integer id);

public List<Book> queryBooks();


}

BookDaoImpl dao/impl包下

package com.atguigu.dao.impl;

import com.atguigu.dao.BookDao;
import com.atguigu.pojo.Book;

import java.util.List;

public class BookDaoImpl extends BaseDao implements BookDao {
@Override
public int addBook(Book book) {

String sql="insert into t_book(name,author,price,sales,stock,img_path) values(?,?,?,?,?,?)";

return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath());

}

@Override
public int deleteBook(Integer id) {
String sql="delete from t_book where id=?";
return update(sql,id);
}

@Override
public int updateBook(Book book) {
String sql ="update t_book set name=?,author=?,price=?,sales=?,stock=?,img_path=? where id=?";
return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath(),book.getId());
}

@Override
public Book queryBookById(Integer id) {
String sql="select id,name,author,price,sales,stock,img_path imgPath from t_book where id=?";
return queryForOne(Book.class,sql,id);
}

@Override
public List<Book> queryBooks() {
String sql="select id,name,author,price,sales,stock,img_path imgPath from t_book";
return queryForList(Book.class,sql);
}
}

BookDaoTest test包下

package com.atguigu.test;

import com.atguigu.dao.BookDao;
import com.atguigu.dao.impl.BookDaoImpl;
import com.atguigu.pojo.Book;
import org.junit.Test;

import java.math.BigDecimal;


public class BookDaoTest {

private BookDao bookDao=new BookDaoImpl();

@Test
public void addBook() {
bookDao.addBook(new Book(null,"我为什么这么帅!","191125",new BigDecimal(9999),1100000,0,null));
}

//最后测试
@Test
public void deleteBook() {
bookDao.deleteBook(4);
}

@Test
public void updateBook() {
bookDao.updateBook(new Book(4,"我们都很帅!","191125",new BigDecimal(9999),1100000,0,null));
}

@Test
public void queryBookById() {
System.out.println(bookDao.queryBookById(4));
}

@Test
public void queryBooks() {
for (Book queryBook: bookDao.queryBooks()) {
System.out.println(queryBook);
}
}
}

1.4、编写图书模块的Service和测试Service

BookService service包下

package com.atguigu.service;

import com.atguigu.pojo.Book;

import java.util.List;

public interface BookService {
//Ctrl+Shift+T
public void addBook(Book book);

public void deleteBookById(Integer id);

public void updateBook(Book book);

public Book queryBookById(Integer id);

public List<Book> queryBooks();


}

BookServiceImpl service/impl下

package com.atguigu.service.impl;

import com.atguigu.dao.BookDao;
import com.atguigu.dao.impl.BookDaoImpl;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;

import java.util.List;

public class BookServiceImpl implements BookService {

private BookDao bookDao=new BookDaoImpl();

@Override
public void addBook(Book book) {
bookDao.addBook(book);
}

@Override
public void deleteBookById(Integer id) {
bookDao.deleteBook(id);
}

@Override
public void updateBook(Book book) {
bookDao.updateBook(book);
}

@Override
public Book queryBookById(Integer id) {
return bookDao.queryBookById(id);
}

@Override
public List<Book> queryBooks() {
return bookDao.queryBooks();
}
}

BookServiceTest test包下

package com.atguigu.test;

import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.impl.BookServiceImpl;
import org.junit.Test;

import java.math.BigDecimal;

import static org.junit.Assert.*;

public class BookServiceTest {

private BookService bookService=new BookServiceImpl();

@Test
public void addBook() {
bookService.addBook(new Book(null,"天下我有!","1125",new BigDecimal(999),10000,0,null));
}

//最后测试
@Test
public void deleteBookById() {
bookService.deleteBookById(5);
}

@Test
public void updateBook() {
bookService.updateBook(new Book(5,"天下都有!","1125",new BigDecimal(999),10,9999,null));
}

@Test
public void queryBookById() {
System.out.println(bookService.queryBookById(5));
}

@Test
public void queryBooks() {
for (Book queryBook:bookService.queryBooks()) {
System.out.println(queryBook);
}


}
}

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

1.5.1、图书列表功能的实现

1、图解列表流程

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

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

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.: 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.: 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、前后台的简单介绍

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

1.5.3、添加图书功能的实现

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

修改 book_edit.jsp

<%--
Created by IntelliJ IDEA.: 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、删除图书功能的实现

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

修改 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、修改图书信息

第一步 回显修改的信息

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

修改 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);
}
}

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

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

修改 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);
}
}


举报

相关推荐

0 条评论