Préparation à la certification professionnelle du printemps. Questions sur Spring MVC

Salutations à tous.


Il s'agit du 5e article d'une série d'articles de formation avec la certification Spring Professional.


Table des matières
  1. Injection de dépendance, conteneur, IoC, haricots
  2. AOP (programmation orientée aspect)
  3. JDBC, transactions, JPA, données de printemps
  4. Botte de printemps
  5. Spring mvc
  6. Sécurité printanière
  7. REPOS
  8. Test

Permettez-moi de vous rappeler que ces articles sont des réponses aux questions du guide officiel de Pivotal en préparation à la certification.





MVC est l'abréviation d'un modèle spécial. Quel est ce schéma et à quoi sert-il?

MVC est un modèle spécial. Il divise le programme en 3 types de composants:


  • Modèle - le modèle est responsable du stockage des données.
  • Vue - est responsable de la sortie des données sur le frontend.
  • Contrôleur - est responsable de l'échange de données avec vue. Il fonctionne avec des modèles.


Qu'est-ce qu'un DispatcherServlet et où est-il utilisé?

C'est l'une des principales parties de MVC pour l'échange de données. Il s'agit du servlet principal qui répartit les demandes entre les servlets ordinaires.


  • Il reçoit les demandes et les envoie aux gestionnaires enregistrés.
  • Gère les vues en faisant correspondre leurs noms avec les objets ViewResolver
  • Gère les exceptions levées


Quel est le cycle de vie d'une demande?
  1. La demande vient dans DispatcherServlet
  2. DispatcherServlet envoie une demande à l'un des contrôleurs en fonction de l'URL de la demande
  3. Le contrôleur traite la demande, délègue l'exécution de la logique métier à la couche métier (il s'agit généralement de classes avec l'annotation @Service ) et crée un modèle avec des données qu'il renvoie à DispatcherServlet
  4. DispatcherServlet envoie le modèle à l'avant pour la vue, basé sur l'interface ViewResolver (plus de détails ci-dessous)

Comment se déroule la création de DispatcherServlet?

DS est créé avant de créer ApplicationContext.
À partir de Spring 3.2, une implémentation de l'interface WebApplicationInitializer appelée AbstractAnnotationConfigDispatcherServletInitialize est utilisée.


AbstractAnnotationConfigDispatcherServletInitializer crée à la fois DispatcherServlet et ContextLoaderListener.


Il existe deux façons de configurer DS:


  • En définissant des propriétés spéciales dans web.xml
  • Remplacement de AbstractAnnotationConfigDispatcherServletInitializer

Qu'est-ce qu'un WebApplicationContext? Quelles portées supplémentaires apporte-t-il?

Il s'agit d'un contexte spécial pour une application Web.
Il possède toutes les fonctionnalités d'un ApplicationConext standard (car il en hérite), mais il a également des méthodes pour l'API Servlet standard.


Remarque: la portée est la portée.


PortéeLa description
RequestPortée - 1 requête HTTP. Un nouveau bean est créé pour chaque requête.
SessionPortée - 1 session. Un nouveau bean est créé pour chaque session.
ApplicationPortée - Cycle de vie ServletContext
WebSocketPortée - Cycle de vie WebSocket

Pourquoi utiliser la portée de la session?

Le bean à portée de session est un bean qui existe tant que la session existe. Il peut être utilisé lors de la création d'un panier dans une boutique en ligne, etc.


Quelle est la portée par défaut dans MVC?

Tout comme au printemps sans MVC - singleton.


Pourquoi utiliser l'annotation @Controller?

L'annotation Controller est utilisée pour enregistrer les gestionnaires de requêtes http. Il s'agit d'une annotation de niveau classe qui contient une annotation de composant . La classe de contrôleur ressemble à un POJO normal, avec des méthodes de gestionnaire et des annotations.


Comment les requêtes entrantes sont-elles mappées aux méthodes de gestionnaire?
  1. DispatcherServlet reçoit une demande
  2. DS contient une liste de classes qui implémentent l'interface HandlerMapping
  3. Le gestionnaire y trouve la méthode et lui envoie une demande dans la classe de contrôleur
  4. La méthode du gestionnaire exécute la demande

Parlez-nous de l'annotation @RequestMapping

Cette annotation est principalement utilisée pour spécifier un URI pour une classe de contrôleur. Auparavant, il était utilisé par les méthodes de classe pour indiquer l'URI, la méthode http, le type de données envoyées, etc. Dans les versions plus récentes de Spring, il a été remplacé par des annotations @GetMapping, @PostMapping, etc. Maintenant, il est utilisé uniquement pour indiquer l'URI à la classe de contrôleur.


Que sont les annotations @GetMapping, @PostMapping, @DeleteMapping et autres?

Ce sont des annotations plus étroites pour le mappage des méthodes http.


  • @GetMapping - Gère les requêtes
  • @PostMapping - Gère les demandes de publication
  • @DeleteMapping - Gère les demandes de suppression
  • @PutMapping - Gère les demandes de mise
  • @PatchMapping - Gère les demandes de correctifs

Tout ce qui est écrit ci-dessous est également caractéristique d'autres annotations.


Annotation @GetMapping est simplement une annotation qui contient @RequestMapping (méthode = RequestMethod.GET) .
Il vous permet également d'affiner la méthode du gestionnaire.
Ses paramètres (ils sont convertis en paramètres @RequestMapping similaires):


  • path - URI
  • headers -têtes - en-têtes
  • name - nom du gestionnaire
  • params - paramètres
  • produces - type de données retournées (JSON, XML, texte). Utilisé dans REST
  • consumes - type de données reçues. Utilisé dans REST


    Par défaut, l'annotation prend le chemin de la méthode.
    @GetMapping("managers") = @GetMapping(path = "managers")



Pourquoi utiliser l'annotation @RequestParam?

Cette annotation est utilisée pour que les méthodes de gestionnaire puissent obtenir des paramètres à partir d'une requête http.


Une demande avec des paramètres: http://localhost:8080/getByName/name=Ivan .
Le code suivant mettra la chaîne Ivan dans le name la variable.


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

Pourquoi utiliser l'annotation @PathVariable?

Cette annotation obtient une partie spécifique de l'URI.


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


Le code suivant mettra 23 dans la variable id .


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

Quels paramètres les méthodes de gestion peuvent-elles accepter?

Les méthodes de la classe contrôleur peuvent utiliser certains types d'objets comme arguments acceptés. Ensuite, Spring les implémentera automatiquement. Par exemple, l'objet HttpSession souhaité, la sécurité, etc.


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

Quels objets peuvent être utilisés (anglais)


Quelles sont les autres annotations à utiliser à côté des paramètres de méthode?
  • @MatrixVariable - Indique que le paramètre doit être associé à une paire nom-valeur de l'URI.
  • @RequestHeader - Indique que le paramètre doit être associé à l'en-tête de la demande Web.
  • @CookieValue - Indique que le paramètre doit être associé aux cookies.
    Le paramètre peut être déclaré comme un type de cookie ou comme un type de valeur de cookie (String, int, etc.).
  • @ModelAttribute - Indique que le paramètre est associé à un attribut de modèle nommé disponible pour la vue.
  • @SessionAtribute - Indique que le paramètre est associé à un attribut de la session.

Qu'est-ce que l'annotation @RequestBody?

Il est utilisé pour indiquer que la méthode ne fonctionne pas avec des modèles, mais avec des données. Autrement dit, il envoie JSON, XML, texte, etc. Habituellement, il est implicitement utilisé dans les services REST.


Que peut renvoyer une méthode de contrôleur?
Types d'objets retournés et leur description (anglais)

Qu'est-ce qu'une vue?

La vue est utilisée pour afficher les données d'application à l'utilisateur.
Spring MVC prend en charge plusieurs fournisseurs de vues (ils sont appelés moteurs de modèle) - JSP, JSF, Thymeleaf, etc.
L'interface View transforme les objets en servlets ordinaires.


Comment View est-il sélectionné dans la phase de rendu? Comment la vue est-elle affichée?

DispatcherServlet contient une liste de "mappeurs" spéciaux à afficher, qui, en fonction de la configuration de la servlet, contiendront des bacs qui implémentent l'interface ViewResolver .


Afficher le processus d'affichage:


  1. Le contrôleur renvoie la vue de nom dans le DispactherServlet
  2. Le nom est ViewResolver aux noms dans ViewResolver
  3. Si un ViewResolver approprié est ViewResolver , il renvoie la vue à utiliser lors du rendu.
  4. DS transmet le modèle avec les données dans la vue et affiche la sortie (page html)

Qu'est-ce qu'un modèle?

Il s'agit d'un objet de classe qui implémente l'interface Model et représente une collection de paires clé-valeur.
Le contenu du modèle est utilisé pour afficher les données dans la vue.
Par exemple, si View affiche des informations sur l'objet Customer , il peut faire référence à des clés de modèle, par exemple customerName , customerPhone et obtenir des valeurs pour ces clés.
Les objets de valeur du modèle peuvent également contenir une logique métier.

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


All Articles