====== 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