Primavera - MVC Framework

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 Model encapsula los datos de la aplicación y, en general, estarán compuestos por POJO.

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

  • los Controller 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 alrededor de 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:

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 a HandlerMapping para llamar al controlador apropiado .

  • El 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 devolverá el nombre de la vista al DispatcherServlet .

  • El DispatcherServlet tendrá la ayuda de ViewResolver a la recolección de la vista definida para la solicitud.

  • Una vez finalizada la vista, el 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 partes de WebApplicationContext w, que es una extensión del ApplicationContext simple con algunas características adicionales necesarias para las aplicaciones web.

Configuración requerida

Necesita mapear las solicitudes que quiere que el DispatcherServlet maneje, usando un mapeo de URL en elweb.xmlarchivo. El siguiente es un ejemplo para mostrar declaración y mapeo paraHelloWeb Ejemplo de DispatcherServlet -

<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.xmlEl archivo se guardará en el directorio WebContent / WEB-INF de su aplicación web. Tras la inicialización deHelloWeb DispatcherServlet, el marco intentará cargar el contexto de la aplicación desde un archivo llamado [servlet-name]-servlet.xmlubicado en el WebContent / WEB-INFdirectory de la aplicación. En este caso, nuestro archivo seráHelloWebservlet.xml.

A continuación, la etiqueta <servlet-mapping> indica qué URL gestionará qué DispatcherServlet. Aquí todas las solicitudes HTTP que terminan en.jsp será manejado por el HelloWeb DispatcherServlet.

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

<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.xmlarchivo, ubicado en el directorio WebContent / WEB-INF de su aplicación web -

<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 -

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

  • La etiqueta <context: component-scan ...> se usará para activar la capacidad de escaneo de anotaciones Spring MVC que permite hacer uso de anotaciones como @Controller y @RequestMapping, etc.

  • El InternalResourceViewResolver tendrá reglas definidas para resolver los nombres de vista. Según la regla definida anteriormente, una vista lógica denominadahellose 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@ControllerLa 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 @ControllerLa anotación define la clase como un controlador Spring MVC. Aquí, el primer uso de@RequestMapping indica que todos los métodos de manejo en este controlador son relativos al /hellocamino. Siguiente anotación@RequestMapping(method = RequestMethod.GET)se utiliza para declarar el método printHello () 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 otra forma 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 value El atributo indica la URL a la que se asigna el método del controlador y el methodEl 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 viewque 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 hello ver en /WEB-INF/hello/hello.jsp -

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

aquí ${message}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

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

No Señor. Ejemplo y descripción
1 Ejemplo de Spring MVC Hello World

Este ejemplo explicará cómo escribir una aplicación Spring Web Hello World simple.

2 Ejemplo de manejo de formularios Spring MVC

Este ejemplo explicará cómo escribir una aplicación Spring Web utilizando formularios HTML para enviar los datos al controlador y mostrar un resultado procesado.

3 Ejemplo de redirección de página de Spring

Aprenda a usar la funcionalidad de redireccionamiento de páginas en Spring MVC Framework.

4 Ejemplo de páginas estáticas de Spring

Aprenda a acceder a páginas estáticas junto con páginas dinámicas en Spring MVC Framework.

5 Ejemplo de manejo de excepciones de Spring

Aprenda a manejar excepciones en Spring MVC Framework.