Saltar al contenido

Primavera – MVC Framework

octubre 15, 2021
spring dispatcherservlet

El marco Spring Web MVC proporciona una arquitectura Modelo-Vista-Controlador (MVC) y componentes listos que se pueden usar para desarrollar aplicaciones web flexibles y poco acopladas. El patrón MVC da como resultado la separación de los diferentes aspectos de la aplicación (lógica de entrada, lógica empresarial y lógica de la interfaz de usuario), al tiempo que proporciona un acoplamiento flexible entre estos elementos.

  • los Modelo encapsula los datos de la aplicación y, en general, estarán compuestos por POJO.

  • los Vista es responsable de renderizar los datos del modelo y, en general, genera una salida HTML que el navegador del cliente puede interpretar.

  • los Controlador es responsable de procesar las solicitudes de los usuarios y construir un modelo apropiado y lo pasa a la vista para su renderizado.

El DispatcherServlet

El marco de Spring Web model-view-controller (MVC) está diseñado en torno a un DispatcherServlet que maneja todas las solicitudes y respuestas HTTP. El flujo de trabajo de procesamiento de solicitudes de Spring Web MVC DispatcherServlet se ilustra en el siguiente diagrama:

Spring DispatcherServlet

A continuación se muestra la secuencia de eventos correspondientes a una solicitud HTTP entrante a DispatcherServlet

  • Después de recibir una solicitud HTTP, DispatcherServlet consulta al HandlerMapping para llamar al apropiado Controlador.

  • los Controlador toma la solicitud y llama a los métodos de servicio apropiados según el método GET o POST utilizado. El método de servicio establecerá los datos del modelo en función de la lógica empresarial definida y devuelve el nombre de la vista al DispatcherServlet.

  • los DispatcherServlet tomará la ayuda de ViewResolver para recoger la vista definida para la solicitud.

  • Una vez finalizada la vista, DispatcherServlet pasa los datos del modelo a la vista que finalmente se representa en el navegador.

Todos los componentes mencionados anteriormente, es decir, HandlerMapping, Controller y ViewResolver son parte de WebApplicationContext w que es una extensión de la llanuraApplicationContext con algunas funciones adicionales necesarias para las aplicaciones web.

Configuración requerida

Necesita mapear las solicitudes que desea DispatcherServlet para manejar, mediante el uso de una asignación de URL en el web.xml expediente. El siguiente es un ejemplo para mostrar la declaración y el mapeo para HolaWeb DispatcherServlet ejemplo –

<web-app id = "WebApp_ID" version = "2.4"
   xmlns = "http://java.sun.com/xml/ns/j2ee" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
   <display-name>Spring MVC Application</display-name>
   
   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
   </servlet-mapping>

</web-app>

los web.xml El archivo se guardará en el directorio WebContent / WEB-INF de su aplicación web. Tras la inicialización de HolaWeb DispatcherServlet, el marco intentará cargar el contexto de la aplicación desde un archivo llamado [servlet-name]-servlet.xml ubicado en el WebContent / WEB-INFdirectory de la aplicación. En este caso, nuestro archivo será HelloWebservlet.xml.

A continuación, la etiqueta indica qué URL manejará qué DispatcherServlet. Aquí todas las solicitudes HTTP que terminan en .jsp será manejado por el HolaWeb DispatcherServlet.

Si no desea utilizar el nombre de archivo predeterminado como [servlet-name]-servlet.xml y ubicación predeterminada como WebContent / WEB-INF, puede personalizar este nombre y ubicación de archivo agregando el escucha de servlet ContextLoaderListener en su archivo web.xml de la siguiente manera:

<web-app...>

   <!-------- DispatcherServlet definition goes here----->
   ....
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
   </context-param>

   <listener>
      <listener-class>
         org.springframework.web.context.ContextLoaderListener
      </listener-class>
   </listener>
   
</web-app>

Ahora, verifiquemos la configuración requerida para HelloWeb-servlet.xml archivo, colocado en su aplicación web WebContent / WEB-INF directorio –

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.tutorialspoint" />

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>

</beans>

A continuación se presentan los puntos importantes sobre HelloWeb-servlet.xml archivo –

  • los [servlet-name]-servlet.xml El archivo se utilizará para crear los beans definidos, anulando las definiciones de los beans definidos con el mismo nombre en el ámbito global.

  • los La etiqueta se usará para activar la capacidad de escaneo de anotaciones Spring MVC que permite hacer uso de anotaciones como @Controller y @RequestMapping, etc.

  • los InternalResourceViewResolver tendrá reglas definidas para resolver los nombres de las vistas. Según la regla definida anteriormente, una vista lógica denominada Hola se delega en una implementación de vista ubicada en /WEB-INF/jsp/hello.jsp .

La siguiente sección le mostrará cómo crear sus componentes reales, es decir, controlador, modelo y vista.

Definición de un controlador

DispatcherServlet delega la solicitud a los controladores para ejecutar la funcionalidad específica para él. los @ControladorLa anotación indica que una clase en particular cumple la función de controlador. los @RequestMapping La anotación se usa para asignar una URL a una clase completa o un método de manejo en particular.

@Controller
@RequestMapping("/hello")
public class HelloController { 
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}

los @Controlador La anotación define la clase como un controlador Spring MVC. Aquí, el primer uso de @RequestMapping indica que todos los métodos de manipulación en este controlador son relativos a la /Hola sendero. Siguiente anotación@RequestMapping (método = RequestMethod.GET) se utiliza para declarar el métodoprintHello () como el método de servicio predeterminado del controlador para manejar la solicitud HTTP GET. Puede definir otro método para manejar cualquier solicitud POST en la misma URL.

Puede escribir el controlador anterior en otro formulario donde puede agregar atributos adicionales en @RequestMapping de la siguiente manera:

@Controller
public class HelloController {
   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}

los valor El atributo indica la URL a la que se asigna el método del controlador y el método El atributo define el método de servicio para manejar la solicitud HTTP GET. Se deben tener en cuenta los siguientes puntos importantes sobre el controlador definido anteriormente:

  • Definirá la lógica empresarial requerida dentro de un método de servicio. Puede llamar a otro método dentro de este método según el requisito.

  • Según la lógica empresarial definida, creará un modelo dentro de este método. Puede utilizar diferentes atributos del modelo del setter y la vista accederá a estos atributos para presentar el resultado final. Este ejemplo crea un modelo con su atributo «mensaje».

  • Un método de servicio definido puede devolver una cadena, que contiene el nombre del vista que se utilizará para renderizar el modelo. Este ejemplo devuelve «hola» como nombre de vista lógica.

Creación de vistas JSP

Spring MVC admite muchos tipos de vistas para diferentes tecnologías de presentación. Estos incluyen: JSP, HTML, PDF, hojas de trabajo de Excel, XML, plantillas de velocidad, XSLT, JSON, fuentes Atom y RSS, JasperReports, etc. Pero lo más común es que usamos plantillas JSP escritas con JSTL.

Escribamos un sencillo Hola ver en /WEB-INF/hello/hello.jsp –

<html>
   <head>
      <title>Hello Spring MVC</title>
   </head>
   
   <body>
      <h2>${message}</h2>
   </body>
</html>

Aquí $ {mensaje} es el atributo que hemos configurado dentro del Controlador. Puede tener varios atributos para que se muestren dentro de su vista.

Ejemplos de Spring Web MVC Framework

Basándonos en los conceptos anteriores, veamos algunos ejemplos importantes que lo ayudarán a construir sus aplicaciones web Spring:

close