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 页面,即要实现添加,又要实现修改操作。
?
|