Remarque : tout le contenu de l'article est extrait du didacticiel de laboratoire [Spring MVC Simple Tutorial]
Spring MVC est un produit de suivi de. SpringFrameWork et a été intégré à Spring Inside Web Flow est un framework Web puissant et flexible. Spring MVC fournit un DispatcherServlet comme contrôleur frontal pour distribuer les requêtes. Grâce à l'interface de stratégie, le framework Spring est hautement configurable. Spring MVC comprend également une variété de technologies d'affichage, telles que Java Server Pages (JSP), Velocity, Tiles, iText, POI, etc. Spring MVC sépare les rôles des contrôleurs, des objets de modèle, des répartiteurs et des objets de gestionnaire, ce qui les rend plus faciles à personnaliser.
Le framework Spring MVC est principalement composé de DispatcherServlet, d'un mappeur de processeur, d'un adaptateur de processeur, d'un processeur (contrôleur), d'un résolveur de vue et d'une vue.
Le workflow de traitement des requêtes de haut niveau de Spring MVC est le suivant (photo du site officiel de Spring) :
Après panne, le processus d'exécution de Spring MVC est le suivant, comprenant huit étapes au total :
Explication des interfaces liées à Spring MVC :
(1 ) DispatcherServlet
Contrôleur frontal, toutes les requêtes sont uniformément distribuées via celui-ci et les requêtes seront distribuées au gestionnaire correspondant.
(2) HandlerMapping (mappeur de processeur)
Analysez le lien de requête, puis recherchez la classe qui exécute la requête (le gestionnaire appelé HandlerMapping) en fonction du lien de requête.
(3) HandlerAdapter (adaptateur de processeur)
Appelez des méthodes spécifiques pour traiter les demandes des utilisateurs.
(4)Controller
Controller traitera la demande de l'utilisateur. Une fois que Controller aura traité la demande de l'utilisateur, il renverra l'objet ModelAndView au contrôleur frontal DispatcherServlet.
D'un point de vue macro, DispatcherServlet est le contrôleur de l'ensemble de l'application Web ; d'un point de vue micro, Controller est le contrôleur dans le traitement d'une seule requête Http.
(5) ViewResolver (résolveur de vue)
Résolvez MdoelAndView, changez le nom de la vue logique dans MdoelAndView en un véritable objet View et supprimez le modèle dans MdoelAndView.
Spring MVC a été brièvement présenté auparavant. Prenons l'exemple de l'enregistrement simple des utilisateurs pour comprendre certains principes de base et applications de Spring MVC.
Les fichiers liés à Spring MVC sont placés sur le serveur du. bâtiment du laboratoire, veuillez ouvrir Xfce sur le bureau de l'environnement expérimental et saisir le code suivant pour obtenir :
wget
Entrez la commande suivante pour décompresser le fichier .zip :
unzip Spring-jars.zip
Créez un nouveau projet Web (Dynamic Web Project) dans Eclipse et nommez-le SpringMVCTest
.
Veuillez cocher l'option "Générer automatiquement web.xml" .
Copiez tous les packages jar dans le chemin /home/shiyanlou/Spring-jars/
vers le répertoire WebContent/WEB-INF/lib/
du projet.
Modifier le contenu du fichier web.xml comme suit :
<?xml version="1.0" encoding="UTF-8"?> <web-app> <display-name>SpringMVCTest</display-name> <!-- 配置 Spring MVC DispatchcerServlet 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- contextConfigLocation 是参数名称,该参数的值包含 Spring MVC 的配置文件路径 --> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/springmvc-config.xml</param-value> </init-param> <!-- 在 Web 应用启动时立即加载 Servlet --> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet 映射声明 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 监听当前域的所有请求 --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 添加 register.jsp 为首页 --> <welcome-file-list> <welcome-file>register.jsp</welcome-file> </welcome-file-list> </web-app>
Configurer dans web.xml DispatchcerServlet
, DispatchcerServlet a besoin d'un fichier de configuration Spring MVC lors du chargement. Par défaut, il recherchera le fichier WEB-INF
correspondant sous [servlet-name]-servlet.xml
. Par exemple, dans cet exemple, la recherche par défaut est springmvc-servlet.xml
. .
Le fichier de configuration Spring MVC peut être placé n'importe où, décrivez-le simplement avec le sous-élément de servlet init-param
, voir l'exemple de code ci-dessus, puis DispatchcerServlet recherchera /WEB-INF/springmvc-config.xml
.
Créez un nouveau fichier de configuration Spring MVC WebContent/WEB-INF/
dans le répertoire springmvc-config.xml
, configurez le contrôleur Spring MVC et ajoutez le code suivant :
<?xml version="1.0" encoding="UTF-8"?> <beans> <annotation-config></annotation-config> <!-- 配置自动扫描的包,完成 Bean 的创建和自动依赖注入的功能 --> <component-scan></component-scan> <!-- 这两个类用来配置 annotation 类型的处理器映射器和处理器适配器 --> <bean></bean> <bean></bean> <!-- 配置视图解析器 --> <bean> <property></property> <property></property> </bean> </beans>
Dans le fichier de configuration ci-dessus, Spring utilise un mécanisme d'analyse pour rechercher toutes les classes de contrôleur basées sur des annotations dans l'application. Dans cet exemple, tous les fichiers Java du package com.shiyanlou.springmvc.controller
et ses sous-packages sont analysés. .
Le mappeur de processeur de type d'annotation DefaultAnnotationHandlerMapping et l'adaptateur de processeur AnnotationMethodHandlerAdapter sont configurés en même temps DefaultAnnotationHandlerMapping recherche le mappage en fonction de la demande, et AnnotationMethodHandlerAdapter termine l'appel à la méthode d'annotation @RequestMapping (décrite ci-dessous). de la classe contrôleur.
最后配置的视图解析器 InternalResourceViewResolver 用来解析视图,将 View 呈现给用户。视图解析器中配置的 prefix
表示视图的前缀, suffix
表示视图的后缀。
注:在 Spring4.0 之后,如果不配置处理映射器、处理器适配器和视图解析器,会使用默认的。
在项目目录 /Java Resources/src
的包 com.shiyanlou.springmvc.entity
下新建类 User.java
,包含 id、username、password 和 age 属性,代码如下:
package com.shiyanlou.springmvc.entity; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String username; private String password; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
在包 com.shiyanlou.springmvc.controller
下新建 Controller 类 UserController.java
,具体解释注释已经给出,代码如下:
package com.shiyanlou.springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.shiyanlou.springmvc.entity.User; /** * UserController 是一个基于注解的控制器 * 可以同时处理多个请求动作 */ @Controller public class UserController { /** * RequestMapping 用来映射一个请求和请求的方法 * value="/register" 表示请求由 register 方法进行处理 */ @RequestMapping(value="/register") public String Register(@ModelAttribute("form") User user, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象 // 在 model 中添加一个名为 "user" 的 user 对象 model.addAttribute("user", user); // 返回一个字符串 " success" 作为视图名称 return "success"; } }
(1)register.jsp
在 WebContent
目录下新建一个 JSP 页面命名为 register.jsp,代码如下:
nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <meta> <title>register page</title>
(2)success.jsp
在 WebContent/WEB-INF
目录下新建文件夹 views
,并在该路径下新建一个 JSP 页面命名为 success.jsp,代码如下:
nbsp;html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <meta> <title>success page</title> <h5>login was successful</h5> <p> name:${requestScope.user.username}<br> password:${requestScope.user.password}<br> age:${requestScope.user.age}<br> </p>
注:由于在线环境的资源问题,这里启动 tomcat 比较慢,需要大家耐心等待几分钟。如果遇到 Tomcat 启动超时的问题,请按照下图的方法延长 Tomcat 的启动时间。
右击 SpringMVCTest 工程,Run As->Run on Server,保持默认选项不变,点击 Finish,一会儿即可看到结果:
输入注册信息,点击注册按钮,结果如下:
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!