<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="BookServlet?op=add" method="post"> 书名: <input name="bname"/><br/> 价格: <input name="price"/> <br/> 作者: <input name="author"/> <br/> 页码: <input name="pagecount"/> <br/> <input type="submit" value="添加"/> </form> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'update.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="BookServlet?op=update" method="post"> 编号: <input name="bid" value="${book.bid }" readonly="readonly"/> <br/> 书名: <input name="bname" value="${book.bname }"/><br/> 价格: <input name="price" value="${book.price }"/> <br/> 作者: <input name="author" value="${book.author }"/> <br/> 页码: <input name="pagecount" value="${book.pagecount }"/> <br/> <input type="submit" value="提交"> </form> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'showlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body onload="showok(${canshow},'${msg}')"> <script> function showok(canshow,msg) { if(canshow) alert(msg); } function confirm_delete(bid) { if(window.confirm("确定删除编号为"+bid+"的书吗?")) { window.location.href = "BookServlet?op=delete&bid="+bid; } } </script> <table border="1"> <tr> <th> 编号 </th> <th> 书名 </th> <th> 价格 </th> <th> 操作 </th> </tr> <c:set var="i" value="0"/> <c:forEach items="${list}" var="book"> <c:set var="i" value="${i+1}"/> <tr> <td> ${book.bid } </td> <td> ${book.bname } </td> <td> ${book.price } </td> <td> <a href="javascript:confirm_delete(${book.bid})">删除</a> <a href="BookServlet?op=toupdate&bid=${book.bid}">修改</a> </td> </tr> </c:forEach> </table> 一共有${i}本书。 <br/> <a href="add.jsp">重新录入</a> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'showlist.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body onload="showok(${canshow},'${msg}')"> <script> function showok(canshow,msg) { if(canshow) alert(msg); } function confirm_delete(bid) { if(window.confirm("确定删除编号为"+bid+"的书吗?")) { window.location.href = "BookServlet?op=delete&bid="+bid; } } </script> <table border="1"> <tr> <th> 编号 </th> <th> 书名 </th> <th> 价格 </th> <th> 操作 </th> </tr> <c:set var="i" value="0"/> <c:forEach items="${pm.list}" var="book"> <c:set var="i" value="${i+1}"/> <tr> <td> ${book.bid } </td> <td> ${book.bname } </td> <td> ${book.price } </td> <td> <a href="javascript:confirm_delete(${book.bid})">删除</a> <a href="BookServlet?op=toupdate&bid=${book.bid}">修改</a> </td> </tr> </c:forEach> </table> 一共有${i}本书。 <br/> <a href="BookServlet?op=findbypage&pageno=1&pagesize=5">首页</a> <a href="BookServlet?op=findbypage&pageno=${pm.pageno+1}&pagesize=5">下一页</a> <a href="BookServlet?op=findbypage&pageno=${pm.pageno-1}&pagesize=5">上一页</a> <a href="BookServlet?op=findbypage&pageno=${pm.totalpage}&pagesize=5">末页</a> <br/> <a href="add.jsp">重新录入</a> </body> </html>
package com.etc.model.entity; public class Book { private int bid; private String bname; private float price; private String author; //作者 private int pagecount; //页码 public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPagecount() { return pagecount; } public void setPagecount(int pagecount) { this.pagecount = pagecount; } public int getBid() { return bid; } public void setBid(int bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public Book(int bid, String bname, float price, String author, int pagecount) { super(); this.bid = bid; this.bname = bname; this.price = price; this.author = author; this.pagecount = pagecount; } }
package com.etc.model.entity; import java.util.ArrayList; import java.util.List; //分页的数据。对于实体对象的分页封装,必须新增分页的信息 //T为泛型参数 public class PageModel<T> { //分页的数据,用数组来保存! private List<T> list= new ArrayList<T>(); //2个重要的分页参数 private int pagesize; //每页有几条 private int pageno; //第几页,从1开始 //3 总记录数 private int totalcount; //4 总页码数 private int totalpage; public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public int getPagesize() { return pagesize; } public void setPagesize(int pagesize) { this.pagesize = pagesize; } public int getPageno() { return pageno; } public void setPageno(int pageno) { this.pageno = pageno; } public int getTotalcount() { return totalcount; } public void setTotalcount(int totalcount) { this.totalcount = totalcount; } //根据pagesize和总记录数,自动算出总页面数 public int Totalpage() { if(totalcount%pagesize==0) //整除 totalpage = totalcount/pagesize; else //不整除 totalpage = totalcount/pagesize+1; return totalpage; } }
package com.etc.controller; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.etc.model.biz.BookBiz; import com.etc.model.entity.Book; import com.etc.model.entity.PageModel; public class BookServlet extends HttpServlet { /** * Constructor of the object. */ public BookServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ //所有mvc请求的统一入口 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 对请求参数进行解码 request.setCharacterEncoding("utf-8"); //2 对响应进行编码(偶尔也需要用servlet直接响应html-出错了) response.setContentType("text/html;charset=utf-8"); //3 读取op参数 String op = request.getParameter("op"); //4 根据op的不同处理具体的不同请求 if("add".equals(op)) { add(request,response); //添加 } else if("findall".equals(op)) { findall(request,response);//查询全部书 } else if("delete".equals(op)) { delete(request,response);//删除书 } else if("toupdate".equals(op)) { toupdate(request,response);//进入修改页面 } else if("update".equals(op)) { update(request,response);//执行修改 } else if("findbypage".equals(op)) //新增,执行分页查询 { findByPage(request,response); } } private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取参数 int bid = Integer.parseInt(request.getParameter("bid")); String bname = request.getParameter("bname"); float price = Float.parseFloat(request.getParameter("price")); String author = request.getParameter("author"); int pagecount = Integer.parseInt(request.getParameter("pagecount")); //2 调用模型 Book book = new Book(bid, bname, price, author, pagecount); BookBiz biz = new BookBiz(); if(biz.update(book)) { //3 派发视图 //通过本地js实现信息提示并重新发起请求 String html = "<html><body><script>alert('修改成功!');window.location.href='BookServlet?op=findall';</script></body></html>"; response.getWriter().print(html); } else { String html = "<html><body>修改失败!<a href='history.back()'>返回</a></body></html>"; response.getWriter().print(html); } } //进入修改页面 private void toupdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取请求参数 int bid = Integer.parseInt(request.getParameter("bid")); //2 调用模型 BookBiz biz = new BookBiz(); Book book = biz.findByBid(bid); //3 派发视图 //在作用域保存数据 request.setAttribute("book", book); //转发 request.getRequestDispatcher("update.jsp").forward(request, response); } // 执行删除 private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取请求参数 int bid = Integer.parseInt(request.getParameter("bid")); //2 调用模型 BookBiz biz = new BookBiz(); if(biz.delete(bid)) { //3 派发视图 //通过本地js实现信息提示并重新发起请求 String html = "<html><body><script>alert('删除成功!');window.location.href='BookServlet?op=findall';</script></body></html>"; response.getWriter().print(html); } else { String html = "<html><body>删除失败!<a href='history.back()'>返回</a></body></html>"; response.getWriter().print(html); } } //查询全部 private void findall(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取请求参数,无需 //2 调用模型 BookBiz biz = new BookBiz(); List<Book> list = biz.findAll(); //3 派发视图 if(list!=null) //查询成功 { //作用域保存数据 request.setAttribute("list", list); request.setAttribute("canshow", false); request.setAttribute("msg", ""); request.getRequestDispatcher("showlist.jsp").forward(request, response); } else //失败 { String html = "<html><body>查询失败!<a href='history.back()'>返回</a></body></html>"; response.getWriter().print(html); } } //查询指定页码 private void findByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取请求参数, int pageno = Integer.parseInt(request.getParameter("pageno")); int pagesize = Integer.parseInt(request.getParameter("pagesize")); //2 调用模型 BookBiz biz = new BookBiz(); PageModel<Book> pm = biz.findByPage(pageno,pagesize); //3 派发视图 if(pm!=null) //查询成功 { //作用域保存数据 request.setAttribute("pm", pm); request.setAttribute("canshow", false); request.setAttribute("msg", ""); request.getRequestDispatcher("showlist.jsp").forward(request, response); } else //失败 { String html = "<html><body>查询失败!<a href='history.back()'>返回</a></body></html>"; response.getWriter().print(html); } } //处理add的请求 private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1 读取请求参数 String bname = request.getParameter("bname"); float price = Float.parseFloat(request.getParameter("price")); String author = request.getParameter("author"); int pagecount = Integer.parseInt(request.getParameter("pagecount")); //2 调用模型 //创建模型-实体bean Book book = new Book(-1, bname, price,author,pagecount); BookBiz biz = new BookBiz(); if(biz.add(book)) //成功,那么??? { //3 派发视图 //转发到"查询全部"的请求命令 request.getRequestDispatcher("BookServlet?op=findall").forward(request, response); } else //失败 { String html = "<html><body>添加失败!<a href='javascript:history.back()'>返回</a></body></html>"; response.getWriter().print(html); } } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
package com.etc.model.biz; import java.util.List; import com.etc.model.dao.BookDao; import com.etc.model.entity.Book; import com.etc.model.entity.PageModel; //业务bean,实现具体的业务逻辑 public class BookBiz { private BookDao dao = new BookDao(); //添加书,返回是否成功 public boolean add(Book book) //添加书,返回是否添加成功! { //靠dao对象来实现具体的数据库操作 return dao.add(book); } //查询全部的数 public List<Book> findAll() { //靠dao对象来实现具体的数据库操作 return dao.findAll(); } //删除书,返回是否成功 public boolean delete(int bid) //删除书,返回是否添加成功! { //靠dao对象来实现具体的数据库操作 return dao.delete(bid); } //查询指定 编号的书,用于进入修改页面 public Book findByBid(int bid) { return dao.findByBid(bid); } //修改书,返回是否成功 public boolean update(Book book) //修改书,返回是否添加成功! { //靠dao对象来实现具体的数据库操作 return dao.update(book); } //查找第n页的书 public PageModel<Book> findByPage(int pageno,int pagesize) { return dao.findByPage(pageno, pagesize); } }
package com.etc.model.dao; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.etc.model.entity.Book; import com.etc.model.entity.PageModel; import com.etc.utils.JDBCUtil; //实现所有数据库的操作 public class BookDao { //实现书的添加!返回是否成功! public boolean add(Book book) { //通过jdbc工具类来实现添加 String sql = "insert into book(bname,price,author,pagecount) " +" values(?,?,?,?)"; String[] ps = {book.getBname(),book.getPrice()+"",book.getAuthor(),book.getPagecount()+""}; return JDBCUtil.doUpdate(sql, ps)==1; } //实现书的删除!返回是否成功! public boolean delete(int bid) { //通过jdbc工具类来实现添加 String sql = "delete from book where bid=?"; String[] ps = {bid+""}; return JDBCUtil.doUpdate(sql, ps)==1; } //实现书的全部查询 public List<Book> findAll() { List<Book> list = new ArrayList<Book>(); String sql = "select * from book"; ResultSet rs = JDBCUtil.doQuery(sql); try { //依次遍历记录 while (rs.next()) { //读取每条记录的字段值 int bid = rs.getInt("bid"); String bname = rs.getString("bname"); float price = rs.getFloat("price"); String author = rs.getString("author"); int pagecount = rs.getInt("pagecount"); //创建对象并添加到数组中 list.add(new Book(bid, bname, price, author, pagecount)); } } catch (Exception e) { return null; } finally { JDBCUtil.close(rs); } return list; } //实现指定 编号的书的查询 public Book findByBid(int bid) { Book book = null; String sql = "select * from book where bid = ?"; String[] ps = {bid+""}; ResultSet rs = JDBCUtil.doQuery(sql,ps); try { //依次遍历记录 if (rs.next()) { //读取每条记录的字段值 String bname = rs.getString("bname"); float price = rs.getFloat("price"); String author = rs.getString("author"); int pagecount = rs.getInt("pagecount"); //创建对象并添加到数组中 book = new Book(bid, bname, price, author, pagecount); } else //找不到,返回空 return null; } catch (Exception e) { return null; } finally { JDBCUtil.close(rs); } return book; } //实现书的修改!返回是否成功! public boolean update(Book book) { //通过jdbc工具类来实现添加 String sql = "update book set bname=?,price=?,author=?,pagecount=? where bid=?"; String[] ps = {book.getBname(),book.getPrice()+"",book.getAuthor(),book.getPagecount()+"",book.getBid()+""}; return JDBCUtil.doUpdate(sql, ps)==1; } //获得书本的总的记录数 private int getTotalCount() { String sql = "select count(1) as t from book"; ResultSet rs = JDBCUtil.doQuery(sql); try { //依次遍历记录 rs.next(); return rs.getInt("t"); //返回记录数 } catch (Exception e) { return -1; } finally { JDBCUtil.close(rs); } } //实现指定页面数的书的查询 public PageModel<Book> findByPage(int pageno,int pagesize) { List<Book> list = new ArrayList<Book>(); String sql = "select * from book limit "+ pagesize*(pageno-1)+","+pagesize; //设置起点和条数 ResultSet rs = JDBCUtil.doQuery(sql); try { //依次遍历记录 while (rs.next()) { //读取每条记录的字段值 int bid = rs.getInt("bid"); String bname = rs.getString("bname"); float price = rs.getFloat("price"); String author = rs.getString("author"); int pagecount = rs.getInt("pagecount"); //创建对象并添加到数组中 list.add(new Book(bid, bname, price, author, pagecount)); } PageModel<Book> pm = new PageModel<Book>(); pm.setList(list); //该页装载的记录数 pm.setPageno(pageno); //页面数 pm.setPagesize(pagesize); //每页有几条 int count = getTotalCount();//获得总的记录数 pm.setTotalcount(count); //总的记录数 return pm; } catch (Exception e) { return null; } finally { JDBCUtil.close(rs); } } }