Spring WebApplicationInitializer con ejemplo

En Spring , WebApplicationInitializer es una interfaz y es una implementación de Servlet 3.0+ para configurar ServletContext mediante programación en comparación con la forma tradicional de hacerlo mediante el archivo web.xml . Esta interfaz se utiliza para iniciar aplicaciones web de Spring. WebApplicationInitializer registra un Spring DispatcherServlet y crea un contexto de aplicación web Spring. Tradicionalmente, las aplicaciones web de Java basadas en servlets usaban el archivo web.xml para configurar una aplicación web de Java. Desde Servlet 3.0, las aplicaciones web se pueden crear mediante programación a través de escuchas de contexto de Servlet.

Enfoque: basado en XML tradicional

En el enfoque tradicional, los desarrolladores de Spring que crean una aplicación web deberán registrar el DispatcherServlet de Spring. Por ejemplo, podemos tomar WEB-INF/web.xml , esto normalmente se haría de la siguiente manera:

XML

<servlet>
    <!-- Provide a Servlet Name -->
    <servlet-name>myDispatcherServlet</servlet-name>
    <!-- Provide a fully qualified path to the DispatcherServelt class -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
 
<servlet-mapping>
    <!-- Provide a Servlet Name that you want to map -->
    <servlet-name>myDispatcherServlet</servlet-name>
    <!-- Provide a url pattern -->
    <url-pattern>/gfg.com/*</url-pattern>
</servlet-mapping>

Enfoque: basado en código con WebApplicationInitializer

A continuación se muestra la lógica de registro de DispatcherServlet equivalente, estilo WebApplicationInitializer:

public class CalculatorApplicationInitializer
    implements WebApplicationInitializer {

    // Method
    public void onStartup(ServletContext servletContext)
        throws ServletException
    {

        // Creating objects of XmlWebApplicationContext
        // class
        XmlWebApplicationContext webApplicationContext
            = new XmlWebApplicationContext();
        webApplicationContext.setConfigLocation(
            "classpath:application-config.xml");

        // Creating a dispatcher servlet object
        DispatcherServlet dispatcherServlet
            = new DispatcherServlet(webApplicationContext);

        // Registering Dispatcher Servlet with Servlet
        // Context
        ServletRegistration
            .Dynamic myCustomDispatcherServlet
            = servletContext.addServlet(
                "myDispatcherServlet", dispatcherServlet);

        // Setting load on startup
        myCustomDispatcherServlet.setLoadOnStartup(1);

        // Adding mapping url
        myCustomDispatcherServlet.addMapping("/gfg.com/*");
    }
}

Entonces, ahora desarrollemos un proyecto completo de muestra y veamos cómo WebApplicationInitializer nos ayuda a construir una aplicación web Spring usando una configuración basada en Java.

Implementación: Proyecto que demuestra Spring WebApplicationInitializer

Paso 1: configurar el proyecto

Nota: Vamos a utilizar Spring Tool Suite 4 IDE para este proyecto. Consulte este artículo para instalar STS en su máquina local ¿Cómo descargar e instalar Spring Tool Suite (Spring Tools 4 para Eclipse) IDE? 

Vaya a su STS IDE, luego cree un nuevo proyecto maven, Archivo> Nuevo> Proyecto Maven, y elija el siguiente arquetipo como se muestra en la imagen a continuación:  

 

Paso 2: agregar algunas dependencias de Maven

Agregue las siguientes dependencias y complementos de Maven al archivo  pom.xml .

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.18</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- plugin -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

A continuación se muestra el código completo para el archivo pom.xml después de agregar estas dependencias.

Archivo: pom.xml 

XML

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.geeksforgeeks.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.geeksforgeeks</groupId>
    <artifactId>spring-calculator</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-calculator Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.18</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>spring-calculator</finalName>
        <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
    </build>
</project>

Paso 3: enfoque basado en código con WebApplicationInitializer

Antes de pasar a la parte de codificación, echemos un vistazo a la estructura del archivo en la imagen de abajo.

 

Entonces, primero cree una carpeta src/main/java y dentro de esta carpeta cree una clase llamada CalculatorApplicationInitializer y colóquela dentro del paquete com.geeksforgeeks.calculator.config e implemente la interfaz WebApplicationInitializer . Consulte la imagen de abajo.

 

Ahora en esta clase, tenemos que realizar las siguientes 2 operaciones principales que se enumeran a continuación de la siguiente manera: 

  1. Crear un objeto de servlet de despachador
  2. Registrar el servlet del despachador con el contexto del servlet

Y podemos hacerlo escribiendo estas líneas de código

Operación 1: crear un objeto de servlet de despachador:

XmlWebApplicationContext webApplicationContext = new XmlWebApplicationContext();

// Create a dispatcher servlet object
DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext);

Operación 2: registrar el servlet de despachador con contexto de servlet

ServletRegistration.Dynamic myCustomDispatcherServlet = servletContext.addServlet("myDispatcherServlet",
                dispatcherServlet);
  • Vaya a src/main/resources y cree un archivo XML. 
  • Nombre el archivo como application-config y pegue el siguiente código dentro de este archivo.

Archivo: application-config.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.geeksforgeeks.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
         
</beans>

Y debajo está el código completo para el archivo CalculatorApplicationInitializer.java . Esta es la clase en la que hemos seguido el enfoque basado en código con WebApplicationInitializer.

Archivo: CalculatorApplicationInitializer.java

Java

// Java Program to Demonstrate Calculator Application
// Initializer Class
 
package com.geeksforgeeks.calculator.config;
 
// Importing required classes
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
 
// Class
// Implementing WebApplicationInitializer interface
public class CalculatorApplicationInitializer
    implements WebApplicationInitializer {
 
    // Method
    public void onStartup(ServletContext servletContext)
        throws ServletException
    {
 
        XmlWebApplicationContext webApplicationContext
            = new XmlWebApplicationContext();
        webApplicationContext.setConfigLocation(
            "classpath:application-config.xml");
 
        // Creating a dispatcher servlet object
        DispatcherServlet dispatcherServlet
            = new DispatcherServlet(webApplicationContext);
 
        // Registering Dispatcher Servlet with Servlet
        // Context
        ServletRegistration
            .Dynamic myCustomDispatcherServlet
            = servletContext.addServlet(
                "myDispatcherServlet", dispatcherServlet);
 
        // Setting load on startup
        myCustomDispatcherServlet.setLoadOnStartup(1);
 
        // Adding mapping url (Custom URL)
        myCustomDispatcherServlet.addMapping("/gfg.com/*");
    }
}

Paso 4: Crear controlador y probar la aplicación

Vaya a la carpeta src/main/java y dentro de esta carpeta cree una clase llamada GfgController y colóquela dentro del paquete / com.geeksforgeeks.calculator.controllers .

Archivo: GfgController.java

Java

// Java Program to Illustrate GfgController Class
 
package com.geeksforgeeks.calculator.controllers;
 
// Importing required classes
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
// Class
@Controller
public class GfgController {
 
    @RequestMapping("/welcome")
    @ResponseBody
 
    // Testor Method
    public String helloGfg()
    {
        return "Welcome to GeeksforGeeks!";
    }
}

Antes de ejecutar la aplicación, agregue las siguientes líneas al archivo  application-config.xml .

<context:component-scan base-package="com.geeksforgeeks.calculator.controllers"></context:component-scan>

Archivo: aplicación-config.xml actualizado

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.geeksforgeeks.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
   
  <context:component-scan base-package="com.geeksforgeeks.calculator.controllers"></context:component-scan>
         
</beans>

Paso 5: Ejecute la aplicación

Por último, ejecute su aplicación Spring MVC y presione la siguiente URL

http://localhost:8080/spring-calculator/gfg.com/welcome

 

Publicación traducida automáticamente

Artículo escrito por AmiyaRanjanRout y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *