1. En démarrage avec les bases de SpringMVC, créez un programme Helloworld
1. Tout d'abord, importez le package JAR requis par SpringMvc.
2. Ajouter la configuration de Springmvc dans le fichier de configuration web.xml
<! - Configurez le paramètre de SpringMvcDispatcherservlet et configurez le mappage -> <Servlet> <Serplet-Name> SpringMvc </Servlet-Name> <Servlet-Class> Org.SpringFramework.web.servlet.DispatcherServlet </ Servlet-Class> <Init-Param> <Amont-Name> ContextConfiglocation </ Param-Name> <Am param-Value> CLASSPATH: Springmvc-servlet.xml </ Param-Value> </Init-Param> <! - <Loft-on-Startup> 1 </ Load-on-Startup> -> </ Servlet> <Serplet-Mapping> <Serplet-Name> Springmvc </ Servlet-Name> <Url-Pattern> / </url-Pattern>
3. Ajouter le fichier de configuration de Springmvc-Servlet.xml sous SRC
<? 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: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalation = "http://www.springframework.org/schea/bans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsdd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd "> <! - Scannez le package et le sous-pack Ressource -> <MVC: par défaut-service-handler /> <! - Si vous utilisez l'annotation, vous devez configurer le paramètre suivant -> <mvc: annotation-adug suffixe -> <propriété name = "suffixe" value = ". jsp" /> </ bean> </bans>
4. Créez un dossier nommé JSP dans le dossier Web-Inf pour stocker la vue JSP. Créez un hello.jsp et ajoutez "Hello World" à votre corps.
5. Créez un package et un contrôleur comme indiqué ci-dessous
6. Écrivez le code du contrôleur
@ Contrôleur @ requestmapping ("/ mvc") classe publique mvccontroller {@RequestMapping ("/ Hello") String public hello () {return "Bonjour"; }}7. Démarrez le serveur et tapez http: // localhost: 8080 / nom de projet / MVC / Hello
1.Dispatcherservlet
DispatcherServlet est un pré-contrôleur configuré dans le fichier web.xml. Intercepter les demandes de correspondance. Le servlet interceptant les règles de correspondance doit être défini par lui-même. Les demandes interceptées sont distribuées au contrôleur cible en fonction des règles de traitement correspondantes. Il s'agit de la première étape pour configurer Spring MVC.
2.InternalResourceViewResolver
Afficher le résolveur du nom
3. Les annotations ci-dessus
@Controller est responsable de l'enregistrement d'un haricot dans le contexte du printemps
@Requestmapping Annotation Spécifie quelles demandes d'URL peuvent être traitées pour le contrôleur
@Contrôleur
Responsable de l'enregistrement d'un haricot dans le contexte du printemps
@Requestmapping
Annotation Spécifie quelles demandes d'URL peuvent être traitées pour le contrôleur
@Requestbody
Cette annotation est utilisée pour lire une partie des données corporelles de la demande de demande, utiliser le HTTPMessageConverter configuré par le système pour analyser, puis lier les données correspondantes à l'objet à retourner, puis lier les données d'objet renvoyées par HttpMessageConverter aux paramètres de la méthode dans le contrôleur HTTPMessage
@ResponseBody
Cette annotation est utilisée pour écrire l'objet renvoyé par la méthode du contrôleur dans la zone de données du corps de l'objet de réponse après l'avoir converti en le HTTPMessageConverter approprié au format spécifié
@ModeLatTribute
Utilisez @ModelAttribute Annotation sur la méthode Définition: Spring MVC Avant d'appeler la méthode de traitement cible, la méthode qui annota @ModelAttribute au niveau de la méthode sera appelée une par une.
Utilisez @ModelAttribute Annotation avant d'entrer le paramètre de la méthode: vous pouvez obtenir l'objet à partir de l'objet implicite, lier les paramètres de demande à l'objet, puis passer la méthode dans l'objet de paramètre pour ajouter la méthode dans le modèle.
@RequestParam
Utilisez @RequestParam pour transmettre les paramètres de demande à la méthode de demande
@Pathvariable
Lier l'espace réservé de l'URL au paramètre d'entrée
@ExceptionHandler
Annoté sur la méthode, la méthode sera exécutée lorsqu'une exception se produira
@ControllerAdvice
Faites d'un contrôleur une classe globale de gestion des exceptions. La méthode annotée avec la méthode @ExceptionHandler dans la classe peut gérer toutes les exceptions qui se produisent dans les contrôleurs.
// correspond automatiquement à @RequestMapping ("/ Person") public String Toperson (nom de chaîne, double âge) {System.out.println (nom + "" + age); retourner "bonjour"; }1. Écrivez une classe d'entité de personne
package test.springmvc.Model; public class Person {public String getName () {return name; } public void setName (string name) {this.name = name; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; } nom de chaîne privée; Âge privé; }2. Méthodes d'écriture dans le contrôleur
// boxe automatiquement @RequestMapping ("/ Person1") public String TOPSERSE (Person P) {System.out.println (P.GetName () + "" + P.Getage ()); retourner "bonjour"; } // Le paramètre a été converti dans initBinder @RequestMapping ("/ Date") Date de chaîne publique (date de date) {System.out.println (date); retourner "bonjour"; } // Au moment de l'initialisation, convertissez le type "String" en type "date" @initbinder public void initbinder (servletRequestDatabinder Binder) {Binder.RegisterCustomEditor (Date.class, new CustomDateEditor (new SimpleDateFormat ("yyyy-mm-dd"), true)); } // Passez les paramètres à frontal @RequestMapping ("/ show") public string showPerson (map <string, object> map) {personne p = new personne (); map.put ("p", p); P.Setage (20); P.SetName ("Jayjay"); retourner "show"; }La réception peut obtenir "P" dans le domaine de la demande
// Passez les paramètres à Front-End à l'aide de AJAX @RequestMapping ("/ GetPerson") public void GetPerson (nom de chaîne, Printwriter PW) {PW.Write ("Hello," + Name); } @RequestMapping ("/ name") String public Sayshello () {return "name"; }La réception l'appelle avec le code jQuery suivant
$ (function () {$ ("# btn"). cliquez sur (fonction () {$ .post ("mvc / getPerson", {name: $ ("# name"). val ()}, function (data) {alert (data);});});}); // rediriger @RequestMapping ("/ redirect") public String redirect () {return "redirect: Bonjour"; }1. Deux packages en pot doivent être importés
2. Ajouter le fichier de configuration de Springmvc
<! - Télécharger les paramètres -> <bean id = "MultipartResolver"> <propriété name = "maxuploadSize" value = "102400000"> </ propriété> </ bean>
3. Code de méthode
@RequestMapping (value = "/ upload", méthode = requestMethod.Post) public String upload (httpServLetRequest req) lève exception {multipartHTTPServletRequest mReq = (multipartHtTTSservleRequest) res; Fichier multipartFile = mreq.getFile ("fichier"); String filename = file.getoriginalFileName (); SimpledateFormat sdf = new SimpledateFormat ("yyyymmddhhmmss"); FileoutputStream fos = new FileOutputStream (req.getSession (). GetServletContext (). GetRealPath ("/") + "upload /" + sdf.format (new Date ()) + filename.substring (filename.lastIndexof ('.'))); fos.write (file.getBytes ()); fos.flush (); fos.close (); retourner "bonjour"; }4. Formulaire de réception
<form action = "mvc / upload" method = "post" encType = "multipart / form-data"> <input type = "file" name = "file"> <br> <input type = "soume" value = "soume"> </ form>
@ Contrôleur @ requestmapping ("/ test") classe publique mvccontroller1 {@RequestMapping (value = "/ param") public String TestRequestParam (@RequestParam (value = "id") id entier, @RequestParam (value = "name") String name) {System.out.println (id + "" + name); retour "/ bonjour"; }}1.Resteproller
@ Contrôleur @ requestmapping ("/ rest") public class rostController {@RequestMapping (value = "/ user / {id}", méthode = requestMethod.get) public String get (@pathvariable ("id") INTER ID) {System.out.println ("get" + id); retour "/ bonjour"; } @RequestMapping (value = "/ user / {id}", méthode = requestMethod.Post) public String Post (@PathVariable ("id") Integer id) {System.out.println ("post" + id); retour "/ bonjour"; } @RequestMapping (value = "/ user / {id}", méthode = requestMethod.put) public String put (@Pathvariable ("id") Integer id) {System.out.println ("put" + id); retour "/ bonjour"; } @RequestMapping (value = "/ user / {id}", méthode = requestMethod.delete) public String Delete (@Pathvariable ("id") Integer id) {System.out.println ("Delete" + id); retour "/ bonjour"; }}2.Les formulaires envoient des demandes de put et de suppression
Configurer dans web.xml
<! - Configurez le HiddenHttpMethodFilter, convertissez la méthode du post pour mettre ou supprimer -> <filter> <Imter-Name> HiddenHttpMethodFilter </filter-Name> <Filter-Class> org.springFramework.web.filter.hiddenhttpmethodfilter </filter-class> </ filter> <Filter-Name> HiddenHttpMethodFilter </ Filter-Name> <Url-Pattern> / * </ url-Pattern> </ Filter-Mapping>
Au premier plan, vous pouvez utiliser le code suivant pour générer une demande
<form action = "rest / user / 1" metheth = "post"> <input type = "HIDDEN" name = "_ Method" value = "put"> <input type = "soume" value = "put"> </ form> <form action = "rest / user / 1" method = "post"> <entrée type = "soumi" value = "get"> </ form> <form action = "rest / user / 1" method = "post"> <input type = "HIDDEN" name = "_ Method" value = "Delete"> <input type = "soumi" value = "Delete"> </ form>
1. Importez le package JAR suivant
2. Code de méthode
@ Contrôleur @ requestmapping ("/ json") public class JSONController {@ResponseBody @RequestMapping ("/ user") public utilisateur Get () {user u = new User (); U.SetID (1); U.SetName ("Jayjay"); U.SetBirth (new Date ()); retourne u; }}1. Gérer les exceptions locales (dans le contrôleur)
@ExceptionHandler public ModelAndView exceptionHandler (exception ex) {ModelAndView mv = new ModelAndView ("Error"); mv.addObject ("Exception", ex); System.out.println ("dans TestExceptionHandler"); retour MV; } @RequestMapping ("/ Error") Public String Error () {int i = 5/0; retourner "bonjour"; }2. Gérer les exceptions globales (tous les contrôleurs)
@ControllerArAdvicePublic Class TestControllerAdvice {@ExceptionHandler public ModelAndView exceptionHandler (Exception ex) {ModelAndView mv = new ModelAndView ("Error"); mv.addObject ("Exception", ex); System.out.println ("dans TestControllerAdvice"); retour MV; }}3. Une autre façon de gérer les exceptions mondiales
Configurer dans le fichier de configuration de Springmvc
<! - Configurez SimplemappingExceptionResolver -> <an Bean> <propriété name = "exceptionmappings"> <pops> <prop key = "java.lang.arithmeticexception"> error </prop> </pps> </ propriété> </ank>
L'erreur est une page d'erreur
1. Créez une classe MyInterceptor et implémentez l'interface HandlerInterceptor
La classe publique MyInterceptor implémente HandlerInterceptor {@Override public void afterCompletion (httpServletRequest arg0, httpservletResponse arg1, objet arg2, exception arg3) lève exception {system.out.println ("aftercompletion"); } @Override public void posthandle (httpservletRequest arg0, httpservletResponse arg1, objet arg2, modelandview arg3) lève une exception {system.out.println ("posthandle"); } @Override Public Boolean Prehandle (HttpServletRequest Arg0, httpServletResponse arg1, objet arg2) lève une exception {System.out.println ("prehandle"); Retour Vrai; }}2. Configurer dans le fichier de configuration de Springmvc
<! - Paramètre intercepteur -> <MVC: intercepteurs> <mvc: interceptor> <mvc: mapping path = "/ mvc / **" /> <an bean> </ bean> gt; </ mvc: interceptor> </ mvc: intercepteurs>
3. Ordonnance d'exécution de l'intercepteur
1. Importez le package JAR requis par Hibernate-Validate
(Non sélectionné, n'avez pas besoin d'importer)
2. Écrivez l'utilisateur de la classe d'entité et ajoutez des annotations de vérification
classe publique User {public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } Public Date getBirth () {retour naissance; } public void SetBirth (date naissance) {this.birth = naissance; } @Override public String toString () {return "utilisateur [id =" + id + ", name =" + name + ", naissance =" + naissance + "]"; } private int id; @Notempty Private String Name; @Stast @datetimeFormat (pattern = "yyyy-mm-dd") Date privée naissance;}PS: @Past signifie que le temps doit être une valeur passée
3. Utilisez le formulaire de formulaire de Springmvc dans JSP
<form:form action="form/add" method="post" modelAttribute="user"> id:<form:input path="id"/><form:errors path="id"/><br> name:<form:input path="name"/><form:errors path="name"/><br> birth:<form:input path="birth"/><form:errors path="birth"/><form:errors path = "naissance" /> <formulaire: erreurs path = "naissance" /> <formulaire: erreurs path = "naissance" /> <input type = "soumi" value = "soumi"> </ formulaire: formulaire>
PS: chemin correspondant à son nom
4. Code dans le contrôleur
@ Contrôleur @ requestmapping ("/ form") public class formController {@RequestMapping (value = "/ add", méthode = requestMethod.Post) public string add (@valid user u, bindingResult br) {if (br.getErrorCount ()> 0) {return "addUser"; } return "showUser"; } @RequestMapping (value = "/ add", méthode = requestMethod.get) public String add (map <string, object> map) {map.put ("utilisateur", nouvel utilisateur ()); retourner "addUser"; }}PS:
1. Étant donné que l'attribut ModelAttribute est utilisé dans JSP, il doit y avoir un "utilisateur" dans le domaine de la demande.
2. @ Valid signifie vérifier les paramètres en fonction de l'annotation marquée sur l'entité
3. Retournez à la page d'origine pour réexprimer, et le formulaire se réexprimera également.
5. Personnaliser le message d'erreur
Ajouter des paramètres locaux.properties dans le répertoire SRC
NotEmpty.user.name = name ne peut pas être videpast.user.birth = la naissance devrait être un passé valaledateTimeFormat.user.birth = Le format de l'entrée est defetTypemimismatch.User.birth = Le format d'entrée est de tortypemismatch.user.id = le format d'entrée est le mauvais
Configurer dans le fichier de configuration de Springmvc
<! - Configurez la ressource locale -> <bean id = "messagesource"> <propriété name = "basename" value = "locale"> </ propriété> </ank>
6. Affichage international
Ajouter des paramètres locaux_zh_cn.properties sous SRC
nom d'utilisateur = mot de passe du compte = mot de passe
Ajouté dans les paramètres locaux.properties
username = utilisateur namepassword = mot de passe
Créer un lieu.jsp
<body> <fmt: message key = "username"> </ fmt: message> <fmt: message key = "mot de passe"> </ fmt: message> </ body>
Configurer dans Springmvc
<! - Faire de la page JSP peut être visité -> <MVC: View-Controller Path = "/ Locale" View-Name = "Locale" />
Laissez Locale.jsp être directement accessible dans le Web-Inf
Enfin, visitez Locale.jsp, changez la langue du navigateur et la langue qui peut voir le compte et le mot de passe a également été commuté.
1. Créez un package de test.springmvc.Antegrate pour démontrer l'intégration et créer différents types
2. Classe d'entité utilisateur
classe publique User {public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } Public Date getBirth () {retour naissance; } public void SetBirth (date naissance) {this.birth = naissance; } @Override public String toString () {return "utilisateur [id =" + id + ", name =" + name + ", naissance =" + naissance + "]"; } private int id; @Notempty Private String Name; @Stast @datetimeFormat (pattern = "yyyy-mm-dd") Date privée naissance;}3. Classe de service d'utilisation
@ComponentPublic class userservice {public userService () {System.out.println ("UserService Constructeur ... / n / n / n / n / n / n / n / n / n"); } public void Save () {System.out.println ("Save"); }}4.UserController
@ Contrôleur @ requestmapping ("/ intégrer") classe publique UserController {@Autowired Private UserService UserService; @RequestMapping ("/ user") public String SaveUser (@Requestbody @ModelAttribute User u) {System.out.println (u); userService.save (); retourner "bonjour"; }}5. Fichier de configuration de Spring
Créer un fichier de configuration SpringIoc ApplicationContext.xml dans le répertoire SRC
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsdd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "xmlns: util =" http://www.springframework.org/schema/util " xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/context"> < expression = "org.springframework.steretype.controller" /> <context: exclude-filter type = "annotation" expression = "org.springframework.web.bind.annotation.ControllerAdvice" /> </ context: Component-Scan> </ Beans>
Ajouter une configuration dans web.xml
<! - Configurez le SpringIoc -> <ousiner> <écouteur-classe> org.springframework.web.context.contextloderListener </ écouteur-class> </ounerner> <param-value> <param-name> contextConfiglocation </ param-name> <param-value> classpath: applicationContext.xmlL </ param-divalue> </ context-param>
6. Faites une configuration dans SpringMVC pour empêcher SpringMVC et SpringIoc de chevaucher la gestion du même objet
<! - Analyser le package et le sous-package -> <contexte: Component-Scan Base-Package = "Test.Springmvc.Integrate"> <context: include-filter type = "annotation" expression = "org.springframework.StereType.Controller" /> <contexte: include-filter type = "annotation" expression = "org.springframework.web.bind.annotation.ControllerAdvice" /> </ Context: Component-Scan>
1. SpringMVC est développé en fonction de la méthode, et Struts2 est développé en fonction de la classe. SpringMVC mappe l'URL et la méthode dans le contrôleur. Une fois le mappage réussi, SpringMVC génère un objet de gestionnaire, qui ne comprend qu'une méthode. L'exécution de la méthode se termine et les données formelles des paramètres sont détruites. Le développement du contrôleur de SpringMVC est similaire au développement de services Web.
2. SpringMVC peut effectuer le développement de Singleton, et il est recommandé d'utiliser le développement de Singleton. Struts2 reçoit des paramètres à travers les variables membre de la classe. Singleton ne peut pas être utilisé, seuls plusieurs cas peuvent être utilisés.
3. Après les tests réels, Struts2 est lent, car il utilise des étiquettes de jambe de force. Si vous utilisez des jambes de force, il est recommandé d'utiliser JSTL.