Maison  >  Article  >  Java  >  Étapes d'exécution après le démarrage du projet Spring MVC (avec diagramme schématique)

Étapes d'exécution après le démarrage du projet Spring MVC (avec diagramme schématique)

不言
不言original
2018-09-19 14:23:364258parcourir

Le contenu de cet article concerne les étapes d'exécution après le lancement du projet Spring MVC (avec diagramme schématique). Les amis dans le besoin peuvent s'y référer.

Processus d'exécution après le démarrage du projet Spring MVC :

1. Processus d'exécution :

01. Lorsque le projet Web est démarré, chargez le fichier web.xml, y compris. le fichier de configuration principal

Étant donné que le contrôleur principal de mvc est défini dans le fichier web.xml, ce contrôleur sera initialisé

02. Par exemple, le chemin de requête de l'utilisateur est localhost:8080/. bonjour

À ce moment, /hello sera considéré comme le chemin de la requête ====> L'identifiant du bean dans le fichier de configuration principal

03./hello sera intercepté par le contrôleur principal et accédez au mappeur de gestionnaires (HandlerMapping)

04. La couche inférieure trouve d'abord le HandlerMapping approprié, puis renvoie une chaîne d'exécution de processeur (HandlerExecutionChain)

05. qui est sur le point d'être exécuté et (1-N Interceptor)

06. Rechercher HandlerAdapter en fonction du gestionnaire de la chaîne d'exécution du processeur

07. HandlerAdapter exécute la méthode spécifiée en fonction du type de. notre contrôleur

08. Après avoir exécuté la méthode, il faut retourner un ModleAndView

Modle ==》Map

View ==》String

09. l'analyseur de vue est défini, il sera exécuté. La vue est en fait une logique. Le nom de la vue

n'a pas d'analyseur de vue défini et sera exécuté. Le préfixe et le suffixe n'ont aucune valeur. nom de la vue physique

Schéma :

2. Afficher le code sous-jacent

01. Cliquez sur le contrôleur principal dans le fichier web.xml

02. Ctrl+ o Trouvez la méthode correspondante doDispatch

03. Commencez à analyser le code

protected void doDispatch(HttpServletRequest request, HttpServletResponse response)
HttpServletRequest processedRequest = request;  //请求对象
HandlerExecutionChain mappedHandler = null;  
//处理器执行链=我们即将执行的Controller+(1+拦截器)
boolean multipartRequestParsed = false;
//解析一个请求是否是文件上传请求

04. . Recherchez le code suivant

 // Determine handler for the current request.  mappedHandler = getHandler(processedRequest);

Trouvez le gestionnaire qui doit être exécuté selon notre demande (Contrôleur)
Ctrl+bouton gauche de la souris et cliquez sur getHandler()
J'ai trouvé que le retour. La valeur de cette méthode est une chaîne d'exécution du processeur !

05. Après avoir entré getHandler, recherchez le code suivant

HandlerExecutionChain handler = hm.getHandler(request);

06 Continuez à saisir hm.getHandler(request) ici

Après avoir entré, j'ai trouvé que ceci. méthode est un Il n'y a pas d'implémentation de méthode pour la méthode dans l'interface (HandlerMapping), alors continuez à cliquer sur la classe d'implémentation AbstractHandlerMapping

07 Trouvez le code suivant et cassez le point

Object handler = getHandlerInternal(request);
<.>08. Ensuite, vous constatez que vous obtenez La chaîne d'exécution du processeur donne à notre contrôleur principal

 // Determine handler adapter for the current request.  
 HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
et cliquez sur getHandlerAdapter()

09. Recherchez le point d'arrêt de code suivant

 if (ha.supports(handler)) {
     return ha;
     }
10. Cliquez sur supports()

11. Trouvé que supports()

est dans l'interface, mais il y a 5 classes d'implémentation qui en exécuteront 3 par défaut.

mais le HelloController que nous avons écrit implémente indirectement l'interface Controller, il nous suffit donc de casser le point dans le SimpleControllerHandlerAdapter !

12. Renvoyez le HandlerAdapter obtenu au contrôleur principal

13 Avec l'adaptateur de processeur dans le contrôleur principal, l'étape suivante consiste à exécuter le vrai code

14. Cliquez sur handle
 // Actually invoke the handler.  
 mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

15. Cliquez sur handleRequest
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
   return ((Controller) handler).handleRequest(request, response);
}

pour entrer dans le AbstractController. Notre HelloController hérite de cette classe !

Cette classe parent exécute handleRequestInternal(request, réponse);

16. Cliquez sur handleRequestInternal

pour trouver notre classe d'implémentation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn