Servlet – Paginación con ejemplo

La paginación es una secuencia de páginas que están conectadas y tienen un contenido similar. La paginación es una técnica para dividir una lista de múltiples registros en subsiste. Por ejemplo, busca con una palabra clave en Google y recibe decenas de miles de resultados. Es importante tener en cuenta que incluso cuando el contenido de una sección de una página se divide en páginas distintas, lo definiremos como paginación.

Paginación en Java

Para dividir una gran cantidad de registros en varias partes, usamos la paginación. Permite a los usuarios mostrar solo una parte de los registros. Cargar todos los registros en una sola página puede llevar tiempo, por lo que siempre se recomienda crear una paginación. En Java, podemos desarrollar ejemplos de paginación fácilmente. En este ejemplo de paginación, estamos usando la base de datos MySQL para obtener registros.

Ejemplo

Paso 1 : Crea una tabla en Mysql

create table employee(empid int(11),empname varchar(20),empsalary int(11),empdept varchar(20));

Paso 2 : Cree una clase JavaBean para establecer valores en la base de datos y obtener valores de la base de datos.

Java

public class Employee {
    int employeeId;
    String employeeName;
    int salary;
    String deptName;
  
    public String getDeptName() { return deptName; }
  
    public void setDeptName(String deptName)
    {
        this.deptName = deptName;
    }
  
    public int getEmployeeId() { return employeeId; }
  
    public void setEmployeeId(int employeeId)
    {
        this.employeeId = employeeId;
    }
  
    public String getEmployeeName() { return employeeName; }
  
    public void setEmployeeName(String employeeName)
    {
        this.employeeName = employeeName;
    }
  
    public int getSalary() { return salary; }
  
    public void setSalary(int salary)
    {
        this.salary = salary;
    }
}

Paso 3 : crear una clase de fábrica para obtener conexiones desde la base de datos.

Java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
  
public class ConnectionFactory {
  
    // static reference to itself
    private static ConnectionFactory instance = new ConnectionFactory();
  
    String url = "jdbc:mysql://localhost:3306/ashok";
    String user = "root";
    String password = "";
    String driverClass = "com.mysql.jdbc.Driver";
  
