Servlets y JSP: tutorial Jakarta EE 10 y Java 21

Apache Tomcat 10.1 es el servidor de referencia para Jakarta EE Web Profile. Soporta Servlet 6.0, JSP 3.1, JSTL 3.0 y WebSocket 2.1.

Instalar y configurar Tomcat

# Descargar Tomcat 10.1 desde tomcat.apache.org
wget https://downloads.apache.org/tomcat/tomcat-10/v10.1.24/bin/apache-tomcat-10.1.24.tar.gz
tar -xzf apache-tomcat-10.1.24.tar.gz -C /opt
export CATALINA_HOME=/opt/apache-tomcat-10.1.24

# Permisos de arranque
chmod +x $CATALINA_HOME/bin/*.sh

# Arrancar/parar
$CATALINA_HOME/bin/startup.sh
$CATALINA_HOME/bin/shutdown.sh
# Configurar usuario admin para el Manager (conf/tomcat-users.xml)
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="tu-password-seguro" roles="manager-gui,admin-gui"/>

Compilar y desplegar con Maven

<!-- pom.xml: plugin para despliegue automático -->
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat10-maven-plugin</artifactId>
    <version>3.0-r1928853</version>
    <configuration>
        <url>http://localhost:8080/manager/text</url>
        <server>TomcatLocal</server> <!-- credenciales en settings.xml -->
        <path>/mi-app</path>
    </configuration>
</plugin>
# Compilar el WAR
mvn clean package

# Desplegar en Tomcat en ejecución
mvn tomcat10:deploy

# Copiar manualmente el WAR al directorio webapps
cp target/mi-app.war $CATALINA_HOME/webapps/
# Tomcat lo desempaqueta automáticamente

JNDI: configurar recursos en Tomcat

Los datos de conexión a BD deben vivir en la configuración de Tomcat, no en el código:

<!-- conf/context.xml -->
<Context>
    <Resource name="jdbc/mibd"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.cj.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/mibase?useSSL=true&serverTimezone=UTC"
              username="usuario"
              password="contraseña"
              maxTotal="20"
              maxIdle="10"
              maxWaitMillis="10000"/>
</Context>
// Obtener conexión desde el Servlet
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mibd");
try (Connection con = ds.getConnection()) {
    // usar la conexión
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR