Preparación para la certificación profesional de primavera. Preguntas sobre Spring MVC

Un saludo a todos.


Este es el quinto artículo de una serie de artículos de capacitación con certificación Spring Professional.


Tabla de contenidos
  1. Inyección de dependencia, contenedor, IoC, frijoles
  2. AOP (programación orientada a aspectos)
  3. JDBC, Transacciones, JPA, Spring Data
  4. Bota de primavera
  5. Mvc de primavera
  6. Seguridad de primavera
  7. DESCANSO
  8. Prueba

Permítame recordarle que estos artículos son respuestas a preguntas de la guía oficial de Pivotal en preparación para la certificación.





MVC es una abreviatura de un patrón especial. ¿Qué es este patrón y para qué sirve?

MVC es una plantilla especial. Divide el programa en 3 tipos de componentes:


  • Modelo: el modelo es responsable del almacenamiento de datos.
  • Ver: es responsable de la salida de datos en la interfaz.
  • Controlador: es responsable del intercambio de datos con la vista. Él opera con modelos.


¿Qué es un DispatcherServlet y dónde se usa?

Esta es una de las partes principales de MVC para el intercambio de datos. Este es el servlet principal que distribuye solicitudes entre servlets regulares.


  • Recibe solicitudes y las envía a controladores registrados.
  • Maneja las vistas haciendo coincidir sus nombres con los objetos ViewResolver
  • Maneja excepciones lanzadas


¿Cuál es el ciclo de vida de una solicitud?
  1. La solicitud viene en DispatcherServlet
  2. DispatcherServlet envía una solicitud a uno de los controladores en función de la URL de la solicitud
  3. El controlador procesa la solicitud, delega la ejecución de la lógica empresarial a la capa empresarial (por lo general, son clases con anotación @Service ) y crea un modelo con datos, que envía de vuelta a DispatcherServlet
  4. DispatcherServlet envía el modelo al frente para la vista, basado en la interfaz ViewResolver (más sobre esto a continuación)

¿Cómo se realiza la creación de DispatcherServlet?

DS se crea antes de crear el ApplicationContext.
A partir de Spring 3.2, se utiliza una implementación de la interfaz WebApplicationInitializer llamada AbstractAnnotationConfigDispatcherServletInitialize.


AbstractAnnotationConfigDispatcherServletInitializer crea DispatcherServlet y ContextLoaderListener.


Hay dos formas de configurar DS:


  • Al definir propiedades especiales en web.xml
  • Anular AbstractAnnotationConfigDispatcherServletInitializer

¿Qué es un WebApplicationContext? ¿Qué alcances adicionales trae?

Este es un contexto especial para una aplicación web.
Tiene todas las características de un ApplicationConext normal (porque hereda de él), pero también tiene métodos para la API de Servlet estándar.


Nota: el alcance es el alcance.


AlcanceDescripción
RequestAlcance: 1 solicitud HTTP. Se crea un nuevo bean para cada solicitud.
SessionAlcance - 1 sesión. Se crea un nuevo bean para cada sesión.
ApplicationAlcance - Ciclo de vida de ServletContext
WebSocketAlcance - Ciclo de vida de WebSocket

¿Por qué usar el alcance de la sesión?

El bean de ámbito de sesión es un bean que existe mientras existe la sesión. Se puede usar al crear una cesta en una tienda en línea, etc.


¿Cuál es el alcance predeterminado en MVC?

Al igual que en primavera sin MVC - singleton.


¿Por qué usar la anotación @Controller?

La anotación del controlador se utiliza para registrar manejadores de solicitudes http. Esta es una anotación de nivel de clase que contiene una anotación de Componente . La clase de controlador se parece a un POJO normal, con métodos de manejo y anotaciones.


¿Cómo se asignan las solicitudes entrantes a los métodos de controlador?
  1. DispatcherServlet recibe una solicitud
  2. DS contiene una lista de clases que implementan la interfaz HandlerMapping
  3. El controlador encuentra el método allí y le envía una solicitud en la clase de controlador
  4. El método del controlador ejecuta la solicitud

Cuéntanos sobre la anotación @RequestMapping

Esta anotación se utiliza principalmente para especificar un URI para una clase de controlador. Anteriormente, los métodos de clase lo utilizaban para indicar el URI, el método http, el tipo de datos enviados, etc. En las versiones más recientes de Spring, se reemplazó con anotaciones @GetMapping, @PostMapping, etc. Ahora se usa solo para indicar el URI a la clase de controlador.


