[JAVA] Comprendre le flux approximatif de la demande à la réponse dans SpringWebMVC

Lors de l'utilisation de Spring, j'ai souvent eu beaucoup de problèmes si je ne comprenais pas dans une certaine mesure le flux de traitement, je vais donc résumer le contenu de la lecture de la source dans mon propre mémo.

DispatcherServlet Toutes les demandes effectuent le traitement de ce servlet. Pour suivre le flux de traitement, je pense que vous devriez regarder la source de la méthode doService.

Pour que ce servlet appelle un traitement ultérieur (contrôleur, etc.) ou génère une réponse à l'aide de JSP, etc. Vous aurez besoin des beans suivants.

Le flux de traitement général est le suivant.

  1. Utilisez HandlerMapping pour obtenir le traitement suivant de la demande.
  2. Utilisez le HandlerAdapter pour exécuter le processus acquis en 1. Si aucune exception ne se produit à la suite de l'exécution du processus 2, utilisez ViewResolver pour obtenir une vue à partir du résultat du processus 2 et exécuter le processus de dessin. Si une exception se produit à la suite de l'exécution du processus 2, acquérez et exécutez la méthode qui gère l'exception qui s'est produite dans HandlerExceptionResolver.

HandlerMapping Utilisez la méthode getHandle pour obtenir le traitement suivant de la demande et renvoyer le HandlerExecutionChain. Le HandlerExecutionChain peut contenir non seulement le gestionnaire (méthode Controller suivante) mais également plusieurs intercepteurs. DispatcherServlet utilise ce HandlerExecutionChain pour exécuter Interceptor et handler.

La classe la plus couramment utilisée pour implémenter cette interface est la classe RequestMappingHanlderMapping. Cette classe connecte les requêtes et les processus en fonction du contenu de @ RequestMapping de la classe Controller.

HandlerAdapter Adatpter classe pour exécuter le gestionnaire obtenu par HandlerMapping. Traite bien avant et après l'exécution du gestionnaire. (Grossièrement)

Une classe souvent utilisée pour implémenter cette interface est la classe RequestMappingHandlerAdapter. Il stocke les paramètres de demande dans un objet, le valide et génère un ModelAndView à partir de la valeur de retour d'un gestionnaire. (Strictement parlant, le traitement est délégué à HandlerMethodArgumentResolver et HandlerMethodReturnValueHandler.)

HandlerExceptionResolver Lorsqu'une exception se produit, elle connecte l'exception au traitement suivant.

Une classe souvent utilisée pour implémenter cette interface est la classe ExceptionHandlerExceptionResolver. Les méthodes avec @ ExceptionHandler dans Contoller ou ControllerAdvice sont exécutées à partir de cette classe. En passant, comme vous pouvez le voir en vérifiant le contenu, si le Controller et ControllerAdvice ont @ ExceptionHandler qui gère la même exception, le côté Controller a la priorité.

ViewResolver Vous pouvez obtenir la classe View à partir de ViewName.

Une classe souvent utilisée pour implémenter cette interface est la classe InternalResourceViewResolver. Cette classe peut obtenir le JstlView pour dessiner le JSP à partir de ViewName. En outre, si le ViewName a un préfixe de "redirect:", il générera un RedirectView pour le traitement de la redirection.

LocaleResolver Il semble que vous puissiez obtenir les paramètres régionaux à partir de la demande. Je ne l'ai pas utilisé auparavant, donc je ne connais pas les détails, mais si vous utilisez SessionLocaleResolver, vous pouvez stocker les informations locales dans Session, il semble donc que vous puissiez gérer les paramètres régionaux pour chaque utilisateur.

ThemeResolver Il semble que vous puissiez obtenir le thème de la demande. Je n'ai pas utilisé le thème de Spring en premier lieu, donc je ne connais pas les détails. ..

MultipartResolver Une interface pour générer un fichier multipart à partir d'une demande multipart / form-data. Si vous avez besoin de fonctionnalités telles que le téléchargement de fichiers, vous devez définir ce résolveur comme un bean.

FlashMapManager Une interface pour gérer FlashScope. FlashScope est une étendue pour contenir des valeurs jusqu'à la destination de la redirection. Normalement, SessionFlashMapManager est utilisé et FlashScope est réalisé à l'aide de Session. J'ai écrit sur le mécanisme ici, alors veuillez vous y référer si vous le souhaitez. Transmettez la valeur à la destination de redirection sans utiliser les attributs de redirection dans Spring MVC

Recommended Posts

Comprendre le flux approximatif de la demande à la réponse dans SpringWebMVC
Confirmation et refactoring du flux de la requête au contrôleur dans [httpclient]
Je veux comprendre le flux des paramètres de demande de traitement Spring
Référence Java à comprendre dans la figure
Tokoro j'ai réécrit dans la migration de Wicket 7 à 8
Comprendre les caractéristiques de Scala en 5 minutes (Introduction à Scala)
Classes et instances Java comprises dans la figure
Comment déterminer la demande de prélecture depuis le navigateur
Changer la demande / réponse de l'API REST Spring Boot de CamelCase à SankeCase
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Passer les paramètres régionaux i18n à JavaScript
[java8] Pour comprendre l'API Stream
La route de JavaScript à Java
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
[Rails] Articles pour les débutants pour organiser et comprendre le flux de form_with
Qu'est-ce que CHECKSTYLE: OFF trouvé dans la source Java? Checkstyle à savoir de
Raccourcissez l'UUID en base64 dans Swift.
Examinez le remplacement de Docker vers Podman.
Convertir les paramètres de demande en Enum au printemps
[Ruby] Des bases à la méthode inject
Pour écrire des données de réponse directement dans Spring
[Java] Flux du code source à l'exécution
Comment obtenir la date avec Java
Comprendre en 5 minutes !! Comment utiliser Docker
03. J'ai envoyé une demande de Spring Boot à l'API de recherche de code postal
Que trouve-t-on ... (3 points) dans la source Java? Argument de longueur variable à connaître