En este post vamos a crear una aplicación Java simple y desplegarla en un servidor Tomcat con Maven.

Tomcat es un servidor web que permite ejecutar aplicaciones Java. En este post vamos a ver como desplegar una aplicación Java en un servidor Tomcat.

Mientras que Maven es una herramienta de construcción de software que nos permite gestionar el ciclo de vida de un proyecto Java. En este post vamos a ver como crear un proyecto Java con Maven.

Escenario

  1. Instala tomcat9 como hemos visto en la documentación.
apt install tomcat9 tomcat9-admin
  1. Configuramos el panel de administración Tomcat-Manager y configúralo para su acceso.
nano /etc/tomcat9/tomcat-users.xml
<tomcat-users>
    <role rolename="manager-gui"/>
    <user username="tomcat" password="s3cret" roles="manager-gui"/>
</tomcat-users>
  1. Instala la aplicación maven que nos va a ayudar a compilar aplicaciones java.
apt install maven
  1. A continuación vamos a generar un proyecto, que será el esqueleto de nuestra aplicación Java, para ello ejecutamos:
mvn archetype:generate -DgroupId=com.app.example -DartifactId=java-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

La estructura de nuestro directorio sería la siguiente:

java-app/
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── app
    │   │           └── example
    │   │               └── App.java
    │   └── resources
    └── test
        └── java
            └── com
                └── app
                    └── example
                        └── AppTest.java
  1. Modificamos el fichero java-app/pom.xml para que tenga la siguiente estructura:
    <?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.tutorialspoint</groupId>
    <artifactId>hello-world</artifactId>
    <version>1</version>
    <packaging>war</packaging>

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.3.0.RELEASE</version>
        <relativePath/> 
    </parent>

    <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
       <java.version>1.8</java.version>
       <tomcat.version>9.0.37</tomcat.version>
    </properties>

    <dependencies>
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>  
          <groupId>org.springframework.boot</groupId>  
     <artifactId>spring-boot-starter-tomcat</artifactId>  
     <scope>provided</scope>  
       </dependency>   
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
       </dependency>
    </dependencies>

    <build>
       <plugins>
          <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
       </plugins>
    </build>
</project>
  1. Construimos la aplicación, y para ello modificamos el fichero src/main/java/com/app/example/App.java para que tenga la siguiente estructura:
package com.app.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class App extends SpringBootServletInitializer {
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(App.class);
   }
   public static void main(String[] args) {
      SpringApplication.run(App.class, args);
   }

   @RequestMapping(value = "/")
   public String hello() {
      return "<center>Hola mundo!!!</center>";
   }
}
  1. Construimos la aplicación, y para ello ejecutamos:
mvn package
  1. Copiamos el fichero java-app/target/hello-world-1.war a la carpeta /var/lib/tomcat9/webapps/ y reiniciamos el servicio de tomcat9.
systemctl restart tomcat9

Comprobación

Si accedemos a la ip de nuestro servidor, veremos el mensaje Hola mundo!!! en el navegador.

Y si accedemos al Tomcat-Manager, veremos que la aplicación se ha desplegado correctamente.