¿Qué son las anotaciones @GetMapping, @PostMapping, @DeleteMapping y otras?

Estas son anotaciones más estrechas para mapear métodos http.


  • @GetMapping : maneja las solicitudes de obtención
  • @PostMapping : maneja las solicitudes de publicación
  • @DeleteMapping : maneja las solicitudes de eliminación
  • @PutMapping : maneja solicitudes de @PutMapping
  • @PatchMapping - Maneja solicitudes de parches

Todo lo escrito a continuación también es característico de otras anotaciones.


Anotación @GetMapping es simplemente una anotación que contiene @RequestMapping (method = RequestMethod.GET) .
También le permite ajustar el método del controlador.
Sus parámetros (se convierten en parámetros @RequestMapping similares):


  • path - URI
  • headers - encabezados
  • name : nombre del controlador
  • params - parámetros
  • produces - tipo de datos devueltos (JSON, XML, texto). Utilizado en REST
  • consumes - tipo de datos recibidos. Utilizado en REST


    Por defecto, la anotación toma la ruta al método.
    @GetMapping("managers") = @GetMapping(path = "managers")



¿Por qué usar la anotación @RequestParam?

Esta anotación se utiliza para que los métodos de controlador puedan obtener parámetros de una solicitud http.


Una solicitud con parámetros: http://localhost:8080/getByName/name=Ivan .
El siguiente código colocará la cadena Ivan en el name la variable.


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

¿Por qué usar la anotación @PathVariable?

Esta anotación obtiene una parte específica del URI.


URI: http://localhost:8080/getById/23


El siguiente código colocará 23 en la variable id .


 @GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) { //some logic } 

¿Qué parámetros pueden aceptar los métodos de manejo?

Los métodos en la clase de controlador pueden usar algunos tipos de objetos como argumentos aceptados. Entonces Spring los implementará automáticamente. Por ejemplo, el objeto HttpSession deseado, Seguridad, etc.


 @GetMapping public User getUserById(HttpSession session) { //some logic //      } 

Qué objetos se pueden usar (inglés)


¿Qué otras anotaciones hay para usar junto a los parámetros del método?
  • @MatrixVariable : indica que el parámetro debe asociarse con un par nombre-valor del URI.
  • @RequestHeader : indica que el parámetro debe estar asociado con el encabezado de la solicitud web.
  • @CookieValue : indica que el parámetro debe estar asociado con las cookies.
    El parámetro se puede declarar como un tipo de cookie o como un tipo de valor de cookie (String, int, etc.).
  • @ModelAttribute : indica que el parámetro está asociado con un atributo de modelo con nombre disponible para ver.
  • @SessionAtribute : indica que el parámetro está asociado con un atributo de la sesión.

¿Qué es la anotación @RequestBody?

Se utiliza para indicar que el método funciona no con modelos, sino con datos. Es decir, envía JSON, XML, texto, etc. Por lo general, se usa implícitamente en los servicios REST.


¿Qué puede devolver un método de controlador?
Tipos de objetos devueltos y su descripción (inglés)

¿Qué es una vista?

Ver se utiliza para mostrar los datos de la aplicación al usuario.
Spring MVC admite varios proveedores de View (se denominan motores de plantilla): JSP, JSF, Thymeleaf, etc.
La interfaz Ver transforma objetos en servlets regulares.


¿Cómo se selecciona Vista en la fase de renderizado? ¿Cómo se muestra la vista?

DispatcherServlet contiene una lista de "mapeadores" especiales para ver, que, según la configuración del servlet, contendrá contenedores que implementarán la interfaz ViewResolver .


Ver proceso de visualización:


  1. El controlador devuelve la vista de nombre en DispactherServlet
  2. ViewResolver nombres a nombres en ViewResolver
  3. Si se encuentra un ViewResolver adecuado, devuelve la Vista que se debe usar al renderizar.
  4. DS pasa el modelo con los datos en la Vista y muestra el resultado (página html)

¿Qué es un modelo?

Este es un objeto de clase que implementa la interfaz Modelo y representa una colección de pares clave-valor.
El contenido del modelo se utiliza para mostrar datos en la Vista.
Por ejemplo, si Ver muestra información sobre el objeto Customer , puede referirse a las claves del modelo, por ejemplo customerName , customerPhone , y obtener valores para estas claves.
Los objetos de valor del modelo también pueden contener lógica empresarial.

Source: https://habr.com/ru/post/470566/


All Articles