====== JSP: Java Services Page ====== Busca separar la lógica de la aplicación de la lógica de presentación. Tenemos páginas compiladas por el servidor que se ejecutan en este. Se invocan como páginas normales y precisan que el servidor entienda JSP. {{drawio>dad2:jspDiagrama.png}} ===== Implementación ===== En la ruta src/main/webapp/WEB-INF crearemos el archivo Index.jsp: {{:dad2:pasted:20240213-105332.png}} Tras eso se nos generará el siguiente archivo: {{:dad2:pasted:20240213-105417.png}} A este archivo podemos añadir código de java introduciéndolo entre "<% %>": {{:dad2:pasted:20240213-105759.png}} <% out.println("patata"); %> ===== Otros Ejemplos ===== El resultado de 5*6 es:

<%=5*6%>

<%for (int i=0; i<=4;i++)%> <%=i%> * 10 = <% i*10%>
===== Etiquetas de JSP ===== <%@ Directiva de configuración de la página%> <%@ page errorPage = "error.jsp"%> <%! Declaración de variables y funciones%> <%! int i=0; %> <%Bloque de código Java%> <%for(i=0;i<5;i++){%> <%}%> ===== Modificaciones del web.xml para declaración de servlet ===== Servlet//nombre del servlet paquete.paqueton.servlets.ImplementacionServlet//Clase que lo implementa Servlet /servlet ===== Modelo Vista Controlador (MVC) y Paso de Atributos ===== Esta parte se centra en la capa de negocio. ==== Control ==== Es un servlet único que recibirá todas las peticiones y las redirigirá a otra clase. Este servlet comprueba los permisos e invoca las funciones o modelos correspondientes. Para interactuar con el control se usa la URL seguida de un "?" y un "ACTION_ID" que indique la acción a realizar: http://localhost:8080/contexto/control?ACTION_ID=LEER_CORREO En esta URL sería Control el Servlet que controla todas las peticiones y LEER_CORREO el identificador de modelo o acción a ejecutar. ==== Modelo ==== Realiza toda la funcionalidad, se podría decir que es una clase padre de la que heredan todas las demás. Suele haber varios modelos dentro de una aplicación. {{drawio>dad2:ModeloPadre.png}} ===== Implementación MVC ===== El proyecto seguirá la siguiente estructura en la que separaremos por un lado el servlet control y por otro lado las clases: {{:dad2:pasted:20240221-115509.png}} ==== Servlet Control ==== package clases; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Hashtable; import acciones.Accion; import acciones.InsertarUsuario; /** * Servlet implementation class Control */ public class Control extends HttpServlet { private static final long serialVersionUID = 1L; private Hashtable acciones; //Tabla hash public static final String PARAM_ACTION_ID = "ID_ACCION"; /** * @see HttpServlet#HttpServlet() */ public Control() { super(); // TODO Auto-generated constructor stub } @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(config); this.acciones = new Hashtable();//Tabla de acciones this.acciones.put("INSERTAR_USUARIO", new InsertarUsuario());//insertamos accion en tabla hash } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String jsp = "index.jps"; String paramIdAccion = request.getParameter(Control.PARAM_ACTION_ID);//recibimos como parametro el ID de accion Accion accion = this.acciones.get(paramIdAccion);//Obtenemos la accion a realizar de la tabla hash jsp = accion.ejecutar(request, response);//Nos devuelve la JSP a la que hay que ir para realizar la acción request.getRequestDispatcher(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); } } ==== Clase Accion ==== package acciones; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public abstract class Accion { //Esta es la clase Padre public abstract String ejecutar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; } ==== Clase InsertarUsuario ==== package acciones; import java.io.IOException; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public class InsertarUsuario extends Accion { @Override public String ejecutar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Toda la funcionalidad de insertar usuario"); return "destino.jsp"; } } ==== index.jsp ==== <%@page import="clases.Control"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> Insert title here Insertar ==== destino.jsp ==== <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> Insert title here Destinooo