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