javaweb 最简单的分页技术

原文来自于https://www.cnblogs.com/xwlych/p/6017833.html

个人由加了一点注释,他的代码我运行不起来,弄了好一会

bean包  User.java

package bean;

public class User {
    private String username;
    private String password;
    private String name;
    public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}

  PageServlet.java

package com;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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 javax.servlet.http.HttpSession;

import bean.User;

/**
 * Servlet implementation class PageServlet
 */
@WebServlet("/PageServlet")
public class PageServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ArrayList<User> list = new ArrayList<User>();//这个应该理解吧自定义数组对象[泛型]
        // 在这里我不再连接数据库而是用虚拟的数据进行测试效果,小伙伴可以连接数据库查询到之后返回一个list
            for (int i = 1; i < 7; i++) {
                User user1 = new User();
                user1.setUsername("" + i + "个用户名");
                user1.setPassword("" + i + "密码");
                user1.setName("" + i + "名字");
                list.add(user1);
            }
           
            
            HttpSession session =request.getSession();//获取session对象
            // 将数据存到session中以便于在前台获取
            session.setAttribute("userList", list);
            //获取当前页的页数并转为int类型,最终将数据存到session中
            int pageNos;
            if (request.getParameter("pageNos") == null
                    || Integer.parseInt(request.getParameter("pageNos")) < 1) {
                pageNos = 1;
            } else {
                pageNos = Integer.parseInt(request.getParameter("pageNos"));
            }
            session.setAttribute("pageNos", pageNos);
            // 定义总页数并存到session中
            int countPage = 6;//这个是总页数,大家可以数据库查询获得
            // 在实际开发中我们的总页数可以根据sql语句得到查询到的总条数,然后用总条数除每页的条数得到总页数
            session.setAttribute("countPage", countPage);
            request.getRequestDispatcher("index.jsp").forward(request, response);//带参数的重定向
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

 

index.jsp

  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在此处插入标题</title>
</head>

<body>
<!-- 这个是jstl 表达式和EL表达式,大家可以去下一个jstl jar包 复制到 web-inf目录下(eclipse) 然后包含 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>这个头文件 至于语法我不懂 这个foreach要写在body
下面,要不循环不出来,因为我写了一个大的报表(如果只把这个foreach 放在我写的表格table前面 无法循环 ,原因不知)下面的
begin="${(pageNos-1)*1 为开始页数 和 end="${pageNos*1-1}"结束页数,我这里是每页显示一个,如果大家要显示多个更改此代码
例如两个的话begin="${(pageNos-1)*2 }"  end="${pageNos*2-1}" 嗯嗯那没太注意算法,不求甚解吧哈哈哈-->

    <c:forEach items="${userList}" var="user" begin="${(pageNos-1)*1 }"
        end="${pageNos*1-1}"> <!-- 这里是控制每页显示的个数 -->
        <center>
            <div>${user.username}</div>
        </center>
        <center>
            <div>${user.password}</div>
            <div>${user.name}</div>
        </center>
    </c:forEach>
    <center>
    <c:if test="${pageNos>1 }"> <!-- 这里是一个判断你页数是不是大于1如果把这行去了会出现什么情况,自己试试吧 -->
<a href="PageServlet?pageNos=1" >首页</a>
<a href="PageServlet?pageNos=${pageNos-1 }">上一页</a>
</c:if>
<c:if test="${pageNos <countPage }">
<a href="PageServlet?pageNos=${pageNos+1 }">下一页</a>
<a href="PageServlet?pageNos=${countPage }">末页</a>
</c:if>
</center>
<form action="PageServlet" method="get"><!-- 这里建立一个表单提交到服务器 -->
<h4 align="center">共${countPage}页  
<input type="text" value="${pageNos}" name="pageNos" size="1">页
<input type="submit" value="go">
</h4>
</form>
  </body>
</html>

 一定注意你运行的时候要从servlet运行 就是点中你的servlet文件运行从服务器运行,要不会报错的,原因是,我觉得你们懂吧!....要不前台会报错的...自己想吧,

一定要下载jstl 包 并且包含头文件 --------------上面有解释

 

还有那个jsp页面 把我的这个注释删了运行---要不报错----一定删了啊啊啊  注释如下:

<!-- 这个是jstl 表达式和EL表达式,大家可以去下一个jstl jar包 复制到 web-inf目录下(eclipse) 然后包含 <%//@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>这个头文件 至于语法我不懂 这个foreach要写在body
下面,要不循环不出来,因为我写了一个大的报表(如果只把这个foreach 放在我写的表格table前面 无法循环 ,原因不知)下面的
begin="${(pageNos-1)*1 为开始页数 和 end="${pageNos*1-1}"结束页数,我这里是每页显示一个,如果大家要显示多个更改此代码
例如两个的话begin="${(pageNos-1)*2 }" end="${pageNos*2-1}" 嗯嗯那没太注意算法,不求甚解吧哈哈哈-->

运行截图:

 

代码结构:

代码打包下载:链接: https://pan.baidu.com/s/1uednZQBmR_AVKbGUw-mIIA 密码: ndwa  

 

原文地址:https://www.cnblogs.com/xuexidememeda/p/8972906.html