Spring: cambie el nombre del archivo de configuración del contexto DispatcherServlet

DispatcherServlet actúa como controlador frontal para aplicaciones web basadas en Spring. Entonces, ¿qué es Front Controller? Así que es bastante simple. Cualquier solicitud llegará a nuestro sitio web, el controlador frontal se parará al frente y aceptará todas las requests y una vez que el controlador frontal acepte esa solicitud, este es el trabajo del controlador frontal que tomará una decisión que quién es el controlador correcto para manejar esa solicitud. Por ejemplo, consulte la imagen de abajo. Supongamos que tenemos un sitio web llamado student.com y el cliente realiza una solicitud para guardar los datos de los estudiantes presionando la siguiente URL » student.com/save»y primero llega al controlador frontal y una vez que el controlador frontal acepta esa solicitud, se asignará al Controlador_1 ya que este controlador maneja la solicitud para la operación /guardar. Luego va a devolver la respuesta al Cliente. 

En este artículo ¿Qué es Dispatcher Servlet en Spring? hemos visto que tenemos que crear un archivo de configuración de contexto de DispatcherServlet dentro de src > main > webapp > WEB-INF . Y el nombre del archivo debe estar en este formato.

YourServletName-servlet.xml  

Pero que pasa si cambiamos el nombre de este formato a otro. ¿Podemos cambiar el nombre del archivo de configuración del contexto DispatcherServlet? Así que vamos a ver con un ejemplo. 

Implementación: Proyecto

Configuración del 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? 

  • Paso 1: cree un proyecto web dinámico en su STS IDE. Puede consultar este artículo para crear un proyecto web dinámico en STS: ¿Cómo crear un proyecto web dinámico en Spring Tool Suite?
  • Paso 2: descargue el archivo Spring JAR desde este enlace y vaya a la carpeta src> main> webapp> WEB-INF> lib y pase estos archivos JAR.
  • Paso 3: Consulte este artículo Configuración del servidor Apache Tomcat y configure el servidor Tomcat con su aplicación. Ahora estamos listos para ir.

Configuración del servlet de despachador

Paso 4: Ahora ve al archivo src > main > webapp > WEB-INF > web.xml y aquí tenemos que configurar nuestro controlador frontal dentro de una etiqueta <servlet>…</servlet> algo como esto. 

<servlet>

      <!-- Provide a Servlet Name -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    
    <!-- Provide a fully qualified path to the DispatcherServlet class -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    

</servlet>

Ahora digámosle a este servlet, hey servlet, tienes que manejar todas las requests que llegan a nuestro sitio web llamado student.com (para este ejemplo). Entonces, la forma en que le diremos al servlet anterior es que podemos escribir algo como esto

<servlet-mapping>

      <!-- Provide a Servlet Name that you want to map -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    
    <!-- Provide a url pattern -->
    <url-pattern>/student.com/*</url-pattern>
    
</servlet-mapping>

Entonces, esto significa que el servlet «frontcontroller-dispatcher» manejará todas las requests a partir de student.com/anything, que puede ser student.com/save o student.com/get, cualquier cosa. Pero debe comenzar con student.com. Así que hemos terminado con la creación de un Dispatcher Servlet. 

Archivo: web.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
   
  <display-name>myfirst-mvc-project</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
   
  <absolute-ordering/>
   
  <servlet>
      <!-- Provide a Servlet Name -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    <!-- Provide a fully qualified path to the DispatcherServlet class -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
   
  <servlet-mapping>
      <!-- Provide a Servlet Name that you want to map -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    <!-- Provide a url pattern -->
    <url-pattern>/student.com/*</url-pattern>
  </servlet-mapping>
   
</web-app>

Ahora, ejecutemos nuestra aplicación. Para ejecutar su aplicación Spring MVC , haga clic con el botón derecho en su proyecto> Ejecutar como> Ejecutar en el servidor y ejecute su aplicación como se muestra en la imagen a continuación. 

Y en este escenario, obtendrá la siguiente excepción

IOException parsing XML document from ServletContext resource [/WEB-INF/frontcontroller-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/frontcontroller-dispatcher-servlet.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:224)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:195)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)

Entonces, desde la primera línea, puede ver que es una java.io.FileNotFoundException , lo que significa que Spring está buscando este archivo específico frontcontroller-dispatcher-servlet.xml dentro del directorio WEB-INF . Así que ahora vamos a crear este archivo. 

Paso 5: Ahora ve a   src > main > webapp > WEB-INF  y crea un archivo XML. En realidad, este es un archivo de configuración de Spring como el archivo beans.xml. Y el nombre del archivo debe estar en este formato.

YourServletName-servlet.xml  

Por ejemplo, para este proyecto, el nombre del archivo debe ser 

frontcontroller-dispatcher-servlet.xml

Entonces, puede crear un archivo de configuración de Spring o simplemente puede crear un archivo XML simple y agregar las siguientes líneas de código dentro de ese archivo. 

Archivo: frontcontroller-despachador-servlet.xml

XML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.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>

La estructura del archivo del proyecto aparecerá de la siguiente manera: 

project structure

Paso 6: Ahora ejecute nuevamente su aplicación. Ahora en la consola, puede ver que nuestro DispatcherServlet se ha inicializado con éxito y también se completó la inicialización sin excepciones ni errores. 

Pero, ¿podemos proporcionar otro nombre? Sí, puede, pero debe escribir las siguientes líneas de código si está cambiando el nombre del archivo de configuración de contexto de DispatcherServlet. Supongamos que hemos cambiado el nombre de frontcontroller-dispatcher-servlet.xml a dispatcher-servlet.xml , entonces tenemos que escribir algo como esto 

<init-param>
     <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>

Explicación de salida:

<init-param> es un parámetro estático que se almacena en el archivo web.xml. Si tiene algún dato que no cambia con frecuencia, puede almacenarlo en uno de ellos. Si desea almacenar datos particulares que se limitan a un ámbito de servlet particular, entonces puede usar <init-param>. Todo lo que declare dentro de <init-param> solo es accesible para ese servlet en particular. El init-param se declara dentro de la etiqueta <servlet>. 

Por ejemplo, para este proyecto, podemos escribir algo como lo siguiente: 

<servlet>
      <!-- Provide a Servlet Name -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    <!-- Provide a fully qualified path to the DispatcherServlet class -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
  </servlet>

Archivo: web.xml 

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
   
  <display-name>myfirst-mvc-project</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
   
  <absolute-ordering/>
   
  <servlet>
      <!-- Provide a Servlet Name -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    <!-- Provide a fully qualified path to the DispatcherServlet class -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
  </servlet>
   
  <servlet-mapping>
      <!-- Provide a Servlet Name that you want to map -->
    <servlet-name>frontcontroller-dispatcher</servlet-name>
    <!-- Provide a url pattern -->
    <url-pattern>/student.com/*</url-pattern>
  </servlet-mapping>
   
</web-app>

La estructura del archivo del proyecto modificado se muestra a continuación. 
 

Paso 7: Ahora vuelve a ejecutar tu aplicación. Ahora en la consola, puede ver que nuestro DispatcherServlet se ha inicializado con éxito y también se completó la inicialización sin excepciones ni errores. 

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 *