En plus des entretoises, la force principale des cadres MVC Web traditionnels est deuxième à la suite de Spring MVC. Par conséquent, il s'agit également du cadre grand public qu'un programmeur a besoin pour maîtriser. Avec plus de cadres, il existe naturellement plus de solutions à mettre en œuvre lorsqu'ils traitent des besoins et des entreprises changeants. Cependant, si vous souhaitez utiliser Spring MVC de manière flexible pour gérer la plupart des développements Web, vous devez maîtriser sa configuration et ses principes.
1. Construction de l'environnement Spring MVC: (printemps 2.5.6 + hibernate 3.2.0)
1. Introduction du package JAR
Printemps 2.5.6: printemps.jar, printemps-webmvc.jar, commons-Logging.jar, cglib-nodep-2.1_3.jar
Hibernate 3.6.8: hibernate3.jar, hibernate-jpa-2.0-api-1.0.1.final.jar, antlr-2.7.6.jar, commons-collections-3.1, Dom4j-1.6.1.jar, javassist-3.12.0.ga.jar, jta - --1.1.jar, slf4j-api-1.6, jta - --1.1.jar, slf4j-api-1.6, jta- - --1.1.jar, slf4j-api-1.6.jar, jta - --1.1.jar, slf4j-api-1.6, jta-1.1. SLF4J-NOP-1.6.4
SpringMVC est un framework MVC basé sur Dispatcherservlet. La première chose à laquelle chaque demande accède est le Dispatcherservlet. Le Dispatcherservlet est responsable de la transmission de chaque demande de demande au gestionnaire correspondant. Une fois que le gestionnaire l'a traité, il renvoie la vue (vue) et le modèle (modèle) correspondant. La vue et le modèle retournés ne peuvent pas être spécifiés, c'est-à-dire que vous ne pouvez renvoyer que le modèle ou renvoyer uniquement la vue ou non.
DispatcherServlet est hérité de HttpServlet. Étant donné que SpringMVC est basé sur Dispatcherservlet, configurons d'abord le DispatcherServlet afin qu'il puisse gérer le contenu que nous voulons qu'il gère. Le HttpServlet est déclaré dans le fichier web.xml.
<! - Spring MVC Configuration -> <! - ===================================================================. <servlet-Class> org.springframework.web.servlet.dispatcherservlet </vrlet-Class> <! - Vous pouvez personnaliser l'emplacement et le nom du fichier de configuration servlet.xml. La valeur par défaut se trouve dans le répertoire Web-Inf, et le nom est [<Servlet-Name>] - Servlet.xml, tels que Spring-servlet.xml <IniT-Param> <AmArd-Name> ContextConfiglocation </ Param-Name> </Am param-Value> /web-inf/Spring-servlet.xml </ param-value> 默认web-inf-param> - <Charot-on-Startup> 1 </ Load-on-Startup> </Servlet> <Servlet-Mapping> <Serplet-Name> Spring </vrlet-name> <url-Pattern> *. Do </ url-Pattern> -> <disener> <écoute de classe> org.springframework.web.context.contextLoaderListener </ écouteur-class> </diner> <! - Spécifie le répertoire où se trouve le fichier de configuration du bean de ressort. La configuration par défaut se situe dans le répertoire Web-Inf -> <context-param> <param-name> contextConfigLocation </ param-name> <param-valeur> classpath: config / applicationContext.xml </ param-value> </ context-param>
Configuration Spring-Servlet.xml
Le nom de Spring-Servile est dû au fait que la valeur correspondante par la balise <Servlet-Name> dans web.xml ci-dessus est Spring (<Servlet-Name> Spring </vrlet-name>) et le nom de fichier de Spring-Servlet. S'il est changé en printemps, le nom du fichier correspondant est Springmvc-servlet.xml.
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/contex http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdd http://www.springframework.org/schema/context <a href = "http://www.springframework.org/schema/context/spring-context-3.0.xsd"> http://www.springframework.org/schema/context/spring-context-3.0.xsd </a> "> <! <Context: Annotation-Config /> <! - Définissez le package JAR où la classe à l'aide de l'annotation est située -> <Context: Component-Scan Base-Package = "Controller"> </ Context: Component-Scan> <! - Complétez la cartographie de la demande de demande et de l'annotation -> <Bean /> <! Préfixe: préfixe, suffixe: suffixe -> <bean p: prefix = "/ jsp /" p: suffixe = ". jsp" /> </ beans>
DispatcherServlet utilisera des haricots spéciaux pour gérer les demandes de demande et générer des rendements de vue correspondants.
En ce qui concerne le retour d'une vue, le contrôleur n'est responsable que du retour d'une valeur, puis de la vue renvoyée. Il est contrôlé par l'analyseur de vue. L'analyseur de vue couramment utilisé dans JSP est InternalResourceViewResovler, qui nécessitera un préfixe et un suffixe.
Dans l'analyse de vue ci-dessus, si le contrôleur renvoie le blog / index, la vue analysée via l'analyseur de vue est /jsp/blog/index.jsp.
Parlant principalement de Controller.
Une classe qui utilise @Controller pour le marquage est le contrôleur
Contrôleur de package; import javax.servlet.http.httpservletRequest; import org.springframework.sterreotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.spring // Classe ActionPublic TestController similaire à l'action mappage de Struts {@RequestMapping ("Test / Login.do") // Demande de mappage d'adresses URL, similaire à la chaîne de mappage d'action de Struts, String TestLogin (@RequestParam (valeur = "Username") String Username, String Word, HTTPSERVERS être contenu dans la carte d'adresse de l'URL de demande (sauf si l'attribut requis = false) // @RequestParam peut être abrégé sous le nom de: @RequestParam ("username") if (! "admin" .equals (nom d'utilisateur) ||! "admin" .equals (mot de passe)) {return "loginerror"; // Jump le chemin de la page (par défaut est transféré), qui n'a pas besoin de contenir le préfixe et le suffixe configurés dans le fichier de configuration de Spring-Servlet} return "LoginSuccess"; } @RequestMapping ("/ Test / Login2.do") Public ModelAndView TestLogin2 (Nom d'utilisateur de chaîne, mot de passe de chaîne, Int Age) {// La demande et la réponse ne doivent pas apparaître dans la méthode. Si vous ne pouvez pas l'utiliser, vous pouvez le supprimer // Le nom du paramètre correspond au nom du contrôle de la page, et le type de paramètre sera automatiquement converti if (! "Admin" .equals (nom d'utilisateur) ||! "Admin" .equals (mot de passe) || Âge <5) {return new ModelandView ("loginerror"); // Instancier manuellement ModelAndView Pour terminer la page (vers l'avant), l'effet est équivalent à la méthode ci-dessus pour renvoyer la chaîne} return new ModelandView (new redirectView ("../ index.jsp")); // Redirection Page par redirection // Il existe également un moyen simple d'écrire la redirection // Renvoie un nouveau ModelandView ("Redirection: ../ index.jsp"); } @RequestMapping ("/ Test / Login3.do") MODÈLE PUBLICALDVIED TESTLOGIN3 (utilisateur utilisateur) {// Les paramètres sont également pris en charge en tant qu'objets Form, similaire à ActionForm de Struts. L'utilisateur ne nécessite aucune configuration, écrivez simplement String username = user.getUserName (); String mot de passe = user.getPassword (); int age = user.getage (); if (! "admin" .equals (nom d'utilisateur) ||! "admin" .equals (mot de passe) || Âge <5) {return new ModelAndView ("Loginerror"); } return new ModelAndView ("LoginSuccess"); } @Resource (name = "LoginService") // Obtenez l'ID du Bean dans ApplicationContext.xml qui est LoginService et injecter privé LoginService LoginService; // Équivalent à la méthode d'injection de printemps traditionnelle pour écrire des méthodes GET et définir. Cet avantage est concis et soigné, éliminant le code inutile @RequestMapping ("/ test / login4.do") public String TestLogin4 (utilisateur utilisateur) {if (loginService.login (user) == false) {return "loginerror"; } return "LoginSuccess"; }}Les quatre exemples de méthode ci-dessus sont un contrôleur qui contient différentes URL de demande. Vous pouvez également utiliser un accès URL pour distinguer différentes méthodes d'accès via les paramètres URL. Le code est le suivant:
Contrôleur de package; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestMethod; @ contrôleur @ requestmapping ("/ test2 / login.do") // spécifier le seul *. CONTRÔLEURPUBLIC CLASS TestController2 {@RequestMapping public String TestLogin (String Username, String Motword, int Age) {// Si aucun paramètre n'est ajouté, la méthode est exécutée par défaut lors de la demande / altère2/login.do if (!| Admin ".Equals (nom d'utilisateur) ||!". } return "LoginSuccess"; } @RequestMapping (params = "méthode = 1", méthode = requestMethod.post) public String testLogin2 (nom d'utilisateur de chaîne, mot de passe de chaîne) {// Les méthodes d'appels différentes sont distinguées en fonction de la valeur de la valeur de la méthode des paramètres params // vous pouvez spécifier le type de méthode de demande de page, qui est par défaut pour obtenir la demande (! "Admin". Equals (UserName) ||! "Loginerror"; } return "LoginSuccess"; } @RequestMapping (params = "Method = 2") public String TestLogin3 (String Username, String Motword, int Age) {if (! "Admin" .equals (nom d'utilisateur) ||! "Admin" .Equals (mot de passe) || Âge <5) {return "Loginerror"; } return "LoginSuccess"; }}En fait, la mise en œuvre de la demande peut être considérée comme l'URL de demande de demande parent sur la classe, tandis que la demande de demande peut être considérée comme l'URL de demande de demande de l'enfant sur la méthode. L'URL de la demande des parents et de l'enfant sera finalement épissée pour correspondre à l'URL de la demande de page. Par conséquent, la carte de demande peut également être écrite comme ceci:
Contrôleur de package; import org.springframework.sterreotype.Controller; import org.springframework.web.bind.annotation.requestmapping; @ contrôleur @ requestmapping ("/ test3 / *") // demande parent de demande urlpublic classController3 /test3/login.do public String testLogin (String Username, String Motword, int Age) {if (! "admin" .equals (nom d'utilisateur) ||! "admin" .equals (mot de passe) || Age <5) {return "Loginerror"; } return "LoginSuccess"; }}Les annotations courantes dans SpringMVC incluent @Pathvariable, @RequestParam, @Pathvariable Tagged sur les paramètres de la méthode. Les paramètres marqués à l'aide peuvent être passés à l'aide du chemin de demande. Voir l'exemple suivant
@RequestMapping (value = "/ comment / {blogid}", méthode = requestMethod.post) public void commentaire (commentaire commentaire, @ pathvariable int blogid, httpSession session, httpsservletResponse réponse) lance ioException {}Dans cet exemple, Blogid est marqué comme une variable de chemin de demande par @Pathvariable. Si la demande est /blog/comment/1.do, cela signifie que la valeur du blogid est 1. De même, @RequestParam est également utilisée pour transmettre des valeurs aux paramètres, mais il prend la valeur du paramètre de la demande du début, ce qui équivaut à la méthode request.getParamètre ("paramètre").
Dans la méthode du contrôleur, si les éléments Web HttpServLetRequest, HttpServletResponse et HttpSession sont nécessaires, il vous suffit de donner à la méthode un paramètre correspondant, puis SpringMVC passera automatiquement la valeur à l'accès. Cependant, il convient de noter que si la session est appelée lorsque la première fois que vous accédez au système, une erreur sera signalée, car la session n'a pas été générée pour le moment.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.