修改商品的原理图
jsp页面
edit.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <HTML> <HEAD> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <LINK href="${pageContext.request.contextPath}/admin/css/Style.css" type="text/css" rel="stylesheet"> <script language="javascript" src="${pageContext.request.contextPath}/admin/js/public.js"></script> <script language="javascript" src="${pageContext.request.contextPath}/admin/js/check.js"></script> </HEAD> <body> <!-- 上传文件 enctype="multipart/form-data" 修改语句:update products set xxx xxx xxx where pid=? 偷偷的传 --> <form id="userAction_save_do" name="Form1" action="${pageContext.request.contextPath }/product" method="post" > <!-- post提交方法添加一个隐藏域 --> <input type="hidden" name="method" value="update"/> <input type="hidden" name="pid" value="${product.pid }"/> <table cellSpacing="1" cellPadding="5" width="100%" align="center" bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0"> <tr> <td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4" height="26"><strong><STRONG>编辑商品</STRONG> </strong></td> </tr> <tr> <td align="center" bgColor="#f5fafe" class="ta_01">商品名称:</td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="pname" class="bg" value="${product.pname }" /></td> <td align="center" bgColor="#f5fafe" class="ta_01">商品价格:</td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="price" class="bg" value="${product.price }" /></td> </tr> <tr> <td align="center" bgColor="#f5fafe" class="ta_01">商品数量:</td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="pnum" class="bg" value="${product.pnum }" /></td> <td align="center" bgColor="#f5fafe" class="ta_01">商品类别:</td> <td class="ta_01" bgColor="#ffffff"> <%-- 判断类别 <c:if test="${product.category eq ‘计算机‘ }">selected</c:if> --%> <select name="category" id="category"> <option value="">--选择商品类加--</option> <option value="文学" <c:if test="${product.category eq ‘文学‘ }">selected</c:if>>文学</option> <option value="生活" <c:if test="${product.category eq ‘生活‘ }">selected</c:if>>生活</option> <option value="计算机" <c:if test="${product.category eq ‘计算机‘ }">selected</c:if>>计算机</option> <option value="外语" <c:if test="${product.category eq ‘外语‘ }">selected</c:if>>外语</option> <option value="经营" <c:if test="${product.category eq ‘经营‘ }">selected</c:if>>经营</option> <option value="励志" <c:if test="${product.category eq ‘励志‘ }">selected</c:if>>励志</option> <option value="社科" <c:if test="${product.category eq ‘社科‘ }">selected</c:if>>社科</option> <option value="学术" <c:if test="${product.category eq ‘学术‘ }">selected</c:if>>学术</option> <option value="少儿" <c:if test="${product.category eq ‘少儿‘ }">selected</c:if>>少儿</option> <option value="艺术" <c:if test="${product.category eq ‘艺术‘ }">selected</c:if>>艺术</option> <option value="原版" <c:if test="${product.category eq ‘原版‘ }">selected</c:if>>原版</option> <option value="科技" <c:if test="${product.category eq ‘科技‘ }">selected</c:if>>科技</option> <option value="考试" <c:if test="${product.category eq ‘考试‘ }">selected</c:if>>考试</option> <option value="生活百科" <c:if test="${product.category eq ‘生活百科‘ }">selected</c:if>>生活百科</option> </select></td> </tr> <tr> <td align="center" bgColor="#f5fafe" class="ta_01">商品图片:</td> <td class="ta_01" bgColor="#ffffff" colSpan="3"> <input type="file" name="upload" size="30" value="" /></td> </tr> <TR> <TD class="ta_01" align="center" bgColor="#f5fafe">商品描述:</TD> <TD class="ta_01" bgColor="#ffffff" colSpan="3"> <textarea name="description" cols="30" rows="3" style="WIDTH: 96%">${product.description}</textarea> </TD> </TR> <TR> <td align="center" colSpan="4" class="sep1"><img src="${pageContext.request.contextPath}/admin/images/shim.gif"> </td> </TR> <tr> <td class="ta_01" style="WIDTH: 100%" align="center" bgColor="#f5fafe" colSpan="4"> <!-- 提交 --> <input type="submit"class="button_ok" value="确定"> <FONT face="宋体"> </FONT> <!-- 重置 --> <input type="reset" value="重置" class="button_cancel"> <FONT face="宋体"> </FONT> <!-- 返回 --> <INPUT class="button_ok" type="button" onclick="history.go(-1)" value="返回" /> <span id="Label1"> </span> </td> </tr> </table> </form> </body> </HTML> list.jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <HTML> <HEAD> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="${pageContext.request.contextPath}/admin/css/Style.css" rel="stylesheet" type="text/css" /> <script language="javascript" src="${pageContext.request.contextPath}/admin/js/public.js"></script> <script type="text/javascript"> //点击添加的按钮,跳转到添加商品的页面 function addProduct() { //相当于超链接 window.location.href = "${pageContext.request.contextPath}/admin/products/add.jsp"; } </script> </HEAD> <body> <br> <!-- 按条件查询 按条件查询 按条件查询 按条件查询 按条件查询 --> <form id="Form1" name="Form1" action="${pageContext.request.contextPath}/product" method="post"> <input type="hidden" name="method" value="findByWhere"/> <table cellSpacing="1" cellPadding="0" width="100%" align="center" bgColor="#f5fafe" border="0"> <TBODY> <tr> <td class="ta_01" align="center" bgColor="#afd1f3"> <strong>查询 条 件</strong> </td> </tr> <tr> <td> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td height="22" align="center" bgColor="#f5fafe" class="ta_01"> 商品编号: </td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="pid" size="15" id="Form1_userName" class="bg" /> </td> <td height="22" align="center" bgColor="#f5fafe" class="ta_01"> 类别: </td> <td class="ta_01" bgColor="#ffffff"> <select name="category" id="category"> <option value="" selected="selected">--选择商品类加--</option> <option value="文学">文学</option> <option value="生活">生活</option> <option value="计算机">计算机</option> <option value="外语">外语</option> <option value="经营">经营</option> <option value="励志">励志</option> <option value="社科">社科</option> <option value="学术">学术</option> <option value="少儿">少儿</option> <option value="艺术">艺术</option> <option value="原版">原版</option> <option value="科技">科技</option> <option value="考试">考试</option> <option value="生活百科">生活百科</option> </select> </td> </tr> <tr> <td height="22" align="center" bgColor="#f5fafe" class="ta_01"> 商品名称: </td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="pname" size="15" id="Form1_userName" class="bg" /> </td> <td height="22" align="center" bgColor="#f5fafe" class="ta_01">价格区间(元):</td> <td class="ta_01" bgColor="#ffffff"> <input type="text" name="minprice" size="10" />- <input type="text" name="maxprice" size="10" /> </td> </tr> <tr> <td width="100" height="22" align="center" bgColor="#f5fafe"class="ta_01"></td> <td class="ta_01" bgColor="#ffffff"> <font face="宋体" color="red"> </font> </td> <td align="right" bgColor="#ffffff" class="ta_01"><br><br></td> <td align="right" bgColor="#ffffff" class="ta_01"> <button type="submit" id="search" name="search" value="查询" class="button_view"> 查询 </button> <input type="reset" name="reset" value="重置" class="button_view" /> </td> </tr> </table> </td> </tr> <tr> <td class="ta_01" align="center" bgColor="#afd1f3"><strong>商品列表</strong> </TD> </tr> <tr> <td class="ta_01" align="right"> <!-- 添加的按钮 添加的按钮 添加的按钮 添加的按钮 添加的按钮 添加的按钮 添加的按钮 添加的按钮 --> <button type="button" id="add" name="add" value="添加;" class="button_add" onclick="addProduct()">添加 </button> </td> </tr> <tr> <td class="ta_01" align="center" bgColor="#f5fafe"> <table cellspacing="0" cellpadding="1" rules="all" bordercolor="gray" border="1" id="DataGrid1" style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: 100%; WORD-BREAK: break-all; BORDER-BOTTOM: gray 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #f5fafe; WORD-WRAP: break-word"> <tr style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3"> <td align="center" width="24%">序号</td> <td align="center" width="18%">商品名称</td> <td align="center" width="9%">商品价格</td> <td align="center" width="9%">商品数量</td> <td width="8%" align="center">商品类别</td> <td width="8%" align="center">编辑</td> <td width="8%" align="center">删除</td> </tr> <!-- for标签想象增强for循环 for(数据类型 变量:要遍历的集合) --> <c:forEach var="p" items="${pList }" varStatus="vs"> <!-- varStatus用于迭代数据,从1开始 --> <tr onmouseover="this.style.backgroundColor = ‘white‘" onmouseout="this.style.backgroundColor = ‘#F5FAFE‘;"> <td style="CURSOR: hand; HEIGHT: 22px" align="center" width="23">${vs.count }</td> <td style="CURSOR: hand; HEIGHT: 22px" align="center" width="18%">${p.pname }</td> <td style="CURSOR: hand; HEIGHT: 22px" align="center" width="8%">${p.price }</td> <td style="CURSOR: hand; HEIGHT: 22px" align="center" width="8%">${p.pnum }</td> <td style="CURSOR: hand; HEIGHT: 22px" align="center"> ${p.category }</td> <!-- 编辑修改 编辑修改 编辑修改 编辑修改 编辑修改 编辑修改 --> <td align="center" style="HEIGHT: 22px" width="7%"> <a href="${pageContext.request.contextPath }/product?method=initUpdate&pid=${p.pid}"> <img src="${pageContext.request.contextPath}/admin/images/i_edit.gif" border="0" style="CURSOR: hand"> </a> </td> <td align="center" style="HEIGHT: 22px" width="7%"><a href="#"> <img src="${pageContext.request.contextPath}/admin/images/i_del.gif" width="16" height="16" border="0" style="CURSOR: hand"> </a> </td> </tr> </c:forEach> </table> </td> </tr> </TBODY> </table> </form> </body> </HTML>
三层架构
/** * 商品的控制器 * @author mjl * */ public class ProductServlet extends BaseServlet { /** * 添加商品 * @param request * @param response * @throws ServletException * @throws IOException */ public void addProduct(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1.接收数据 * 2.封装数据 * 3.处理数据 * 4.显示数据 */ //接收数据 Map<String,String[]> map=request.getParameterMap(); Product p=new Product(); try { //封装数据 BeanUtils.populate(p, map); System.out.println(p); //处理数据 ProductService ps=new ProductService(); //保存数据 ps.save(p); //如果添加成功,重定向到findAll response.sendRedirect(request.getContextPath()+"/product?method=findAll"); } catch (Exception e) { e.printStackTrace(); //捕获异常 request.setAttribute("msg", e.getMessage()); request.getRequestDispatcher("/admin/products/add.jsp").forward(request, response); } } /** * 查询所有的商品 * @param request * @param response * @throws ServletException * @throws IOException */ public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1.接收数据 * 2.封装数据 * 3.处理数据 * 4.显示数据 */ //没有参数,也不用封装 ProductService ps=new ProductService(); //查询所有的商品的信息 List<Product> pList=ps.findAll(); //存入到request域对象中 request.setAttribute("pList", pList); request.getRequestDispatcher("/admin/products/list.jsp").forward(request, response); /*前后两个页面 有数据传递 用请求转发,没有则用重定向。 比如servlet查询了数据需要在页面显示,就用请求转发。 比如servlet做了update操作跳转到其他页面,就用重定向。*/ } /** * 初始化的修改页面 * 用于点击编辑按钮跳转到编辑页面 * @param request * @param response * @throws ServletException * @throws IOException */ public void initUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 通过主键去查询该条记录 */ String pid=request.getParameter("pid"); ProductService ps=new ProductService(); Product p=ps.findById(pid); //存入到request域 /** * 服务器端域对象 域对象可以共享数据 * servletContext 服务器启动,ServletContext创建了,服务器关闭的时候,销毁!与天地同寿!!被所有的资源共享。 * HttpSession 代表一次会话!打开浏览器开始,关闭浏览器结束。发送多次请求,得到多次响应。保存每个人相关的信息。 * request 代表一次请求。只能发送一次,发送完毕就销毁。保存一些提示的信息,或者要显示的数据的。 */ request.setAttribute("product", p); request.getRequestDispatcher("/admin/products/edit.jsp").forward(request, response); } /** * 修改商品 * @param request * @param response * @throws ServletException * @throws IOException */ public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取数据 Map<String,String[]> map=request.getParameterMap(); Product product=new Product(); try { BeanUtils.populate(product, map); ProductService ps=new ProductService(); ps.update(product); //跳转到页面 //如果修改成功,重定向到findAll response.sendRedirect(request.getContextPath()+"/product?method=findAll"); } catch (Exception e) { e.printStackTrace(); } } /** * 按条件查询所有的商品 * @param request * @param response * @throws ServletException * @throws IOException */ public void findByWhere(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收请求的参数 String pid=request.getParameter("pid"); String category=request.getParameter("category"); String pname=request.getParameter("pname"); String minprice=request.getParameter("minprice"); String maxprice=request.getParameter("maxprice"); //调用持久层 ProductService ps=new ProductService(); List<Product> pList=ps.findByWhere(pid,category,pname,minprice,maxprice); request.setAttribute("pList", pList); request.getRequestDispatcher("/admin/products/list.jsp").forward(request, response); } } /** * 商品业务层 * @author mjl * */ public class ProductService { /** * 保存商品 * @param p * @throws SQLException * @throws MyException */ public void save(Product p) throws SQLException, MyException{ //自己维护主键 p.setPid(MyUUIDUtils.getUUID()); //先设置imgurl属性值为Null p.setImgUrl(null); //调用持久层,保存数据 ProductDao dao=new ProductDao(); dao.save(p); } /** * 查询所有的商品 * @return */ public List<Product> findAll() { ProductDao dao=new ProductDao(); return dao.findAll(); } /** * 通过主键查询该条记录 * @param pid * @return */ public Product findById(String pid) { ProductDao dao=new ProductDao(); return dao.findById(pid); } /** * 修改商品 * @param product */ public void update(Product product) { ProductDao dao=new ProductDao(); dao.update(product); } /** * 按条件查询 * @param pid * @param category * @param pname * @param minprice * @param maxprice * @return */ public List<Product> findByWhere(String pid, String category, String pname, String minprice, String maxprice) { ProductDao dao=new ProductDao(); return dao.findByWhere(pid,category,pname,minprice,maxprice); } public List<Product> findByCondition(String pid, String category, String pname, String minprice, String maxprice) { ProductDao dao=new ProductDao(); return dao.findByCondition(pid,category,pname,minprice,maxprice); } } /** * 商品的持久层 * @author mjl * */ public class ProductDao { public void save(Product p) throws SQLException, MyException{ //使用DBUtils工具类 QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); //编写sql语句 String sql="insert into products values(?,?,?,?,?,?,?)"; Object [] params={p.getPid(),p.getPname(),p.getPrice(),p.getCategory(),p.getPnum(),p.getImgUrl(),p.getDescription()}; //执行sql语句,如果成功,返回1 int count=runner.update(sql, params); if(count!=1){ throw new MyException("亲,添加商品错误"); } } public List<Product> findAll() { QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); try { return runner.query("select * from products", new BeanListHandler<Product>(Product.class)); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询所有的商品错误了!"); } } public Product findById(String pid) { QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); try { Product p=runner.query("select * from products where pid=?", new BeanHandler<Product>(Product.class),pid); return p; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("查询该条记录错误了!"); } } public void update(Product p) { QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); String sql="update products set pname=?,price=?,category=?,pnum=?,imgurl=?,description=? where pid=?"; Object [] params={p.getPname(),p.getPrice(),p.getCategory(),p.getPnum(),p.getImgUrl(),p.getDescription(),p.getPid()}; try { runner.update(sql,params); } catch (SQLException e) { e.printStackTrace(); } } public List<Product> findByWhere(String pid, String category, String pname, String minprice, String maxprice) { //创建集合,用来存储参数 List<Object> list=new ArrayList<Object>(); QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); //拼接sql语句 StringBuffer sb=new StringBuffer("select * from products where 1=1 "); //判断参数是否为空,如果不为空,说明用户输入了这些值,如果为空,说明没有输入 if(pid!=null && !pid.trim().isEmpty()){ //trim()去掉空格 //拼接sql语句 sb.append(" and pid like ? "); //like模糊查询 list.add("%"+pid+"%"); } if(category!=null && !category.trim().isEmpty()){ //trim()去掉空格 //拼接sql语句 sb.append(" and category = ? "); list.add(category); } if(pname!=null && !pname.trim().isEmpty()){ //trim()去掉空格 //拼接sql语句 sb.append(" and pname = ? "); list.add(pname); } if(minprice!=null && !minprice.trim().isEmpty()){ //trim()去掉空格 //拼接sql语句 sb.append(" and price > ? "); } if(maxprice!=null && !maxprice.trim().isEmpty()){ //trim()去掉空格 //拼接sql语句 sb.append(" and price < ? "); list.add(maxprice); } //执行 try { return runner.query(sb.toString(), new BeanListHandler<Product>(Product.class),list.toArray()); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } public List<Product> findByCondition(String pid, String category, String pname, String minprice, String maxprice) { StringBuffer sb=new StringBuffer(); sb.append("select * from products where 1=1 "); List<Object> list=new ArrayList(); QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); if(pid!=null && !pid.trim().isEmpty()){ sb.append(" and pid like ? "); list.add("%"+pid+"%"); } if(category!=null && !category.trim().isEmpty()){ sb.append(" and category = ? "); list.add(category); } if(pname!=null && !pname.trim().isEmpty()){ sb.append(" and pname = ? "); list.add(pname); } if(minprice!=null && !minprice.trim().isEmpty()){ sb.append(" and price > ? "); list.add(minprice); } if(maxprice!=null && !maxprice.trim().isEmpty()){ sb.append(" and price< ? "); list.add(maxprice); } try { return runner.query(sb.toString(), new BeanListHandler<Product>(Product.class),list.toArray()); } catch (SQLException e) { e.printStackTrace(); } return null; } }
分页的实现
jsp页面中,点击全部商品跳转servlet
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <script type="text/javascript" src="${pageContext.request.contextPath}/js/my.js"> </script> <script type="text/javascript"> </script> <div id="divmenu"> <a href="${pageContext.request.contextPath}/showProductByPage?category=文学">文学</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=生活">生活</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=计算机">计算机</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=外语">外语</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=经营">经管</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=励志">励志</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=社科">社科</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=学术">学术</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=少儿">少儿</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=艺术">艺术</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=原版">原版</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=科技">科技</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=考试">考试</a> <a href="${pageContext.request.contextPath}/showProductByPage?category=生活百科">生活百科</a> <a href="${pageContext.request.contextPath}/product?method=findByPage" style="color:#FFFF00">全部商品目录</a> </div> <div id="divsearch"> <form action="${pageContext.request.contextPath}/findProductBySearch" method="post"> <table width="100%" border="0" cellspacing="0"> <tr> <td style="text-align:right; padding-right:220px"> Search <input type="text" name="name" class="inputtable" onkeyup="searchName();" id="name" /> <input type="image" src="images/serchbutton.gif" border="0" style="margin-bottom:-4px"> </td> </tr> </table> </form> </div> <div id="content" style="background-color:white;width:128px; text-align:left;margin-left:945px;color:black;float:left;margin-top: -20px;display: none"> </div>
ProductServlet处理业务逻辑
/** * 分页查询 * @param request * @param response * @throws ServletException * @throws IOException */ public void findByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1.解决当前页的问题 * 以后用户在客户端给我传参数,如果参数为null,说明是第一页,如果不为空,传的是几页就是几页 * 2.每一页显示的条数的问题 */ //1.解决当前页的问题 int pageCode=getPageCode(request); //2.解决每页显示的记录条数 int pageSize=4; //调用业务层 ProductService ps=new ProductService(); //分页的查询 PageBean page=ps.findByPage(pageCode,pageSize); //存入 request.setAttribute("page", page); request.getRequestDispatcher("/product_list.jsp").forward(request, response); } /** * 获取当前页 * @param request * @return */ public int getPageCode(HttpServletRequest request){ //获取当前页 String pc=request.getParameter("pc"); //判断,说明pc没有传,说明第一次 if(pc==null){ return 1; }else{ return Integer.parseInt(pc); } }
ProductService
/** * 分页的查询 * @param pageCode * @param pageSize * @return */ public PageBean findByPage(int pageCode, int pageSize) { ProductDao dao=new ProductDao(); return dao.finByPage(pageCode,pageSize); }
ProductDao
/** * 分页的查询 * @param pageCode * @param pageSize * @return */ public PageBean finByPage(int pageCode, int pageSize) { //目的:创建PageBean对象,把所有的属性数据全部搞定 PageBean<Product> page=new PageBean(); page.setPageCode(pageCode); page.setPageSize(pageSize); QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource()); //设置总的记录数 String countSql="select count(*) from products "; String selSql="select * from products limit ?,?"; try { //查询总的记录数 long totalCount=(long) runner.query(countSql, new ScalarHandler()); //设置总的记录数 page.setTotalCount((int)totalCount); //查询每页显示的数据 List<Product> beanList=runner.query(selSql, new BeanListHandler<Product>(Product.class),(pageCode-1)*pageSize,pageSize); //设置每页显示的数据 page.setBeanList(beanList); } catch (SQLException e) { e.printStackTrace(); } return page; }
product_list.jsp页面显示分页内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>bookStore列表</title> <%--导入css --%> <link rel="stylesheet" href="css/main.css" type="text/css" /> </head> <body class="main"> <jsp:include page="head.jsp" /> <jsp:include page="menu_search.jsp" /> <div id="divpagecontent"> <table width="100%" border="0" cellspacing="0"> <tr> <td> <div style="text-align:right; margin:5px 10px 5px 0px"> <a href="index.jsp">首页</a> > 计算机 > 图书列表 </div> <table cellspacing="0" class="listcontent"> <tr> <td> <h1>商品目录</h1> <hr /> <h1>计算机</h1> 共${page.totalCount }种商品 <hr /> <div style="margin-top:20px; margin-bottom:5px"> <img src="images/productlist.gif" width="100%" height="38" /> </div> <table cellspacing="0" class="booklist"> <!-- 一页只有四个 对象,所以遍历4次 --> <tr> <c:forEach var="p" items="${page.beanList }"> <td> <div class="divbookpic"> <p> <a href="product_info.jsp"> <img src="bookcover/101.jpg" width="115" height="129" border="0" /> </a> </p> </div> <div class="divlisttitle"> <a href="product_info.jsp">书名:${p.pname }<br />售价:${p.price } </a> </div> </td> </c:forEach> </tr> </table> <div class="pagination"> <ul> <c:if test="${page.pageCode>1 }"> <li class="disablepage"> <a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${page.pageCode-1}" >上一页</a> </li> </c:if> <!--也可以产生这种循环 for(int i=1;i<=10;i++){} --> <%-- 目的:控制begin和end的值 逻辑: 当总页数<=10,说明一共不超过10页,让begin=1,end=总页数 当总页数>10,让begin=pageCode-5,end=pageCode+4 头溢出: 如果当前页=3,begin=3-5=-2 如果begin<1,让begin=1,end=10 尾溢出: 如果end>总页数,让end=总页数,begin=总页数-9 --%> <!-- 编写逻辑 判断开始页码结束页码--> <c:choose> <c:when test="${page.totalPage<=10 }"> <c:set var="begin" value="1" ></c:set> <c:set var="end" value="${page.totalPage }"></c:set> </c:when> <c:otherwise> <c:set var="begin" value="${page.pageCode-5 }" ></c:set> <c:set var="end" value="${page.pageCode+4 }"></c:set> <!-- 判断头溢出 --> <c:if test="${begin<1 }"> <c:set var="begin" value="1" ></c:set> <c:set var="end" value="10"></c:set> </c:if> <!-- 判断尾溢出 --> <c:if test="${end>page.totalPage }"> <c:set var="begin" value="${page.totalPage-9 }" ></c:set> <c:set var="end" value="${page.totalPage }"></c:set> </c:if> </c:otherwise> </c:choose> <c:forEach var="i" begin="${begin }" end="${end }" step="1"> <!-- 当前页==i --> <c:if test="${page.pageCode==i }"> <li class="currentpage">${i }</li> </c:if> <c:if test="${page.pageCode!=i }"> <li><a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${i}">${i }</a> </c:if> </c:forEach> <c:if test="${page.pageCode<page.totalPage }"> <li class="nextpage"> <a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${page.pageCode+1}">下一页</a> </li> </c:if> </ul> </div> </td> </tr> </table> </td> </tr> </table> </div> <jsp:include page="foot.jsp" /> </body> </html>