javabean+servlet+jsp实现分页

前端实现用ligerUI实现分页,感觉用框架确实简单,闲着无聊,模拟着liger的分页界面实现了一遍(只要是功能,样式什么无视)

这里用基础的三层架构+servlet+jsp实现,思路很简单,把所有分页相关信息写入到一个pagebean类里面,service返回这个bean类,每次分页查询时都从该bean里查找信息。只是其中的细节问题比较繁琐,如边界处理(前端和后台边界都要处理),下拉框跳转后要显示当前页等等

这是ligerUI实现的分页样式(实现过程我的上一篇博客有写)

模拟实现过程:

目录结构

数据库(mysql)

model层,一个数据库对应的model(Blog),还有一个pageBean(BlogPage)

import java.sql.Date;

public class Blog {
    private int id;
    private int category_id;
    private String title;
    private String content;
    private Date created_time;
  //getter和setter方法
    @Override
    public String toString() {
        return "Blog [id=" + id + ", category_id=" + category_id + ", title=" + title + ", content=" + content
                + ", created_time=" + created_time + "]";
    }
}
public class BlogPage {
    private List<Blog> pagerecord;//每页记录
    private int pageno;//当前页
    private int pagenostart;//每页开始索引
    private int pagesize=5;//每页多少数据
    private int totalrecord;//总记录数
    private int totalpage;//总页数

    public BlogPage(int pageno,int totalrecord){
        //pageno totalrecord都可以当做已有信息
        this.totalrecord=totalrecord;
        //计算总页数
        totalpage=(totalrecord%pagesize==0)?totalrecord/pagesize:totalrecord/pagesize+1;
        //pageno的边界处理
        if(pageno<=1)
            this.pageno=1;
        else if(pageno>=totalpage)
            this.pageno=totalpage;
        else
            this.pageno=pageno;
        //计算每页开始索引,即每页第一个数据的索引,用于分页查询
        pagenostart=(this.pageno-1)*pagesize;
    }
    public int getPagenostart() {
        return pagenostart;
    }
    public void setPagenostart(int pagenostart) {
        this.pagenostart = pagenostart;
    }
    public List<Blog> getPagerecord() {
        return pagerecord;
    }
    public void setPagerecord(List<Blog> pagerecord) {
        this.pagerecord = pagerecord;
    }
    public int getPageno() {
        return pageno;
    }
    public void setPageno(int pageno) {
        this.pageno = pageno;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }
    public int getTotalrecord() {
        return totalrecord;
    }
    public void setTotalrecord(int totalrecord) {
        this.totalrecord = totalrecord;
    }
    public int getTotalpage() {
        return totalpage;
    }
    public void setTotalpage(int totalpage) {
        this.totalpage = totalpage;
    }
}

dao层

JDBCUtil封装了jdbc的连接和释放操作

