欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb-在会一会【分页】

程序员文章站 2024-03-18 13:48:58
...

话说:

各位读者,晚上好!

好久不见!真的不愿意间隔了这么久才动笔,如果今天再不发表博客,就不能原谅自己。笔者在10.14号博客《JavaWeb-News-分页》博客中用对象的方式写了分页,没记错的话,那时候实现的分页还是有小bug。这次直接用在Servlet中实现分页,页面显示方式参考百度分页,这次效果很满意。(当然倾向于功能,没有美化)。

目标:
Servlet中直接实现分页
难度系数:★☆☆☆☆
建议用时:30min 实际用时2H

目录:


一、效果图
二、Servlet
三、页面(重点)
四、总结
五、下期预告


开发工具:Eclipse

一、效果图

页面非常粗糙,如果加上美化,效果会非常好。

JavaWeb-在会一会【分页】

首页,每页显示10条数据

JavaWeb-在会一会【分页】

中间页,当前页不是超链接。

JavaWeb-在会一会【分页】

末页

二、Servlet

这里直接调用底层方法,查处数据。为便于分页,可以在新增数据的时候,调用Servlet本身,可产生大量数据。

TextListServlet

package com.hmc.controller;
import java.io.IOException;
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.hmc.dao.UserDaoImpl;
import com.hmc.pojo.ListShow;

/**
*
*2017年12月26日
*User:Meice
*下午9:14:17
*/
public class TextListServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收参数

        /**
         * 分页5要素:
         * 1)pageIndex 当前页
         * 2)startIndex 从第几条数据开始
         * 3)countAll 总条目数
         * 4)pageSize 每页大小
         * 5)pageCount 总共多少页
         */

        int pageIndex;
        int startIndex;
        int countAll;
        int pageSize = 10;
        int pageCount;

        //当前页
        String pageIndexStr =   req.getParameter("pageIndex");
        if(pageIndexStr!=null && !pageIndexStr.equals("")) {
                pageIndex = Integer.parseInt(pageIndexStr);
        }else {
            pageIndex = 1;
        }

        System.out.println("当前页:"+pageIndex);

        //总条目数
        countAll = new UserDaoImpl().getCountAll();
        System.out.println("总页数:"+countAll);
        //总页数
        pageCount = (int)Math.ceil(((double)countAll/pageSize));    

        // 从哪页的数据开始显示(当前页-1)*2;
        startIndex = (pageIndex-1)*pageSize;
        System.out.println("偏移量:"+startIndex);



        //2.调用方法
        String sql = "select a.textId, a.title,a.userNick,b.replyCount,a.textTime from  (select t.textId,t.title,u.userNick,t.textTime from text t inner join user u on t.userId = u.userId)a left join  (select  t.title,count(replyId) replyCount from reply r inner join text t on r.textId = t.textId  inner join user u on r.userId =  u.userId  group by title) b on   a.title = b.title order by a.textId limit ?,?";
        Object[] params = {startIndex,pageSize};
        List<ListShow>  list =(List<ListShow>)new UserDaoImpl().textShowSearch(sql, params);



        //3.页面跳转
        req.setAttribute("list", list);
        req.setAttribute("pageCount", pageCount);
        req.setAttribute("pageIndex", pageIndex);
        req.setAttribute("pageCount", pageCount);
        req.setAttribute("pageSize", pageSize);
        req.getRequestDispatcher("TextList.jsp").forward(req, resp);





    }
}

有了Servlet,当然少不了配置web.xml

   <!--=============================首页显示的TextListServlet==============================-->
  <servlet>
        <servlet-name>listServlet</servlet-name>
        <servlet-class>com.hmc.controller.TextListServlet</servlet-class>
  </servlet>

  <servlet-mapping>
        <servlet-name>listServlet</servlet-name>
        <url-pattern>/pageList</url-pattern>
  </servlet-mapping>

三、页面

TextList

<%@page import="com.hmc.util.getStringToIntUtil"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!--Author:Meice 2017年12月26日下午9:23:43 -->
<!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>帖子分页</title>

