Construyendo un formulario web simple con Jetty y Servlets
En este artículo, aprenderemos a crear una pequeña aplicación web utilizando Java, Jetty, Thymeleaf y Servlets.
No utilizaremos frameworks como Spring Boot porque nuestro objetivo es entender cómo funciona una aplicación web.
Antes de comenzar, necesitamos los siguientes requisitos:
- Comprensión de cómo funciona una aplicación web
- Fundamentos de programación
- Java 11 o superior
- Conocimiento de cómo funciona Maven
- Un IDE de tu elección
En mi caso, utilizaré NetBeans.
En NetBeans, crearé un Proyecto Maven → Aplicación Java.
Necesitamos editar el archivo pom.xml porque contiene las siguientes dependencias:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.egga</groupId> <artifactId>JettyProject</artifactId> <version>version-0.1</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <exec.mainClass>com.egga.jettyproject.JettyProject</exec.mainClass> </properties> <dependencies> <!-- Dependencia principal para el servidor Jetty --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>11.0.23</version> </dependency>
<!-- Dependencia para la API Jakarta Servlet --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>11.0.23</version> </dependency>
<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.1.3.RELEASE</version> </dependency>
</dependencies></project>
Necesitamos crear dos páginas: una página que muestre el formulario y otra que muestre el resultado.
simpleform.html:
<!DOCTYPE html><!DOCTYPE html><html><head> <title>Form Result</title></head><body> <h1>Your Form Data</h1> <p>Name: <span th:text="${name}"></span></p> <p>Email: <span th:text="${email}"></span></p> <p>Message: <span th:text="${message}"></span></p></body></html>
Configurando Thymeleaf en tu aplicación
Para integrar Thymeleaf con Jetty, necesitamos crear una clase que configure el TemplateEngine. Esta clase inicializará Thymeleaf y lo pondrá a disposición para su uso en nuestros servlets.
Aquí te mostramos cómo crear la clase ThymeleafConfig:
import org.thymeleaf.TemplateEngine;import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
public class ThymeleafConfig {
public TemplateEngine createTemplateEngine() { // Configurar Thymeleaf TemplateResolver ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setPrefix("/templates/"); // Carpeta de plantillas templateResolver.setSuffix(".html"); // Extensión de archivo templateResolver.setTemplateMode("HTML"); // Crear TemplateEngine TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver);
return templateEngine; }}
Ahora que las dos páginas están creadas, vamos a crear el siguiente servlet:
/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */package com.egga.jettyproject.web;
import com.egga.jettyproject.includes.ThymeleafConfig;import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import org.thymeleaf.TemplateEngine;import org.thymeleaf.context.Context;
public class FormExample extends HttpServlet { private TemplateEngine templateEngine;
@Override public void init() { // Inicialización del TemplateEngine usando ThymeleafConfig ThymeleafConfig thymeleafConfig = new ThymeleafConfig(); templateEngine = thymeleafConfig.createTemplateEngine(); } @Override public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ Context context = new Context(); String contenido = templateEngine.process("simpleform", context); response.setContentType("text/html"); response.getWriter().write(contenido); }
@Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ Context context = new Context(); String name = request.getParameter("name"); String email = request.getParameter("email"); String message = request.getParameter("message"); context.setVariable("name",name ); context.setVariable("email",email ); context.setVariable("message",message); String contenido = templateEngine.process("result", context); response.setContentType("text/html"); response.getWriter().write(contenido);
}
}
Clase principal que ejecuta la aplicación
Finalmente, la clase principal que ejecuta la aplicación:package com.egga.jettyproject;
import com.egga.jettyproject.web.FormExample;import java.util.logging.Level;import java.util.logging.Logger;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.servlet.ServletHolder;import org.eclipse.jetty.webapp.WebAppContext;
public class JettyProject {
public static void main(String[] args) { try { Server server = new Server(8080); WebAppContext context = new WebAppContext(); context.setContextPath("/jettyexample"); context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "true"); context.setResourceBase("src/main/resources/static");
ServletHolder formexample = new ServletHolder(new FormExample()); context.addServlet(formexample, "/formexample");
server.setHandler(context); server.start(); server.join(); } catch (Exception ex) { Logger.getLogger(JettyProject.class.getName()).log(Level.SEVERE, null, ex); } }
}
Finalmente, compila, ejecuta y escribe la siguiente dirección en tu navegador:
http://localhost:8080/jettyexample/formexample
Puedes descargar el ejemplo pulsando aquí
Comentarios
Publicar un comentario