`
BryanMelody
  • 浏览: 61796 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

基于之前servlet小项目的分页技术

 
阅读更多

将之前给自己留的小任务完成之后,就觉得自己分页这方面的领会还不太深,之前跟着学姐学分页,但是完全就是把学姐的所有代码直接copy直接用,基本没有对代码的理解;这次就在自己写的用户管理列表中用了自己写的分页技术,虽然还是参照着原来学姐的代码,不过换了一种方式,没有像学姐一样将分页对象存在session对象中,下面贴上代码

 

首先是分页接口,由Dao层继承

package com.test.util;

import com.test.entity.Users;

import java.util.List;

/**
 * @Description 用于分页的接口,由Dao层继承,重写此两个方法
 * Created by sjz on 2016/9/19.
 */
public interface PageInterface {
    /**
     * 查询所有记录,使用分页对象中的一些变量获取
     * @param sPage
     * @return list
     */
    public List<Users> findAll(SplitPage sPage);

    /**
     * 查询记录条数
     * @return int
     */
    public int getTotalRows();
}

Dao层重写了接口中的两个方法

@Override
    public List<Users> findAll(SplitPage sPage) {
        List<Users> list = new ArrayList<Users>();
        ResultSet rs = null;
        try{
            Class.forName(DRIVER);
            Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
            String sql = "SELECT * FROM t_users LIMIT ?,?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, sPage.getPageRow() * (sPage.getCurrentPage() - 1));
            ps.setInt(2, sPage.getPageRow());
            rs = ps.executeQuery();
            while(rs.next()){
                Users user = new Users();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setContent(rs.getString("content"));
                user.setPhoto(rs.getString("photo"));
                list.add(user);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    @Override
    public int getTotalRows() {
        int totalRows = 0;
        try {
            Class.forName(DRIVER);
            Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
            String sql = "SELECT COUNT(*) FROM t_users";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                totalRows = rs.getInt(1);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return totalRows;
    }

  

然后是分页实体类,用来处理页面之间的跳转

package com.test.util;

/**
 * 分页对象
 * Created by sjz on 2016/9/19.
 */
public class SplitPage {
    public final static String FIRSTPAGE = "first";//首页
    public final static String LASTPAGE = "last";//尾页
    public final static String PREVIOUSPAGE = "previous";//上一页
    public final static String NEXTPAGE = "next";//下一页

    private int pageRow = 5;//每页显示5条数据
    private int totalRows = 0;//数据条数,由Dao提供
    private int currentPage = 1;//当前页
    private int firstPage = 1;//首页
    private int totalPage = 1;//总页数

    public int getPageRow() {
        return pageRow;
    }

    public void setPageRow(int pageRow) {
        this.pageRow = pageRow;
        this.totalPage = this.totalRows / this.pageRow
                + ((this.totalRows % this.pageRow == 0) ? 0 : 1);
    }

    public int getTotalRows() {
        return totalRows;
    }

    public void setTotalRows(int totalRows) {
        this.totalRows = totalRows;
        this.totalPage = this.totalRows/this.pageRow+((this.totalRows%this.pageRow==0)?0:1);
    }

    public int getCurrentPage() {
        return currentPage;
    }

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

    public int getFirstPage() {
        return firstPage;
    }

    public void setFirstPage(int firstPage) {
        this.firstPage = firstPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public int toNewPage(String flag) {  //得到下次操作的页面数
        int newPage = this.currentPage;//定义新页数为当前页
        if (flag != null && !"".equals(flag)) {  //请求参数不为空
            if (SplitPage.FIRSTPAGE.equals(flag)) {  //如果传入的参数为第一页
                newPage = 1;  //新页数为第一页
            } else if (SplitPage.LASTPAGE.equals(flag)) {  //如果传入的参数为最后一页
                newPage = this.totalPage;  //新页数为最后一页
            } else if (SplitPage.NEXTPAGE.equals(flag)) { //如果传入的参数为下一页
                newPage = this.currentPage
                        + ((this.currentPage == this.totalPage) ? 0 : 1);// 如果当前页面与总的页面数相等则不再向后(+1)
                System.out.println(newPage);
            } else if (SplitPage.PREVIOUSPAGE.equals(flag)) {  //如果传入的参数为上一页
                newPage = this.currentPage
                        - ((this.currentPage == this.firstPage) ? 0 : 1);// 如果当前页面与首页相等则不再向前(-1)
            } else {
                // 传入的是个数字字符串参数
                //System.out.println(flag+"llll");
                newPage = Integer.parseInt(flag.trim());
            }
        } else {// 请求的参数为空,则当前页码不变
            newPage = this.currentPage;
        }
        this.setCurrentPage(newPage);// 记得重新设置当期页面
        return newPage;
    }

}

 然后是servlet,只是在原来的基础上多了一些传递的参数,和改动了list方法

package com.test.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
import com.test.dao.UsersDao;
import com.test.entity.Users;
import com.test.util.SplitPage;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;

import static java.lang.System.out;

/**
 * Created by sjz on 2016/9/14.
 */
public class UsersServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        String method = request.getParameter("method");
        out.println(method);
        switch (method){
            case "insert" :
                insert(request,response);
                break;
            case "delete" :
                delete(request,response);
                break;
            case "toUpdate":
                int id3 = Integer.parseInt(request.getParameter("id"));
                Users user3 = UsersDao.selectById(id3);
                request.setAttribute("user",user3);
                request.getRequestDispatcher("../show.jsp").forward(request,response);
            case "update" :
                System.out.println(request.getPart("id")+"aaaa");
                int id = Integer.parseInt(request.getParameter("id"));
                update(request,response,id);
                break;
            case "select" :
                //select(request,response);
                int id2 = Integer.parseInt(request.getParameter("id"));
                Users user2 = UsersDao.selectById(id2);
                request.setAttribute("user",user2);
                request.getRequestDispatcher("../show.jsp").forward(request,response);
                break;
            case "list" :
                //list(request,response);\
                UsersDao uDao = new UsersDao();

                SplitPage sPage = new SplitPage();
                int totalRows = uDao.getTotalRows();
                sPage.setTotalRows(totalRows);
                String flag = request.getParameter("flag");
                String current = request.getParameter("current");
                if(current!=null){
                    int currentPage = Integer.parseInt(current);
                    sPage.setCurrentPage(currentPage);
                }
                int newPage = sPage.toNewPage(flag);
                List<Users> list = uDao.findAll(sPage);
                request.setAttribute("list",list);
                request.setAttribute("sPage",sPage);
                request.getRequestDispatcher("../list.jsp").forward(request,response);
                break;
        }
    }



    private void insert(HttpServletRequest request, HttpServletResponse response) {
        SmartUpload su = new SmartUpload();
        JspFactory _jspxFactory = null;
        PageContext pageContext = null;
        _jspxFactory = JspFactory.getDefaultFactory();
        pageContext = _jspxFactory.getPageContext(this,request,response,"",true,8192,true);
        try {
            su.initialize(pageContext);
            su.upload();
            PrintWriter out = response.getWriter();
            out.println("上传" + su.save("picture") + "个文件成功!!!"+"<br>");
            String username = su.getRequest().getParameter("username");
            String password = su.getRequest().getParameter("password");
            String content = su.getRequest().getParameter("content");
            File file = su.getFiles().getFile(0);
            if (file.isMissing())
                System.out.println("未选择文件");
            String photo = file.getFileName();
            String path = "/picture";
            path = path + "/" + photo;
            file.saveAs(path, SmartUpload.SAVE_VIRTUAL);
            System.out.println(photo);
            Users user = new Users();
            user.setUsername(username);
            user.setPassword(password);
            user.setContent(content);
            user.setPhoto(photo);
            if(UsersDao.insert(user)){
                out.println("成功");
                response.setHeader("refresh", "3;UsersServlet?method=list&flag=first");
            } else{
                out.println("失败");
                response.setHeader("refresh", "3;UsersServlet?method=insert");
            }
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void delete(HttpServletRequest request, HttpServletResponse response) {
        int id = Integer.parseInt(request.getParameter("id"));
        try{
            if(UsersDao.delete(id)){
                out.println("成功");
                request.getRequestDispatcher("UsersServlet?method=list&flag=first").forward(request,response);
            } else{
                out.println("失败");
                request.getRequestDispatcher("../list.jsp").forward(request,response);
            }
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void update(HttpServletRequest request, HttpServletResponse response, int id) {
        SmartUpload su = new SmartUpload();
        JspFactory _jspxFactory = null;
        PageContext pageContext = null;
        _jspxFactory = JspFactory.getDefaultFactory();
        pageContext = _jspxFactory.getPageContext(this,request,response,"",true,8192,true);
        try {
            su.initialize(pageContext);
            su.upload();
            PrintWriter out = response.getWriter();
            out.println("上传" + su.save("picture") + "个文件成功!!!"+"<br>");
            String username = su.getRequest().getParameter("username");
            String password = su.getRequest().getParameter("password");
            String content = su.getRequest().getParameter("content");
            File file = su.getFiles().getFile(0);
            if (file.isMissing())
                System.out.println("未选择文件");
            String photo = file.getFileName();
            String path = "/picture";
            path = path + "/" + photo;
            file.saveAs(path, SmartUpload.SAVE_VIRTUAL);
            System.out.println(photo);
            Users user = new Users();
            user.setUsername(username);
            user.setPassword(password);
            user.setContent(content);
            user.setPhoto(photo);
            if(UsersDao.update(user,id)){
                out.println("成功");
                response.setHeader("refresh", "3;UsersServlet?method=list&flag=first");
            } else{
                out.println("失败");
                response.setHeader("refresh", "3;UsersServlet?method=insert&flag=first");
            }
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (SmartUploadException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void select(HttpServletRequest request, HttpServletResponse response) {
    }

    private void list(HttpServletRequest request, HttpServletResponse response) {
    }

}

 最后是list.jsp,增加了一些代码,用来更好的实现功能

<%@ page import="com.test.entity.Users" %>
<%@ page import="java.util.List" %>
<%@ page import="com.test.util.SplitPage" %><%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2016/9/18
  Time: 9:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
    <tr>
        <td>用户ID</td>
        <td>用户名</td>
        <td>用户简介</td>
        <td>照片</td>
    </tr><br>
    <%
        SplitPage sPage = (SplitPage)request.getAttribute("sPage");
        List<Users> list = (List<Users>) request.getAttribute("list");
        for (int i=0;list!=null&&i<list.size();i++){
    %>
    <tr>
        <td><%=list.get(i).getId()%></td>
        <td><%=list.get(i).getUsername()%></td>
        <td><%=list.get(i).getContent()%></td>
        <td><img src="../picture/<%=list.get(i).getPhoto()%>" style="width:100px;height:100px;"></td>
        <a href="UsersServlet?method=select&id=<%=list.get(i).getId()%>">修改</a>
        <a href="UsersServlet?method=delete&id=<%=list.get(i).getId()%>">删除</a>
    </tr>
    <br>
    <%
        }
    %>
    <div id="foot">
        <a href="UsersServlet?method=list&flag=<%=SplitPage.FIRSTPAGE%>&current=<%=sPage.getCurrentPage()%>">首页</a>
        <a href="UsersServlet?method=list&flag=<%=SplitPage.PREVIOUSPAGE%>&current=<%=sPage.getCurrentPage()%>">上一页</a>
        <a href="UsersServlet?method=list&flag=<%=SplitPage.NEXTPAGE%>&current=<%=sPage.getCurrentPage()%>">下一页</a>
        <a href="UsersServlet?method=list&flag=<%=SplitPage.LASTPAGE%>&current=<%=sPage.getCurrentPage()%>">末页</a>
            <%
                for (int i = 1; i <= sPage.getTotalPage(); ++i) {  //控制总页数
            %>
            <a href="UsersServlet?method=list&flag=<%=i%>&current=1"><%=i%></a>
            <%
                }
            %>

        </select>
        <label><%=sPage.getCurrentPage()%>/<%=sPage.getTotalPage()%>页 <!-- 当前页数/总页数 -->
        </label>
    </div>
</body>
</html>

 除去这些,其余所有的页面跳转的地址后面全部加上一些参数,用来修改每次访问都重新实例化的sPage对象,以便实现页面跳转

分享到:
评论

相关推荐

    jstl分页jstl分页

    总结,本示例中的"jstl分页"实现了基于JSTL、JavaBean、JSP和SQL Server 2005的简单分页功能。在实际开发中,可以根据项目需求进行相应的扩展和优化,以满足不同的业务场景。同时,了解和掌握这些基础技术有助于提升...

    Java分页Java分页Java分页

    Java分页技术是Java开发中一个非常重要的概念,特别是在处理大量数据时,为了提高用户体验和系统性能,分页成为必不可少的手段。Java分页主要涉及数据库查询、内存管理以及前端展示等多个方面。以下是对Java分页技术...

    accp5.0桥接课程jsp分页代码

    【标题】"accp5.0桥接课程jsp分页代码"所涉及的知识点主要集中在JavaServer Pages(JSP)技术、数据库分页以及软件开发的教育领域,具体包括以下几个方面: 1. JSP(JavaServer Pages)基础: JSP是一种基于Java的...

    JSP 数据分页显示(数据库为可携带数据库)

    在网页开发中,数据分页是一项非常重要的技术,特别是在处理大量数据时,它能提高页面加载速度,优化用户体验。本文将深入探讨如何使用JSP(Java Server Pages)实现基于可携带数据库的数据分页显示。 首先,我们...

    MVC新闻发布系统

    **MVC新闻发布系统**是一种基于Java Web技术的软件架构模式,主要用于构建动态、数据驱动的Web应用程序。在这个系统中,`jsp`(JavaServer ...同时,系统采用的过滤器和分页技术也体现了对性能优化和用户体验的关注。

    json实现jsp分页实例介绍(附效果图).docx

    随着Web应用的发展,分页技术成为了处理大量数据时不可或缺的一部分。JSON作为一种轻量级的数据交换格式,在Web前端与后端之间的数据传递中扮演着重要角色。本文将详细介绍如何使用JSON结合JSP实现动态分页功能。 #...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

    简易停车场收费管理系统

    《简易停车场收费管理系统》是一个基于Java Web技术的实践项目,旨在帮助初学者理解和掌握Web开发中的核心概念和技术。该项目涵盖了Web开发的多个重要知识点,包括过滤器(Filter)、自定义标签(Custom Tags)、...

    (纯手写源码+sql文件springboot+maven+mysql+多数据源+shiro+filter+redis+pagehelper

    提供了一系列关键的技术栈,这是一份基于SpringBoot、Maven、MySQL、多数据源、Shiro、过滤器(Filter)、Redis和PageHelper的手写源码项目。让我们逐一深入探讨这些技术及其在实际应用中的作用。 1. **SpringBoot*...

    JSP源码JSP住宅小区物业管理系统源码/文档

    - **分页查询**:对于大量数据的查询结果,采用分页技术提高响应速度和用户体验。 - **异常处理**:编写异常处理机制,捕获并记录运行时可能出现的错误,便于后期调试和维护。 ### 总结 JSP住宅小区物业管理系统是...

    失物招领网站 (SpringBoot + MybatisPlus + JWT) 实现前后端分离项目的后台管理系统.zip

    在深入探讨这个项目之前,让我们先了解这三个关键技术。 **SpringBoot** SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量常用的第三方库配置(如数据源、JPA、...

    java查看sun包源码-webshop:java基础练习项目-仿照雷蛇商城

    基础部分,没有涉及框架,基本实现,浏览商品,查看商品,购物车,查看订单,分页显示。 可以作为毕设,练习demo等 这是之前上学时期练习的一个demo,看有朋友需要就上传上来了。更多资源关注: 1 项目简介 用户登录...

    APPFUSE工具研究.doc

    AppFuse 2.0还更新了技术栈,支持JDK 5、注解、JSP 2.0和Servlet 2.4,同时提供了对Eclipse、IntelliJ IDEA和NetBeans等IDE的良好支持,以提高开发效率。 此外,AppFuse 2.0集成了多种开源项目,如: 1. **Struts ...

    基于jsp,java开发的蛋糕商城

    在本项目中,我们讨论的是一个基于JSP、Java和MySQL技术开发的蛋糕商城系统。这个系统的主要功能包括展示商品列表、实现商品过滤以及订单查看等。以下将详细阐述各个知识点: 1. **商品列表功能**: - 数据库设计...

    jersey 实现restful服务

    在实际项目中,你可能会遇到更复杂的需求,例如分页、过滤、排序等。此时,可以利用查询参数(query parameters)和路径参数(path parameters)来扩展你的服务。同时,安全方面也不容忽视,可以考虑使用OAuth2或...

    JavaWeb开发典型模块大全前七章源码

    JavaWeb开发是构建基于Web的应用程序的技术,涵盖了服务器端编程、数据库交互以及用户界面设计等多个方面。本资源提供了JavaWeb开发中的七个典型模块的源码,对于初学者和进阶开发者来说,都是宝贵的学习材料。下面...

    第二组网上教学系统.zip

    2. **JavaEE (Java Enterprise Edition)**:可能是使用JavaEE框架来构建后端服务,如使用Servlet、JSP、EJB等技术,提供服务器端的功能支持。 3. **JavaWeb**:指的是使用Java技术进行Web应用开发,包括HTTP协议...

    jsp入门教程

    - **总结**:回顾整个项目的开发过程和关键技术点。 #### 第11章 文件上传 - **远程网盘**:实现文件的上传和存储功能。 - **浏览器部分的设置**:配置前端表单以支持文件上传。 #### 第12章 导出文件 - **图片...

    spring webflux demo

    与传统的基于Servlet的Spring MVC不同,WebFlux旨在优化性能,提高并发性和资源效率,特别适合微服务和高并发场景。 本项目是一个使用Spring WebFlux、MongoDB数据库的小型示例,展示了如何在Java环境中实现基本的...

Global site tag (gtag.js) - Google Analytics