jueves, 17 de octubre de 2019

Servlets

¿Qué es un Servlet?

Se le llama así a una de las tecnologías proporcionadas por Java que generan componentes independientes que serán empleados en aplicaciones web, estos tienen acceso completo a las API de Java y las bibliotecas de HTTP. Los servlets están intimanente ligados a la plataforma y el servidor.

¿Cómo crear un Servlet en NetBeans?

Seguir los pasos:


¿Qué debemos modificar?

Cambiar el nombre de acuerdo a la función que hará o tabla que dará mantenimiento, colocarlo por preferencia en un paquete que contendrá a los servlets, en algunos casos podemos llamarlos controllers haciendo referencia al patrón MVC.

Modificar el alias del Servlet a uno que no incluya la terminación servlet y finalizar.


Código de ejemplo

Teniendo como base a la tabla "Inquilinos"(clic aquí para ver el DTO) a la que le realizaremos un mantenimiento (CRUD) teniendo como DAO a "DaoInquilinos" y su correspondiente implementación (clic aquí para ver el DAO).Además, las pruebas a las funciones declaradas en el DAO (clic aquí para ver el DAO).

Crearemos dos paquetes dentro del paquete web que serán "servlet" y "validator", dentro crearemos respectivamente el servlet llamado "InquilinosServlet" y una clase de apoyo llamada "InquilinosValidator", esta untima clase nos sirve para reducir la cantidad de código en el Servlet y poder tener mejor mantenimiento de este, por lo tanto es opcional.

Tendríamos el código de "InquilinosValidator" considerando las funciones que declaramos en el DAO, de la siguiente forma:
  1. package web.validator;
  2. import biblioteca.DeString;
  3. import dao.DaoInquilinos;
  4. import dao.impl.DaoInquilinosImpl;
  5. import dto.Inquilinos;
  6. import java.time.LocalDate;
  7. import java.util.List;
  8. import javax.servlet.http.HttpServletRequest;
  9. public class InquilinosValidator {
  10. private final HttpServletRequest request;
  11. private final DaoInquilinos daoInquilinos;
  12. public InquilinosValidator(HttpServletRequest request) {
  13. this.request = request;
  14. this.daoInquilinos = new DaoInquilinosImpl();
  15. }
  16. public String inquilinosSel() {
  17. String result = null;
  18. List<Inquilinos> list = daoInquilinos.inquilinosSel();
  19. if (list != null) {
  20. request.setAttribute("list", list);
  21. } else {
  22. result = daoInquilinos.getMessage();
  23. }
  24. return result;
  25. }
  26. public String inquilinosGet() {
  27. String result = null;
  28. Integer idinquilino = DeString.aInteger(request.getParameter("idinquilino"));
  29. Inquilinos inquilino = daoInquilinos.inquilinosGet(idinquilino);
  30. if (inquilino != null) {
  31. request.setAttribute("inquilino", inquilino);
  32. } else {
  33. result = daoInquilinos.getMessage();
  34. }
  35. return result;
  36. }
  37. public String inquilinosInsUpd(boolean upd) {
  38. StringBuilder result = new StringBuilder("<ul>");
  39. Integer idinquilino = DeString.aInteger(request.getParameter("idinquilinos"));
  40. String dni = request.getParameter("dni");
  41. String nombres = request.getParameter("nombres");
  42. String paterno = request.getParameter("paterno");
  43. String materno = request.getParameter("materno");
  44. String telefono = request.getParameter("telefono");
  45. LocalDate fecha_ingreso = LocalDate.parse(request.getParameter("fecha_ingreso"));
  46. String correo = request.getParameter("correo");
  47. Double deuda = DeString.aDouble(request.getParameter("deuda"));
  48. if (upd && idinquilino == null) {
  49. result.append("<li>Id requerido</li>");
  50. }
  51. if (nombres == null || nombres.trim().length() == 0) {
  52. result.append("<li>Nombre requerido</li>");
  53. } else if (nombres.trim().length() < 3 || nombres.trim().length() > 50) {
  54. result.append("<li>La dimensión del nombre debe estar entre")
  55. .append("3 a 50 caracteres</li>");
  56. }
  57. if (paterno == null || paterno.trim().length() == 0) {
  58. result.append("<li>Apellido paterno requerido</li>");
  59. } else if (paterno.trim().length() < 3 || paterno.trim().length() > 50) {
  60. result.append("<li>La dimensión del apellido paterno debe estar entre")
  61. .append("3 a 50 caracteres</li>");
  62. }
  63. if (materno == null || materno.trim().length() == 0) {
  64. result.append("<li>Apellido materno requerido</li>");
  65. } else if (materno.trim().length() < 3 || materno.trim().length() > 50) {
  66. result.append("<li>La dimensión del apellido materno debe estar entre")
  67. .append("3 a 50 caracteres</li>");
  68. }
  69. if (fecha_ingreso == null) {
  70. result.append("<li>Fecha requerida</li>");
  71. }
  72. if (deuda < 0d) {
  73. result.append("<li>La deuda no puede ser negativa</li>");
  74. }
  75. Inquilinos inquilino = new Inquilinos();
  76. inquilino.setIdinquilinos(idinquilino);
  77. inquilino.setDni(dni);
  78. inquilino.setNombres(nombres);
  79. inquilino.setPaterno(paterno);
  80. inquilino.setMaterno(materno);
  81. inquilino.setFecha_ingreso(fecha_ingreso);
  82. inquilino.setTelefono(telefono);
  83. inquilino.setDeuda(deuda);
  84. inquilino.setCorreo(correo);
  85. if (result.length() == 4) {
  86. String msg = upd
  87. ? daoInquilinos.inquilinosUpd(inquilino)
  88. : daoInquilinos.inquilinosIns(inquilino);
  89. if (msg != null) {
  90. result.append("<li>").append(msg).append("</li>");
  91. }
  92. }
  93. if (result.length() > 4) {
  94. request.setAttribute("inquilino", inquilino);
  95. }
  96. return result.length() == 4 ? null : result.append("</ul>").toString();
  97. }
  98. public String inquilinosDel() {
  99. List<Integer> ids = DeString.ids(request.getParameter("ids"));
  100. String result = (ids != null)
  101. ? daoInquilinos.inquilinosDel(ids)
  102. : "IDs incorrectos";
  103. return result;
  104. }
  105. }

