Maison >Java >javaDidacticiel >Introduction détaillée au workflow SpringMVC (avec code)
Cet article vous apporte une introduction détaillée au workflow SpringMVC (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Flux de travail SpringMVC :
Photo détaillée :
Description du flux de travail SpringMVC
1. au serveur Lors de l'envoi d'une requête, la requête est obtenue par le contrôleur frontal Spring DispatcherServlet, comme le montre la figure détaillée Étape 1
2. DispatcherServlet analyse l'URL de la requête (par exemple, nous envoyons un. request avec l'URL suivante :
http: //localhost:8080/SpringMVC/hello.action), vous obtiendrez l'identifiant de ressource de la requête (URI, équivalent au hello.action ci-dessus). Ensuite selon l'URI, le mappeur de handler (HandlerMapping) est appelé pour obtenir tous les objets associés configurés par le Handler (y compris l'objet Handler et l'intercepteur correspondant à l'objet Handler), et finalement renvoyé sous la forme d'un objet HandlerExecutionChain.
3.DispatcherServlet récupère le Handler renvoyé ci-dessus et sélectionne un HandlerAdapter approprié. (Remarque : si le HandlerAdapter est obtenu avec succès, la méthode preHandler(...) de l'intercepteur commencera à être exécutée à ce moment-là)
4.Après avoir sélectionné le HandlerAdapter approprié, le Handler commencera à être exécuté. exécuté. Pendant le processus de remplissage des paramètres d'entrée du gestionnaire, Spring fera un travail supplémentaire pour vous en fonction de la configuration (nous n'avons pas besoin de nous en occuper) :
EG :
HttpMessageConveter : demandera le message (tel que Json, XML et autres données) en un objet, convertira l'objet en informations de réponse spécifiées
Conversion de données : effectuera une conversion de données sur le message de demande. Par exemple, String est converti en Integer, Double, etc.
Radicalisation des données : Formatez les données du message de requête. Comme la conversion de chaînes en nombres formatés ou en dates formatées, etc.
Vérification des données : vérifiez la validité des données (longueur, format, etc.) et stockez les résultats de la vérification dans BindingResult ou Error
5 . Une fois le gestionnaire exécuté, renvoyez un objet ModelAndView (y compris le nom de la vue ou le nom de la vue et le modèle) à DispatcherServlet
6 En fonction de l'objet ModelAndView renvoyé, sélectionnez un ViewResolver approprié et renvoyez-le. à DispatcherServlet ;
7. ViewResolver combine Model et View pour restituer la vue
8 Enfin, le résultat du rendu de la vue est renvoyé au client
Explication du nom du composant :
1. DispatcherServlet : Le contrôleur frontal
est équivalent au contrôleur précédent. Il est le centre de l'ensemble du processus et est responsable de l'appel des autres composants
<.>2. HandlerMapping : le mappeur de processeur est chargé de demander Find the Handler (processeur). Différents mappages peuvent être implémentés dans springMVC selon différents mappeurs, tels que la méthode de configuration XML, la méthode d'annotation, la méthode d'interface. etc. 3. Gestionnaire : contrôleur backend Les demandes spécifiques des utilisateurs sont traitées sous le contrôle du contrôleur front-end, les développeurs sont donc généralement tenus de développer en fonction des besoins. 4.HandlerAdapter : adaptateur de processeur Le traitement du gestionnaire peut être exécuté sur plusieurs types de processeurs. Il s'agit de l'application du modèle d'adaptateur. 5. ViewResolver : le résolveur de vues est chargé de générer la vue à partir des résultats du traitement. Les développeurs peuvent développer la vue selon les besoins du programme de démarrage (étapes détaillées) : Après avoir compris Après le workflow springMVC, implémentons notre programme d'entrée selon les étapes du processus : 1 Importez notre package de framework Spring (téléchargez-le généralement depuis le site officiel et la version 4.2 est disponible. plus couramment utilisé)2. Configurez le contrôleur frontal dans web.xml
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <!-- 让servlet随服务启动 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>Ici nous parlons de notre méthode d'interception :1. Intercepter les URL avec des suffixes fixes : tels que *.action, *.do2. Intercepter tout : défini sur /, mais cette méthode provoquera. les fichiers statiques (css, js .jpg) sont interceptés et ne peuvent pas être affichés normalement, cette méthode nécessite donc un traitement spécialRemarque : vous ne pouvez pas définir toutes les interceptions sur /* Cette méthode est erronée car lorsqu'une action est demandée, lorsque l'action passe à jsp Elle a été à nouveau interceptée et une exception s'est produite : l'adresse de mappage
n'a pas pu être trouvée selon le chemin jsp 3.Définissez le fichier de configuration de. springmvc
<servlet> <init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/springmvc.xml</param-value> </init-param> </servlet>
4.Processeur de développement
public class Hello implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { List list = new ArrayList<>(); list.add("one"); list.add("two"); ModelAndView mv = new ModelAndView(); mv.addObject("list",list); return mv; } }
5.在springmvc.xml中配置、
<!-- 配置适配器 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 处理器映射器 --> <!-- 根据bean的 name 查找Handler , 将action的URL 配置在bean的name中--> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 配置处理器 --> <bean name="/hello.action" class="com.mt.controller.Hello"></bean> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
6.视图开发 ,jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> asdfadfadfa ${list } </body> </html>
测试结果: 开启服务器后, 发送 http://localhost:8080/SpringMVC/hello.action的请求
页面显示:
对应理解springMVC 的流程即可。
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!