public class JDBCUtil {
    private static String url = "jdbc:mysql://localhost:3306/blogs_stu";
    private static String username = "root";
    private static String password = "";
    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        Connection conn;
        try {
            conn= DriverManager.getConnection(url, username, password);
            return conn;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void release(ResultSet rs,PreparedStatement ps,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
public class BlogDao {
    //每页的记录,传入每页开始索引和每页大小用于分页,即limit的两个参数(mysql分页用limit)
    public List<Blog> getPageRecord(int pagenostart, int pagesize) {
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select * from blog limit ?,?";
        List<Blog> list = new ArrayList<Blog>();
        try {
            ps = conn.prepareStatement(sql);
            ps.setInt(1, pagenostart);
            ps.setInt(2, pagesize);
            rs = ps.executeQuery();
            while (rs.next()) {
                Blog blog = new Blog();
                blog.setId(rs.getInt("id"));
                blog.setCategory_id(rs.getInt("category_id"));
                blog.setTitle(rs.getString("title"));
                blog.setContent(rs.getString("content"));
                blog.setCreated_time(rs.getDate("created_time"));
                list.add(blog);
            }
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.release(rs, ps, conn);
        }
        return null;
    }
    //总记录数
    public int getTotal() {
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement("select count(*) from blog");
            rs = ps.executeQuery();
            if (rs.next()) {
                return rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.release(rs, ps, conn);
        }
        return 0;
    }
}

service层

public class BlogService {
    BlogDao blogDao = new BlogDao();
    //返回pagebean,所有分页需要的信息都去pagebean里查找
    public BlogPage findPageRecord(int pageno) {
        int totalrecord = blogDao.getTotal();
        BlogPage blogpage = new BlogPage(pageno, totalrecord);
        List<Blog> list = blogDao.getPageRecord(blogpage.getPagenostart(),blogpage.getPagesize());
        blogpage.setPagerecord(list);
        return blogpage;
    }
}

servlet类

@WebServlet("/BlogSplitServlet")
public class BlogSplitServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        String pagenostr=request.getParameter("pageno");
        //首次访问servletpagenostr为null,给一个初始值,即默认访问第一页
        int pageno=1;
        if(pagenostr!=null)
            pageno=Integer.parseInt(pagenostr);
        BlogService service=new BlogService();
        BlogPage blogPage=service.findPageRecord(pageno);
        request.setAttribute("blogPage", blogPage);
        request.getRequestDispatcher("/blogPage.jsp").forward(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

这样所有的分页信息就封装到pagebean里了

jsp实现只需要将pagebean里的信息取出来就行了

下面给出我的jsp实现(模拟ligerUI)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@page import="java.util.*,model.Blog,model.BlogPage"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
    window.onload = function() {
        //保证select的option与当前页显示一致
        select = document.getElementById("select");
        pageno = ‘${blogPage.pageno}‘;
        select.options[pageno - 1].selected = ‘selected‘;
    }
    //select下拉列表跳转
    function selectjump() {
        var pageno = select.selectedIndex + 1;
        window.location.href = "http://localhost/jspPageSplit/BlogSplitServlet?pageno="
                + pageno;
    }
    //text跳转,onblur事件,输入框失去焦点是发生
    function textjump() {
        var pageno = document.getElementById("text").value;
        window.location.href = "http://localhost/jspPageSplit/BlogSplitServlet?pageno="
                + pageno;
    }
</script>
</head>
<body>
    <%
        BlogPage blogPage = (BlogPage) request.getAttribute("blogPage");
        List<Blog> list = blogPage.getPagerecord();
        // 尾页填充空白行,若不填充,尾页表格tr行数与前面不一致很难看
        if (list.size() < blogPage.getPagesize()) {
            for (int i = list.size(); i < blogPage.getPagesize(); i++)
                list.add(null);
        }
    %>
    <div style="width: 50%; height: 400px">
        <table border="1" cellspacing="0" width="100%" bgcolor="#CEF0C5">
            <tr height="40px">
                <td>id</td><td>标题</td><td>内容</td><td>创建时间</td>
            </tr>
            <%
                for (Blog blog : list) {
                    if (blog != null) {
            %>
            <tr height="50px">
                <td width="10%"><%=blog.getId()%></td>
                <td width="20%"><%=blog.getTitle()%></td>
                <td width="40%"><%=blog.getContent()%></td>
                <td width="30%"><%=blog.getCreated_time()%></td>
            </tr>
            <!-- 尾页空白行填充 -->
            <%} else {%>
            <tr height="50px">
                <td width="10%"></td>
                <td width="20%"></td>
                <td width="40%"></td>
                <td width="30%"></td>
            </tr>
            <%}}%>
        </table>
        <div style="height:50px;background-color: #4B7DB3;line-height: 40px;">
        &nbsp;&nbsp;
        <!-- select下拉框 -->
        <select id="select">
            <%for (int i = 1; i <= blogPage.getTotalpage(); i++) {%>
            <option onclick="selectjump()"><%=i%></option>
            <%}%>
        </select>
        <a href="${pageContext.request.contextPath}/BlogSplitServlet?pageno=1">首页</a>
        <a href="${pageContext.request.contextPath}/BlogSplitServlet?pageno=<%=blogPage.getPageno()-1<1?blogPage.getPageno():blogPage.getPageno()-1%>">上一页</a>&nbsp;&nbsp;
        <input type="text" id="text" size="1px" value="${blogPage.pageno}" onblur="textjump()">/${blogPage.totalpage}
        <a href="${pageContext.request.contextPath}/BlogSplitServlet?pageno=<%=blogPage.getPageno()+1>blogPage.getTotalpage()?blogPage.getPageno():blogPage.getPageno()+1%>">下一页</a>
        <a href="${pageContext.request.contextPath}/BlogSplitServlet?pageno=<%=blogPage.getTotalpage()%>">尾页</a>
        <div style="float: right;">
        显示从${blogPage.pagenostart+1}到${blogPage.pageno==blogPage.totalpage?blogPage.totalrecord:blogPage.pagesize},
        共${blogPage.totalrecord}条. 每页显示${blogPage.pagesize}条
        </div>
        </div>
    </div>
</body>
</html>

这是最后的样子,样式粗略的调了下,功能跟ligerUI默认的分页一模一样

实际运用中可以根据需求编写jsp页面,但是后台代码基本是通用的

时间: 2024-10-06 06:40:38

javabean+servlet+jsp实现分页的相关文章

Javabean+servlet+JSP(html)实例应用

大家都知道Javabean+servlet+JSP是最简单的MVC模式.的确,在一个小型的项目中,这个模式完全够用. 它优雅并且简洁.加上jQueryui的完美展示效果,让这个模式看起来非常合适.当然这其中必不可少的是ajax和json格式的应用. 1.首先从数据库(sqlserver)中获取结果集并封装到Javabean中.在此之前要定义你所需要的bean类. /* * 查询Branch */ public ArrayList<Branch> selBranch(Connection con

JavaBean+servlet+jsp——&gt;对数据进行增删改查

1.开始页面(查询数据) 1 <%@page import="com.zdsofe.work.Student"%> 2 <%@page import="java.util.List"%> 3 <%@page import="com.zdsofe.work.ReadData"%> 4 <%@ page language="java" contentType="text/html

javabean+servlet+jsp程序_个人辛苦探索

主要介绍主流的java web编程技术.设计模式和框架,以及如何利用Eclipese开发Web应用程序. 要点:1.Java Web编程的主要组件技术: 2.MVC设计模式: 3.用Eclipse构建一个基于MVC模式的Java Web的应用程序. 目的:掌握如何用Eclipse构建一个基于MVC模式的Java WEB的应用程序. 一.java web 编程的主要组件技术 Html.jsp.Servlet.Javabean.Jdbc.Xml.Tomcat.MySQL 1.1 MVC设计模式 今天

课程信息管理系统(javabean + Servlet + jsp)

此项目做的事一个课程管理系统,需要通过web做一个可以实现课程的增删改查的功能. 需要用到数据库,Servlet和jsp等(第一次使用Servlet和数据库连接,所以代码都比较低级,页面也比较粗糙,还没有实现Servlet处理后数据的回传,还未实现模糊查询) 程序所建的项目如下: 1.首先建立数据库链接 course/src/com.jdbc.util/BaseConnection.java 代码如下: 1 package com.jdbc.util; 2 3 4 import java.sql

Servlet+JavaBean+JSP真假分页技术详解

说明:分页技术分为真分页和假分页,具体采用哪种技术需要根据需求自我抉择.其实两者之间实现区别并不是太大.在分页之前我们需要搞明白对谁进行分页,一般情况是将数据封装到一个list集合中,明白这这一点问题基本上就已经解决了.(编写匆促如有错误请联系我) 下面首先介绍真分页. 方法一: 为了大家学习起来方便, 我将在项目中用到的内容都放在这个文档中,所以可能会比较萝莉啰嗦. 1.构建数表,字段如下 goods goodid int goodname varchar(45) price flaot 2,

javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

Jsp+JavaBean+Servlet实现模拟银行账户存取款等功能的网站(实习第4-8天)

本来想学J2EE的3个经典框架(Spring + Struts +Hibernate),奈何负责实习的老师只讲了Jsp+JavaBean+Servlet,项目时间还蛮紧的,所以只用JJS实现了这个项目,后面寒假有时间的话再用SSH实现并完善这个网站吧.前几天抽时间学了点前端的东西,感觉还是有点麻烦的,前端做既漂亮又有良好的兼容性不是件太容易的事情,所幸现在觉得能够静下来学技术做开发是件挺幸福的事情.网站的源代码上传到了CSDN上的code仓库,以后有时间会慢慢把这个项目的前端和后台做的更完善.

对基于Servlet+JSP+JavaBean开发模式的用户登录注册的升级

还记得我前面所写的博文基于Servlet+JSP+JavaBean开发模式的用户登录注册吗?我们以前是创建代表数据库的xml文件来保存用户信息的,现在我们已经学习了数据库相关的知识,所以应把xml换成数据库,升级成数据库应用. 我们在把以前的工程复制并拷贝时,假设以前的工程名是day09_user,现复制一份并拷贝,重新修改工程名为day14_user,此刻将其直接部署在tomcat服务器上,那么day14_user这个JavaWeb应用映射的虚拟目录仍然是"/day09_user",