<script type="text/javascript">
        function skipToPage() {

        }   
</script>

<%-- <%
    String  skipPageStr =   request.getParameter("skip");
    System.out.print("选择框内容:"+skipPageStr);
    int skipPage = getStringToIntUtil.getInt(skipPageStr);
%> --%>

</head>
<body>

    <table border="1" width="90%" align="center">
        <thead>
            <tr>
                <th>帖子标题</th>
                <th>发帖人</th>
                <th>回复数量</th>
                <th>发帖时间</th>
            </tr>
        </thead>

        <tbody>

            <c:forEach var="ListShow" items="${list}">
                <tr>
                    <td>${ListShow.title}</td>
                    <td>${ListShow.userNick}</td>
                    <td>${ListShow.replyCount}</td>
                    <td>${ListShow.textTime}</td>
                </tr>

            </c:forEach>




            <tr>
                <td colspan="4" align="center">


                    <c:if test="${pageIndex>1 }">
                        <a href="pageList?pageIndex=1">首页</a>
                        <a href="pageList?pageIndex=${pageIndex-1}">上一页</a>
                    </c:if>

                    <!--开头10页  -->
                    <c:if test="${pageIndex<=10 }">
                            <c:forEach begin="1" end="10" var="i">
                                <c:if test="${pageIndex==i}">
                                    ${i}
                                </c:if>

                                <c:if test="${pageIndex!=i}">
                                    <a href="pageList?pageIndex=${i}">${i}</a>
                                </c:if>

                            </c:forEach>

                    </c:if>

                    <!--中间部分  -->
                    <c:if test="${pageIndex>10 &&pageIndex<pageCount-(pageSize-1)}">
                        <c:forEach begin="${pageIndex-4 }" end="${pageIndex+5}" var="i">
                            <c:if test="${pageIndex==i}">
                                ${i}
                            </c:if>
                            <c:if test="${pageIndex!=i}">
                                <a href="pageList?pageIndex=${i}">${i}</a>
                            </c:if>

                        </c:forEach>

                    </c:if>


                    <!--最后10页-->
                    <c:if test="${pageIndex>=pageCount-(pageSize-1)}">
                        <c:forEach begin="${pageCount-(pageSize-1)}" end="${pageCount }" var="i">

                            <c:if test="${pageIndex==i }">
                                ${i}
                            </c:if>

                            <c:if test="${pageIndex!=i }">
                                <a href="pageList?pageIndex=${i}">${i}</a>
                            </c:if>


                        </c:forEach>
                    </c:if>



                    <c:if test="${pageIndex<pageCount}">
                        <a href="pageList?pageIndex=${pageIndex+1}">下一页</a>
                        <a href="pageList?pageIndex=${pageCount}">末页</a>
                    </c:if>



                    ${pageIndex}/${pageCount}

                    <!--跳转页面  -->
                    <form  action="pageList" method="get">
                        <select name="pageIndex">
                            <option value="15" selected>15</option>
                            <option >20</option>
                            <option >30</option>
                        </select>
                        <input type="submit" value="跳转">
                    </form>

                </td>
            </tr>
        </tbody>




    </table>




</body>
</html>

四、总结


1、分页的核心在五要素:

pageIndex——当前页
countAll——总条目数
pageSize——每页显示数量,limit的第二个?号
pageAll——总页数
startPage——limit的起始查询值,第一个?号

2、页面处理核心在于处理好第一页、中间页面、尾部页面;整体逻辑是:第一页我们写固定,最后一页也写固定,中间按照每页大小灵活变动;

3、控制好实现效果,用好以下标签即可,需要先导入JSTL包。

<c:forEach  var="" items="${传过来的值}"></c:forEach>
<c:forEach begin="" end="" var=""></c:forEach>

<c:if  text="满足条件表达式"></c:if>

熟悉这三个,分页就可以搞定。


五、下期预告

最近分身乏术,没有精力推进企业门户网项目,暂且搁置,一旦有空,就是更新这个。

好了,晚安!下期再会!17年即将过去,冬至到了,春天真的不远了。

相关标签: 分页