基于servlet的分页查询

一.页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 网页使用的语言 -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="${pageContext.request.contextPath}/css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="${pageContext.request.contextPath}/js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
    <style>
        td, th {
            text-align: center;
        }

        span {
            font-size: 15px;
        }

        #page {
            text-align: center;
        }
        .inp{
            margin-bottom: 30px;
            margin-top: 40px;
        }

    </style>
</head>
<body>
<div class="container">
    <h3 style="text-align: center">用户信息列表</h3>
 
    <table border="1" class="table table-bordered table-hover">
        <tr class="success">
            <th>编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>籍贯</th>
            <th>QQ</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
        <c:forEach items="${page.list}" var="user" varStatus="status">
            <tr>
                <td>${status.count}</td>
                <td>${user.username}</td>
                <td>${user.gender}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
                <td>${user.QQ}</td>
                <td>${user.email}</td>
                <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/fingById?id=${user.id}">修改</a>&nbsp;
                        <%--将id作为参数传递过去--%>
                    <a id="delete" class="btn btn-default btn-sm"
                       href="${pageContext.request.contextPath}/deleteUser?id=${user.id}">删除</a></td>
            </tr>
        </c:forEach>
        <tr>
            <td colspan="8" align="center"><a class="btn btn-primary"
                                              href="${pageContext.request.contextPath}/Jsp/add.jsp">添加联系人</a></td>
        </tr>
    </table>
    <nav id="page" aria-label="Page navigation">
        <ul class="pagination">
            <c:if test="${page.currentPage==1}">
                <li class="disabled">
            </c:if>
            <c:if test="${page.currentPage!=1}">
                <li>
            </c:if>

                <a href="${pageContext.request.contextPath}/fingPage?currentPage=${page.currentPage-1}&number=5"
                   aria-label="Previous">
                    <span aria-hidden="true">&laquo;</span>
                </a>
            </li>
            <c:forEach begin="1" end="${page.totalPage}" var="i" step="1">
                <c:if test="${page.currentPage == i}">
                    <li class="active">
                </c:if>
                <c:if test="${page.currentPage != i}">
                    <li>
                </c:if>
                     <a href="${pageContext.request.contextPath}/fingPage?currentPage=${i}&number=5">${i}</a></li>
            </c:forEach>
             <c:if test="${page.currentPage>=page.totalPage}">
                <li class="disabled">
             </c:if>
             <c:if test="${page.currentPage<page.totalPage}">
                <li>
             </c:if>
                <a href="${pageContext.request.contextPath}/fingPage?currentPage=${page.currentPage+1}&number=5"
                   aria-label="Next">
                    <span aria-hidden="true">&raquo;</span>
                </a>
            </li>
            <span>共计<font color="red">${page.totalCount}</font>条记录&nbsp;&nbsp;共<font
                    color="red">${page.totalPage}</font>页</span>
        </ul>
    </nav>
</div>
</body>
</html>

二.servlet

package cn.itcast.Servlet;

import cn.itcast.Utils.PageUtils;
import cn.itcast.service.Impl.UserServiceImpl;
import cn.itcast.service.UserService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/fingPage")
public class FingPage extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        String currentPage = req.getParameter("currentPage");
        String number = req.getParameter("number");
        if (currentPage == null ||"".equals(currentPage)) {
            currentPage="1";
        }
        if(number==null || "".equals(number)){
            number="5";
        }
        int currentPages = Integer.parseInt(currentPage);
        if(currentPages<=0){
            currentPages=1;
        }
        int numbers=numbers = Integer.parseInt(number);
        UserService userService=new UserServiceImpl();
        PageUtils pageUtils = userService.paging(currentPages, numbers);
        if(currentPages>pageUtils.getTotalPage()){
            currentPages=pageUtils.getCurrentPage()-1;
            pageUtils = userService.paging(currentPages, numbers);
        }
        req.setAttribute("page",pageUtils);
        req.getRequestDispatcher("/Jsp/list.jsp").forward(req,resp);
    }
}

三、service层

@Override
    public PageUtils paging(Integer current, Integer number) {
        PageUtils pageUtils=new PageUtils();
        pageUtils.setCurrentPage(current);
        Integer allCount = userInfoDao.findAllCount();
        pageUtils.setTotalCount(allCount);
        Integer totalPage=(allCount % number)==0?allCount /number:allCount/number+1;
        pageUtils.setTotalPage(totalPage);
        List<UserInfo> list = userInfoDao.findPage(current, number);
        pageUtils.setList(list);
        return pageUtils;
    }

四、dao层

/**
     * 查询表中所有记录总条数
     * @return
     */
    @Override
    public Integer findAllCount() {
        String sql="select count(*) from userInfo";
        Integer row = template.queryForObject(sql, Integer.class);
        return row ;
    }

    /**
     * 分页查询的数据
     * @param currentPage
     * @param number
     * @return
     */
    @Override
    public List<UserInfo> findPage(Integer currentPage, Integer number) {
        String sql="select * from userInfo limit ?,?";
        List<UserInfo> list = template.query(sql, new BeanPropertyRowMapper<UserInfo>(UserInfo.class),(currentPage - 1) * number, number);
        return list;
    }