Mientras el código del Servlet sería:

  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.InquilinosValidator;
  10. @WebServlet(name = "InquilinosServlet", urlPatterns = {"/Inquilinos"})
  11. public class InquilinosServlet 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 = "inquilinosSel.jsp";
  19. InquilinosValidator validator = new InquilinosValidator(request);
  20. switch (accion) {
  21. case "SEL":
  22. result = validator.inquilinosSel();
  23. break;
  24. case "INS":
  25. result = validator.inquilinosInsUpd(false);
  26. target = result == null ? "inquilinos.jsp" : "inquilinosIns.jsp";
  27. break;
  28. case "DEL":
  29. result = validator.inquilinosDel();
  30. target = "inquilinos.jsp";
  31. break;
  32. case "GET":
  33. result = validator.inquilinosGet();
  34. target = "inquilinosUpd.jsp";
  35. break;
  36. case "UPD":
  37. result = validator.inquilinosInsUpd(true);
  38. target = result == null ? "inquilinos.jsp" : "inquilinosUpd.jsp";
  39. break;
  40. case "":
  41. result = "Solicitud requerida";
  42. break;
  43. default:
  44. result = "Solicitud no reconocida";
  45. }
  46. if (result != null) {
  47. request.setAttribute("message", result);
  48. }
  49. RequestDispatcher dispatcher = request.getRequestDispatcher(target);
  50. dispatcher.forward(request, response);
  51. }
  52. @Override
  53. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  54. throws ServletException, IOException {
  55. processRequest(request, response);
  56. }
  57. @Override
  58. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  59. throws ServletException, IOException {
  60. processRequest(request, response);
  61. }
  62. @Override
  63. public String getServletInfo() {
  64. return "Short description";
  65. }
  66. }

La estructura de carpetas resultaría en:

La clase DeString es una librería interna. (clic aquí para ver el código), esta permite convertir String a Integer y Double, incluso en colecciones tipo List.

No hay comentarios:

Publicar un comentario