miércoles, 23 de octubre de 2019

Creando JSP con una vista de una base de datos

Trabajaremos con las siguientes tablas:


Además, le vamos a crear una vista a la tabla "pagos" (para saber como crear este código paso a paso has clic aquí):

  1. CREATE VIEW pagos_view AS
  2. SELECT
  3. pagos.idpagos id,
  4. inquilinos.dni dni,
  5. CONCAT_WS(" ", inquilinos.nombres, inquilinos.paterno, inquilinos.materno) datos,
  6. pagos.monto monto,
  7. DATE(pagos.fecha) fecha,
  8. TIME(pagos.fecha) hora
  9. FROM pagos INNER JOIN inquilinos
  10. ON pagos.inquilino = inquilinos.idinquilinos


Creando el DTO, DAO y su implementación

DTO

¿Cómo crear un DTO desde una tabla de una base de datos? Dale clic

  1. package dto;
  2. import java.time.LocalDateTime;
  3. public class Pagos {
  4. private Integer idpagos;
  5. private Integer inquilino;
  6. private Double monto;
  7. private LocalDateTime fecha;
  8. public Pagos() {
  9. }
  10. public Integer getIdpagos() {
  11. return idpagos;
  12. }
  13. public void setIdpagos(Integer idpagos) {
  14. this.idpagos = idpagos;
  15. }
  16. public Integer getInquilino() {
  17. return inquilino;
  18. }
  19. public void setInquilino(Integer inquilino) {
  20. this.inquilino = inquilino;
  21. }
  22. public Double getMonto() {
  23. return monto;
  24. }
  25. public void setMonto(Double monto) {
  26. this.monto = monto;
  27. }
  28. public LocalDateTime getFecha() {
  29. return fecha;
  30. }
  31. public void setFecha(LocalDateTime fecha) {
  32. this.fecha = fecha;
  33. }
  34. }

DAO

¿Cómo crear un DAO para una tabla de una base de datos? Dale clic

  1. package dao;
  2. import java.util.List;
  3. public interface DaoPagos {
  4. public List<Object[]> pagosSel();
  5. public String getMessage();
  6. }

Implementación

¿Cómo crear la implementación de un DAO? Dale clic

  1. package dao.impl;
  2. import biblioteca.ConectaBD;
  3. import dao.DaoPagos;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.time.format.DateTimeFormatter;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. public class DaoPagosImpl implements DaoPagos {
  12. private final ConectaBD conectaDb;
  13. private String mensaje;
  14. public DaoPagosImpl() {
  15. this.conectaDb = new ConectaBD();
  16. }
  17. @Override
  18. public List<Object[]> pagosSel() {
  19. List<Object[]> list = null;
  20. StringBuilder sql = new StringBuilder();
  21. sql.append("SELECT ")
  22. .append("id,")
  23. .append("dni,")
  24. .append("datos,")
  25. .append("monto,")
  26. .append("fecha,")
  27. .append("hora")
  28. .append(" FROM pagos_view");
  29. try (Connection cn = conectaDb.conexionDB()) {
  30. PreparedStatement ps = cn.prepareStatement(sql.toString());
  31. ResultSet rs = ps.executeQuery();
  32. list = new ArrayList<>();
  33. while (rs.next()) {
  34. Object[] pago = new Object[6];
  35. pago[0] = rs.getInt(1);
  36. pago[1] = rs.getString(2);
  37. pago[2] = rs.getString(3);
  38. pago[3] = rs.getDouble(4);
  39. pago[4] = rs.getString(5);
  40. pago[5] = rs.getString(6);
  41. list.add(pago);
  42. }
  43. } catch (SQLException e) {
  44. mensaje = e.getMessage();
  45. }
  46. return list;
  47. }
  48. @Override
  49. public String getMessage() {
  50. return mensaje;
  51. }
  52. }


Se puede apreciar que la función "pagosSel" devuelve un "List" pero no de "Pagos" sino tipo "Object[]", esto porque la vista no devuelve los mismo elementos ni tipos que hace la tabla. Es muy importante recordar que a la vista solo se le hace consultas de tipo "SELECT", no debemos intentar actualizar o eliminar, pues nos dará error.