五、domain

package cn.itcast.Utils;

import java.io.Serializable;
import java.util.List;

/**
 * 分页功能的实现
 */
public class PageUtils<T> implements Serializable {
    static final long serialVersionUID = 42L;
    private Integer totalPage;//总页数
    private Integer totalCount;//总记录数
    private List<T> list;//存放数据的list集合
    private Integer currentPage;//当前页数

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public Integer getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    @Override
    public String toString() {
        return "PageUtils{" +
                "totalPage=" + totalPage +
                ", totalCount=" + totalCount +
                ", list=" + list +
                ", currentPage=" + currentPage +
                '}';
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验报告:实验十一 - 文件上传与下载、Excel表格的导入导出、页面分页 实验目的: 本实验旨在通过使用JSP和Servlet技术,探索文件上传与下载的功能实现、Excel表格的导入导出方法,以及页面分页的实现思路。通过本实验,我们可以加深对这些功能的理解,并且为后续基于JSP和Servlet的项目开发提供基础支持。 一、文件上传与下载的实现思路: 1. 文件上传: a. 在JSP页面上,使用HTML表单元素创建一个文件上传表单。 b. 用户选择要上传的文件,并点击提交按钮。 c. 在Servlet中处理表单提交的请求。 d. 使用Apache Commons FileUpload库解析上传的文件,并保存到指定路径。 ```java // 从request中获取文件上传信息 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); // 处理每个文件项 for (FileItem item : items) { if (!item.isFormField()) { // 获取文件名和保存路径 String fileName = item.getName(); String filePath = "/path/to/save/" + fileName; // 保存文件到指定路径 item.write(new File(filePath)); } } ``` 2. 文件下载: a. 在JSP页面上,创建一个下载链接或按钮,指向Servlet。 b. 在Servlet中处理下载请求,设置响应头部信息。 c. 读取要下载的文件,并将其作为响应的内容返回给客户端。 ```java // 设置响应头部信息 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"filename.ext\""); // 读取要下载的文件 File file = new File("/path/to/file"); // 将文件内容写入响应输出流 try (InputStream inputStream = new FileInputStream(file); OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } ``` 二、Excel表格的导入导出方法: 1. Excel表格导入: a. 在JSP页面上,使用HTML表单元素创建一个文件上传表单。 b. 用户选择要上传的Excel文件,并点击提交按钮。 c. 在Servlet中处理表单提交的请求。 d. 使用Apache POI库解析上传的Excel文件,并提取数据进行处理。 ```java // 从request中获取文件上传信息 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); // 处理每个文件项 for (FileItem item : items) { if (!item.isFormField()) { // 获取文件名和输入流 String fileName = item.getName(); InputStream inputStream = item.getInputStream(); // 使用Apache POI解析Excel文件 Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); // 遍历行和列,处理Excel数据 for (Row row : sheet) { for (Cell cell : row) { // 处理单元格数据 } } } } ``` 2. Excel表格导出: a. 在Servlet中处理导出请求,准备要导出的数据。 b. 使用Apache POI库创建一个新的Excel工作簿,并创建工作表。 c. 遍历数据,将其写入Excel工作表中。 d. 将Excel工作簿保存到文件,并将其作为响应的内容返回给客户端。 ```java // 创建新的Excel工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 遍历数据,将其写入工作表 int rowNum = 0; for (Object[] rowData : data) { Row row = sheet.createRow(rowNum++); int colNum = 0; for (Object field : rowData) { Cell cell = row.createCell(colNum++); if (field instanceof String) { cell.setCellValue((String) field); } else if (field instanceof Integer) { cell.setCellValue((Integer) field); } } } // 将工作簿保存到文件 try (OutputStream outputStream = new FileOutputStream("/path/to/file")) { workbook.write(outputStream); } ``` 三、页面分页的实现思路: 1. 在JSP页面上,显示需要进行分页的数据列表。 2. 在Servlet中处理分页请求,根据当前页码和每页显示的数据条数,从数据库或其他数据源中获取对应页的数据。 3. 将获取到的数据保存在请求属性中,并转发到JSP页面。 4. 在JSP页面上,根据请求属性中的数据,显示当前页的数据列表。 5. 在JSP页面上,显示分页导航条,包含页码和跳转功能。 6. 当用户点击页码或跳转输入框时,触发相应的事件,将新的页码作为参数发送给Servlet。 7. 重复步骤2-6,实现页面切换和数据更新。 总结: 通过本次实验,我们成功使用JSP和Servlet技术实现了文件上传与下载的功能,掌握了Excel表格的导入导出方法,并了解了页面分页的实现思路。这些功能在实际的Web项目开发中具有重要的作用,能够提高用户体验和数据处理效率。在实现过程中,我们深入理解了JSP和Servlet的工作原理,并熟练运用相关的库和API,为进一步的基于JSP和Servlet的开发工作打下了基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值