继续来做案例练习,本篇学习如何删除图书,也就是在list.jsp页面的图书列表中,点击删除按钮,这条图书记录信息就从列表消失,然后相当于刷新当前页面,列表就少了一条图书记录。
1.需求场景
例如把Python入门这本书删除。
2.思路分析
还是画一个图,和前面一样。
红圈就是我们本篇的内容,简单来说,点击删除这个链接,需要把该图书的id传进去,然后跳转到一个delBookServlet的servlet,然后Dao层执行delete语句,最后跳转到BookListServlet再查询一下图书数据,显示list.jsp页面上。
3.代码实现
3.1 修改list.jsp中删除链接的跳转信息
项目中找到/admin/products/list.jsp, 大概在140-145行代码附件,给这个删除图片条件跳转链接。
<td align="center" style="HEIGHT: 22px" width="7%"><a
href="${pageContext.request.contextPath}/delBookServlet?id=${b.id}">
<img
src="${pageContext.request.contextPath}/admin/images/i_del.gif"
width="16" height="16" border="0" style="CURSOR: hand">
</a>
</td>
3.2 创建一个空的delBookServlet文件
Eclipse上右键菜单选择servlet,会自动配置web.xml
3.3 Dao层添加执行删除的sql语句
在BookDao接口中添加如下方法(原有基础上新增)
/**
* 根据id删除图书
* @param id
* @return
* @throws SQLException
*/
public void delBook(String id) throws SQLException;
BookDaoImpl.java新增实现方法
public void delBook(String id) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
qr.update("delete from book where id=?", id);
}
3.4 service添加删除图书方法
BookService接口添加如下方法
public void delBook(String id);
BookServiceImpl.java新增如下方法
public void delBook(String id) {
try {
bd.delBook(id);
} catch (SQLException e) {
e.printStackTrace();
}
}
3.4 DelBookServlet完整代码
package com.anthony.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.anthony.service.BookService;
import com.anthony.service.BookServiceImpl;
public class DelBookServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
BookService bs = new BookServiceImpl();
bs.delBook(id);
//转发
request.getRequestDispatcher("/bookListServlet").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3.5测试
测试就不贴结果,练习了好几次这样的练习,我一次性就写对了删除功能的代码,没有任何错误和调试过程。但是这么做有一点不友好,万一点错了也进行删除,所以需要添加一个询问用户是否确认要删除的弹窗。
这个效果是这实现的。
先写一个js代码,一个函数,然后在点击删除图片这里调用这个js代码就可以。
function delBook(id){
if(confirm("是否确定删除图书?"+id)){
location.href="${pageContext.request.contextPath}/delBookServlet?id=" + id;
}
}
上面这段代码大概写16行到20行之间,然后140行附近这个跳转代码这样写。
<td align="center" style="HEIGHT: 22px" width="7%"><a
href="javascript:delBook('${b.id }')">
<img
src="${pageContext.request.contextPath}/admin/images/i_del.gif"
width="16" height="16" border="0" style="CURSOR: hand">