IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> JavaWeb书城项目第五阶段---图书模块 -> 正文阅读

[开发测试]JavaWeb书城项目第五阶段---图书模块

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");
}

MVC 概念

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

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

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

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

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

MVC 是一种思想 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)
);

decimal(11,2)规定了存储的值将不会超过十一位数字 ,而且小数点后面有两位数字。

float类型的字段会自动将值四舍五入,而decimal类型的不会,如果用flocat类型的去存与金额有关的数据的时候就会出现问题,而decimal类型的就不会。

1.2、编写图书模块的 JavaBean

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

    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 Integer getSales() {
        return sales;
    }

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

    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 getStock() {
        return stock;
    }

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

    public String getImg_Path() {
        return img_Path;
    }

    public void setImg_Path(String img_Path) {
        this.img_Path = img_Path;
    }

    public Book(Integer id, String name, Integer sales, String author, BigDecimal price, Integer stock, String img_Path) {
        this.id = id;
        this.name = name;
        this.sales = sales;
        this.author = author;
        this.price = price;
        this.stock = stock;
       this.img_Path=img_Path;
    }

public Book(){

}

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

1.3、编写图书模块的 Dao

public interface BookDao {
    public int addBook(Book book);
    public int deleteBookById(Integer id);
    public int updateBook(Book book);
    public Book queryBookById(Integer id);
    public List<Book> queryBooks();
}
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.getImg_Path());
    }

    @Override
    public int deleteBookById(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.getImg_Path(),book.getId());
    }

    @Override
    public Book queryBookById(Integer id) {
        String sql="SELECT `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path`  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` from t_book";
        return queryForList(Book.class,sql);
    }
}

1.4、编写图书模块的 Service

public interface BookService {
    public void addBook(Book book);
    public void deleteBookById(Integer id);
    public void updateBook(Book book);
    public Book queryBookById(Integer id);
    public List<Book> queryBooks();
}

?

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.deleteBookById(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();
    }
}

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

1.5.1、图书列表功能的实现

1、图解列表功能流程:

?2、BookServlet 程序中添加 list 方法

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);

}

3、修改【图书管理】请求地址

?4、修改 pages/manager/book_manager.jsp 页面的数据遍历输出

<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>

?1.5.2、前后台的简单介绍

?1.5.3、添加图书功能的实现

1.5.3.1、添加图书流程细节:

?1.5.3.2、问题说明:表单重复提交:

当用户提交完请求,浏览器会记录下最后一次请求的全部信息。当用户按下功能键 F5,就会发起浏览器记录的最后一次 请求。

1.5.3.3、BookServlet 程序中添加 add 方法

配置文件中的访问地址是/manager/bookServlet,而不是包名manager,这是用来区分前台和后台的

protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {

// 1、获取请求的参数==封装成为 Book 对象
Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());

// 2、调用 BookService.addBook()保存图书
bookService.addBook(book);

// 3、跳到图书列表页面
// /manager/bookServlet?action=list
// req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req, resp);

resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");

}

1.5.3.4、修改 book_edit.jsp 页面

<div id="main">
<form action="manager/bookServlet" method="get">
<input type="hidden" name="action" value="add" />

修改表单的提交地址,并添加一个隐藏域

1.5.4、删除图书功能的实现

1.5.4.1、图解删除流程:

?1.5.4.2、BookServlet 程序中的 delete 方法

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");
}

1.5.4.3、给 WebUtils 工具类添加转换 int 类型的工具

如果strInt为空,会给他赋默认值

public static int parseInt(String strInt,int defaultValue) {
    try {
        return Integer.parseInt(strInt);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return defaultValue;
}

1.5.4.4、修改删除的连接地址:

?1.5.4.5、给删除添加确认提示操作:

<script type="text/javascript">
    $(function () {
    // 给删除的 a 标签绑定单击事件,用于删除的确认提示操作
        $("a.deleteClass").click(function () {

        return confirm("你确定要删除【" + $(this).parent().parent().find("td:first").text() + "】?");
        });
    });
</script>

1.5.5、修改图书功能的实现

1.5.5.1:图解修改图书细节:

?

1.5.5.2、更新【修改】的请求地址:?

?1.5.5.3、BookServlet 程序中添加 getBook 方法

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

1.5.5.4、在 book_edit.jsp页面中显示要修改的信息

<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>

1.5.5.5、在 BookServlet 程序中添加 update 方法

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");

}

1.5.5.6、解决 book_edit.jsp 页面,即要实现添加,又要实现修改操作。

?

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:38:55  更:2021-08-28 09:39:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:47:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码