📝 JSF_JSP_Ficha_Teoria
← Volver

JSP / JSF — Ficha de Teoría


Tabla Comparativa Rápida

Aspecto JSP (JavaServer Pages) JSF (JavaServer Faces)
Tipo Tecnología de vistas Framework web completo
Modelo Basado en páginas Basado en componentes
Arquitectura MVC (con Servlets) MVC propio integrado
Ejecución Servidor Servidor
Cliente recibe HTML, CSS, JS HTML, CSS, JS
Uso de Java en vista ✔ Directo (scriptlets, EL) ❌ No directo
Importar clases <%@ page import="paquete.Clase" %> ❌ No en vista
Expresiones ${} #{}
Acceso a lógica Directo o con Servlets Mediante Managed Beans
Anotaciones ❌ No ✔ Sí (@ManagedBean, @Named)
Estado Stateless Stateful
Reutilización Baja Alta

JSP — JavaServer Pages

¿Qué es?

Tecnología Java EE que permite embeber código Java dentro de HTML para generar contenido dinámico en el servidor. El servidor compila la página JSP en un Servlet en tiempo de ejecución.

Ciclo de vida JSP

Cliente → Petición HTTP
           ↓
      Servidor (Tomcat)
           ↓
   ¿Primera vez?
      Sí → Compilar JSP → Servlet → ejecutar → HTML
      No → Usar Servlet ya compilado → HTML
           ↓
      Respuesta HTTP (HTML al cliente)

Elementos sintácticos clave

Elemento Sintaxis Uso
Scriptlet <% código Java %> Ejecutar código Java
Expresión <%= valor %> Imprimir valor en HTML
Declaración <%! método/variable %> Declarar miembros de clase
Directiva de página <%@ page ... %> Configurar la página
Directiva de importación <%@ page import="pkg.Clase" %> Importar clases Java
Comentario JSP <%-- comentario --%> No se envía al cliente
EL (Expression Language) ${expresion} Acceder a beans/atributos

Ejemplo básico JSP

<%@ page import="java.util.Date" %>
<html>
  <body>
    <% String nombre = "Opositor"; %>
    <p>Hola, <%= nombre %></p>
    <p>Fecha: ${pageContext.response.locale}</p>
  </body>
</html>

Objetos implícitos JSP

Objeto Tipo Descripción
request HttpServletRequest Datos de la petición
response HttpServletResponse Datos de la respuesta
session HttpSession Sesión del usuario
application ServletContext Contexto de la aplicación
out JspWriter Escritura de salida
pageContext PageContext Contexto de la página
config ServletConfig Configuración del Servlet
page Object La propia página (this)
exception Throwable Solo en páginas de error

JSF — JavaServer Faces

¿Qué es?

Framework MVC orientado a componentes para el desarrollo de interfaces web en Java EE. Define un ciclo de vida propio y separa completamente la vista de la lógica mediante Managed Beans.

Arquitectura MVC en JSF

Vista (Facelets .xhtml)
        ↕  #{bean.propiedad}
  Managed Bean (lógica + estado)
        ↕
  Capa de servicio / modelo

Ciclo de vida JSF (6 fases)

1. Restore View         → Reconstruir el árbol de componentes
2. Apply Request Values → Poblar componentes con datos enviados
3. Process Validations  → Ejecutar validadores
4. Update Model Values  → Actualizar propiedades del Managed Bean
5. Invoke Application   → Ejecutar la acción del usuario
6. Render Response      → Generar HTML y enviar al cliente

⚠️ Si hay error en validación, se salta directamente a la fase 6 (Render Response).

Componentes JSF

Componente JSF ¿Qué hace?
UI Components Elementos visuales (inputs, botones, tablas)
Managed Bean Lógica de negocio / controlador
Validator Valida datos de entrada
Converter Convierte tipos de datos
Renderer Genera la salida (HTML)
Navigation Handler Controla navegación entre páginas
FacesContext Contexto de ejecución
Depurador NO es componente JSF

Managed Bean — anotaciones principales

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean {
    private String nombre;

    public String getNombre() { return nombre; }
    public void setNombre(String n) { this.nombre = n; }

    public String login() {
        // lógica de autenticación
        return "inicio"; // nombre de la vista destino
    }
}

Ámbitos (Scopes) de un Managed Bean

Scope Anotación Duración
Request @RequestScoped Una petición HTTP
View @ViewScoped Mientras el usuario está en la vista
Session @SessionScoped Duración de la sesión
Application @ApplicationScoped Vida de la aplicación

Ejemplo básico JSF (Facelets)

<!DOCTYPE html>
<html xmlns:h="http://xmlns.jcp.org/jsf/html">
  <h:head><title>Ejemplo JSF</title></h:head>
  <h:body>
    <h:form>
      <h:inputText value="#{usuarioBean.nombre}" />
      <h:commandButton value="Enviar" action="#{usuarioBean.login}" />
    </h:form>
  </h:body>
</html>

EL en JSF: #{} vs ${}

Expresión Framework Evaluación
${} JSP / EL estándar Inmediata (al renderizar)
#{} JSF / EL unificada Diferida (en el ciclo de vida JSF)

Flujo de una Petición Web: JSP vs JSF

─────────────────────────────────────────────────────────
JSP

  Browser ──GET/POST──▶ Servlet ──lógica──▶ JSP (.jsp)
                                              │ genera HTML
  Browser ◀──HTML──────────────────────────────┘

─────────────────────────────────────────────────────────
JSF

  Browser ──POST──▶ FacesServlet
                        │
               [Ciclo de vida 6 fases]
                        │
               Managed Bean (lógica)
                        │
               Facelets (.xhtml) → HTML
                        │
  Browser ◀──HTML───────┘
─────────────────────────────────────────────────────────

Resumen en 3 Puntos

  1. JSP es una tecnología de vistas que convierte páginas con código Java embebido en Servlets en el servidor; usa ${} para EL y scriptlets <% %> para lógica directa. Es stateless y de baja reutilización.

  2. JSF es un framework MVC completo orientado a componentes reutilizables; separa vista (Facelets .xhtml) de lógica (Managed Beans anotados con @ManagedBean), usa #{} para EL diferida y gestiona un ciclo de vida de 6 fases.

  3. La diferencia clave para el examen: JSF es stateful (mantiene estado del árbol de componentes), JSP es stateless; JSF accede a la lógica solo mediante Managed Beans, nunca con código Java en la vista; el Depurador NO es un componente JSF.