Servlet y Validator

¿Cómo crear un validator y Servlet para una tabla de una base de datos? Dale clic

Validator

  1. package web.validator;
  2. import dao.DaoPagos;
  3. import dao.impl.DaoPagosImpl;
  4. import java.util.List;
  5. import javax.servlet.http.HttpServletRequest;
  6. public class PagosValidator {
  7. private final HttpServletRequest request;
  8. private final DaoPagos daoPagos;
  9. public PagosValidator(HttpServletRequest request) {
  10. this.request = request;
  11. this.daoPagos = new DaoPagosImpl();
  12. }
  13. public String pagosSel() {
  14. String result = null;
  15. List<Object[]> list = daoPagos.pagosSel();
  16. if (list != null) {
  17. request.setAttribute("list", list);
  18. } else {
  19. result = daoPagos.getMessage();
  20. }
  21. return result;
  22. }
  23. }

Servlet

  1. package web.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.RequestDispatcher;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import web.validator.PagosValidator;
  10. @WebServlet(name = "PagosServlet", urlPatterns = {"/Pagos"})
  11. public class PagosServlet extends HttpServlet {
  12. protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. response.setContentType("text/html;charset=UTF-8");
  15. String accion = request.getParameter("accion");
  16. accion = (accion == null) ? "" : accion;
  17. String result;
  18. String target = "pagosSel.jsp";
  19. PagosValidator validator = new PagosValidator(request);
  20. switch (accion) {
  21. case "SEL":
  22. result = validator.pagosSel();
  23. break;
  24. case "":
  25. result = "Solicitud requerida";
  26. break;
  27. default:
  28. result = "Solicitud no reconocida";
  29. }
  30. if (result != null) {
  31. request.setAttribute("message", result);
  32. }
  33. RequestDispatcher dispatcher = request.getRequestDispatcher(target);
  34. dispatcher.forward(request, response);
  35. }
  36. @Override
  37. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  38. throws ServletException, IOException {
  39. processRequest(request, response);
  40. }
  41. @Override
  42. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  43. throws ServletException, IOException {
  44. processRequest(request, response);
  45. }
  46. @Override
  47. public String getServletInfo() {
  48. return "Short description";
  49. }
  50. }

Los JSP con la vista

¿Cómo crear un JSP para una tabla de una base de datos? Dale clic

El JSP que realiza la llamada al Servlet: pagos.jsp
 
<%response.sendRedirect("Pagos?accion=SEL");%>
 

El JSP que recibe los datos del Servlet: pagosSel.jsp
  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Reporte de pagos</title>
  8. <script src="jq/jquery-3.3.1.min.js" type="text/javascript"></script>
  9. <script src="js/pagos.js" type="text/javascript"></script>
  10. </head>
  11. <body>
  12. <a href="index.html">Regresar</a><br/>
  13. <c:if test="${message != null}">
  14. <div>${message}</div>
  15. </c:if>
  16. <table border="1">
  17. <thead>
  18. <tr>
  19. <th>ID</th>
  20. <th>DNI</th>
  21. <th>NOMBRES Y APELLIDOS</th>
  22. <th>MONTO PAGADO</th>
  23. <th>FECHA</th>
  24. <th>HORA</th>
  25. </tr>
  26. </thead>
  27. <tbody>
  28. <c:forEach var="f" items="${list}">
  29. <tr>
  30. <td>${f[0]}</td>
  31. <td>${f[1]}</td>
  32. <td>${f[2]}</td>
  33. <td>${f[3]}</td>
  34. <td>${f[4]}</td>
  35. <td>${f[5]}</td>
  36. </tr>
  37. </c:forEach>
  38. </tbody>
  39. </table>
  40. </body>
  41. </html>

El resultado sería:
ID DNI NOMBRES Y APELLIDOS MONTO PAGADO FECHA HORA
1 31378082 LUISA PAUCAR NARRO 400.0 2019-10-21 21:34:35
2 43331042 AUGUSTO SOTOMAYOR NARVAJO 300.0 2019-10-18 18:30:00

Estructura


No hay comentarios:

Publicar un comentario