第五阶段-尚硅谷书城案例第一部分

1、MVC的概念

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

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

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

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

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

MVC 是一种思想
MVC 的理念是将软件代码拆分成组件,单独开发,组合使用(目的还是为了解耦合
在这里插入图片描述
MVC 的作用是为了降低耦合,让代码合理分层。方便后期升级和维护

2、图书模块

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

在这里插入图片描述

2.2、编写图书模块的 JavaBean

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

其中
在这里插入图片描述
在这里插入图片描述

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

package com.aiguigu.dao;

import com.aiguigu.pojo.Book;

import java.util.List;

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

测试
在 BookDao 接口界面 按 ctrl + shift +T 创建测试类
在这里插入图片描述

package com.aiguigu.test;

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

import javax.swing.text.html.parser.Entity;
import java.math.BigDecimal;
import java.util.List;

import static org.junit.Assert.*;

public class BookDaoTest {
        BookDao bookDao = new BookDaoImpl();
    @Test
    public void addBook() {
        bookDao.addBook(new Book(null,"测试","测试",new BigDecimal(199),1000,1000,null));
    }

    @Test
    public void deleteBookById() {

    }

    @Test
    public void updateBook() {
        bookDao.updateBook(new Book(24,"测试3","测试3",new BigDecimal(199),1000,1000,null));
    }

    @Test
    public void queryBookByid() {
        System.out.println(bookDao.queryBookByid(2));
    }

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

运行结果
在这里插入图片描述

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

package com.aiguigu.service;

import com.aiguigu.pojo.Book;

import java.util.List;

public interface BookService {
    public void addBook(Book book);

    public void deleteBook(Integer id);

    public void updateBook(Book book);

    public Book queryBookById(Integer id);

    public List<Book> queryBook();
}

测试

package com.aiguigu.test;

import com.aiguigu.pojo.Book;
import com.aiguigu.service.BookService;
import com.aiguigu.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,"service层测试","service",new BigDecimal(1100),100,100,null));
    }

    @Test
    public void deleteBook() {
        bookService.deleteBook(1);
    }

    @Test
    public void updateBook() {
        bookService.updateBook(new Book(25,"service层测试2","service2",new BigDecimal(1100),100,100,null));
    }

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

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

    }
}

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

2.5.1、图书列表功能实现

分析:
在这里插入图片描述
在这里插入图片描述
tip:先将数据库里的图书信息 搜索出来,才可以进行增删改操作,所以先做 list() 功能。
jsp 页面无法直接访问数据库,得先通过 Servlet ,Servlet调用 Service层,拿到数据,将数据发送到 request 域中,jsp页面从 request域 获取数据 ,通过 _JSTL库遍历出来显示在jsp页面上
代码实现:

  1. 在 manager_menu.jsp 页面中 修改 图书管理的a标签跳转界面,跳转到manager/bookServlet
<a href="manager/bookServlet?action=list">图书管理</a>
  1. 在BookServlet 实现
    (1)查询全部图书
    (2)保存到Request域中
    (3)请求转发到pages/manager.jsp 页面
    tip:BookServlet得配置 web.xml 文件,路径为:manager/bookServlet
    在这里插入图片描述
    在这里插入图片描述
  protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.通过BookService 查询全部图书
        List<Book> books = bookService.queryBook();
        //2.把全部图书保存到 Request 域中
        req.setAttribute("books",books);
        //3.请求转发到 /pages/manager/book_manager.jsp 页面
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }
  1. 在 manager.jsp 页面 展示所有图书
    (1)从Request域中获取全部图书信息
    (2)使用JSTL标签库遍历输出
    这里要导入JSTL标签库包才能使用
    在这里插入图片描述
<tr>
				<td>名称</td>
				<td>价格</td>
				<td>作者</td>
				<td>销量</td>
				<td>库存</td>
				<td colspan="2">操作</td>
			</tr>
			<c:forEach items="${requestScope.books}" var="books">
				<tr>
					<td>${books.name}</td>
					<td>${books.price}</td>
					<td>${books.author}</td>
					<td>${books.sales}</td>
					<td>${books.stock}</td>
					<td><a href="manager/bookServlet?action=getBook&id=${books.id}">修改</a></td>
					<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${books.id}">删除</a></td>
				</tr>

			</c:forEach>
  1. 最后运行时发现还是无法访问,是以为,a标签默认用 get请求,而BaseServlet 重写的是 doPost()方法,解决:
    在BaseServlet重写 doGet()方法,在doGet()方法里执行 doPost()方法即可
public abstract class BaseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值