    // private constructor
    private ConnectionFactory()
    {
        try {
            Class.forName(driverClass);
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
  
    public static ConnectionFactory getInstance()
    {
        return instance;
    }
  
    public Connection getConnection() throws SQLException, ClassNotFoundException
    {
        Connection connection = DriverManager.getConnection(url, user, password);
        return connection;
    }
}

Paso 4 : crear una clase Dao para crear un objeto de clase Factory y llamar a ese método. Y cree una consulta y configúrela en un objeto JavaBean y agréguela a ArrayList Object.

Java

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
  
public class EmployeeDAO {
  
    Connection connection;
    Statement stmt;
    
    private int noOfRecords;
    public EmployeeDAO() {}
  
    private static Connection getConnection() throws SQLException, ClassNotFoundException
    {
        Connection con = ConnectionFactory.getInstance().getConnection();
        return con;
    }
  
    public List<Employee> viewAllEmployees(int offset, int noOfRecords)
    {
        String query = "select SQL_CALC_FOUND_ROWS * from employee limit " + offset + ", " + noOfRecords;
        List<Employee> list = new ArrayList<Employee>();
        Employee employee = null;
        try {
            connection = getConnection();
            stmt = connection.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                employee = new Employee();
                employee.setEmployeeId(rs.getInt(1));
                employee.setEmployeeName(rs.getString(2));
                employee.setSalary(rs.getInt(3));
                employee.setDeptName(rs.getString(4));
                list.add(employee);
            }
  
            rs.close();
            rs = stmt.executeQuery("SELECT FOUND_ROWS()");
  
            if (rs.next())
               this.noOfRecords = rs.getInt(1);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        finally
        {
            try {
                if (stmt != null)
                    stmt.close();
                if (connection != null)
                    connection.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }
    public int getNoOfRecords() { return noOfRecords; }
}

Paso 5 : cree una clase de servlet y cree un objeto de clase DAO y llame al método y reenvíelo a la página display.jsp

Java

import a1.Employee;
import a1.EmployeeDAO;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  
public class EmployeeServlet extends HttpServlet {
  
    private static final long serialVersionUID = 1L;
    public EmployeeServlet() { super(); }
  
    @Override
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
        int page = 1;
        int recordsPerPage = 5;
        if (request.getParameter("page") != null)
            page = Integer.parseInt(
                request.getParameter("page"));
        EmployeeDAO dao = new EmployeeDAO();
        List<Employee> list = dao.viewAllEmployees(
            (page - 1) * recordsPerPage,
            recordsPerPage);
        int noOfRecords = dao.getNoOfRecords();
        int noOfPages = (int)Math.ceil(noOfRecords * 1.0
                                       / recordsPerPage);
        request.setAttribute("employeeList", list);
        request.setAttribute("noOfPages", noOfPages);
        request.setAttribute("currentPage", page);
        RequestDispatcher view
            = request.getRequestDispatcher("display.jsp");
        view.forward(request, response);
    }
}

Paso 6 : configurar el archivo web.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  
   <servlet>
       <servlet-name>EmployeeServlet</servlet-name>
       <servlet-class>a2.EmployeeServlet</servlet-class>
   </servlet>
  
   <servlet-mapping>
       <servlet-name>EmployeeServlet</servlet-name>
       <url-pattern>/employee.do</url-pattern>
   </servlet-mapping>
  
   <session-config>
       <session-timeout>30</session-timeout>
   </session-config>
  
</web-app>

Paso 7: cree un archivo display.jsp para mostrar registros de 5 a 5 registros

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  
  pageEncoding="ISO-8859-1"%>
  
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  
<!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=ISO-8859-1">
<title>Employees</title>
</head>
  
<body>
  <table border="1" cellpadding="5" cellspacing="5">
      <tr>
          <th>Emp ID</th>
          <th>Emp Name</th>
          <th>Salary</th>
          <th>Dept Name</th>
      </tr>
  
      <c:forEach var="employee" items="${employeeList}">
          <tr>
              <td>${employee.employeeId}</td>
              <td>${employee.employeeName}</td>
              <td>${employee.salary}</td>
              <td>${employee.deptName}</td>
          </tr>
      </c:forEach>
  
  </table>
  
  <%--For displaying Previous link except for the 1st page --%>
  <c:if test="${currentPage != 1}">
      <td><a href="employee.do?page=${currentPage - 1}">Previous</a></td>
  </c:if>
  
  <%--For displaying Page numbers. The when condition does not display
              a link for the current page--%>
  
  <table border="1" cellpadding="5" cellspacing="5">
      <tr>
          <c:forEach begin="1" end="${noOfPages}" var="i">
              <c:choose>
                  <c:when test="${currentPage eq i}">
                      <td>${i}</td>
                  </c:when>
                  <c:otherwise>
                      <td><a href="employee.do?page=${i}">${i}</a></td>
                  </c:otherwise>
              </c:choose>
          </c:forEach>
      </tr>
  </table>
  
  <%--For displaying Next link --%>
  
  <c:if test="${currentPage lt noOfPages}">
      <td><a href="employee.do?page=${currentPage + 1}">Next</a></td>
  </c:if>
  
</body>
  
</html>

Salida :

ID emp. Nombre de emp. Salario Nombre de DP
101 Raj 5000 bca
102 Karan 7000 mca
103 amit 4000 bcom
104 manisha 8000 Maestría en Administración de Empresas
105 Sakshi 3000 licenciado en Letras

Obtener millones de registros de una base de datos consume casi toda la potencia de la CPU y la memoria de la máquina. Por lo tanto, dividimos millones de registros en pequeños fragmentos que muestran un número limitado de registros (por ejemplo, 5 o 10) por página.

Publicación traducida automáticamente

Artículo escrito por rohank143rk63 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *