Sujet de saut simple
Je recommande personnellement de pratiquer à nouveau le processus de construction. Si vous vous sentez gênant, vous pouvez copier directement le projet précédent, mais vous devez modifier un peu d'informations dans pom.xml.
<GroupId> com.hanpang.springmvc </prôdId> <ArtifActid> SpringMvc-Demo01 </retifactid> <DERSE> 0.0.1-Snapshot </DERNIERS>
1. Classes de configuration et classes de chargement
package com.hanpang.config; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import; org.springframework.web.servlet.config.annotation.enablewebmvc; @ configuration @ activerwebmvc @ ComponentsCan (basepackages = "com.hanpang. **. web") public class webconfig {} Package com.hanpang.config; import org.springframework.web.servlet.support.abstractannotationConfigDispatcherServletinItializer; public class webinitializer étend abstrAttannotationConfigDispatreServletInitializer {@Override protégée [] {WebConfig.class}; } @Override Protected class <?> [] GetServletConfigClasses () {return null; } @Override Protected String [] getServletMappings () {return new String [] {"/"}; }}2. Javaweb Stage Jump Méthode
Veuillez noter les paramètres formels dans la méthode SpringMVC, le cadre termine l'opération d'instanciation pour nous.
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletReSponse; import org.springframework.SterreTeotyTy org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandView; @ contrôleur // Dites-le qu'il s'agit d'une classe publique de contrôleur Demo01Controller {@RequestMapping (path = "/ test01") public ModelView Way Jump_request Forward (hTTPSerrest Request, HttpServletResponse Response) lève ServletException, ioException {System.out.println ("Les paramètres formels sont instanciés par défaut"); request.getRequestDispatcher ("/ web-inf / jsp / démo01.jsp"). Forward (request, réponse); retourner null; } @RequestMapping (path = "/ test02") MODÈLE PUBLIQUE RÉSERVAGE TRADITIONNELLE JUMP_REDIRECT (HttpServletRequest Request, HttpServletResponse Response) lève ioException {System.out.println ("Les paramètres formels sont instanciés par défaut"); Response.SendRedirect (request.getContextPath () + "/ View / Result01.jsp"); retourner null; }} Remarque: nous n'utilisons presque plus cette méthode, juste une démonstration et une revue simples, au moins nous pouvons utiliser cette méthode pour obtenir l'API Servlet !!!
3. Démontrer comment le contrôleur saute en jsp
À la fin de l'exemple, nous ajouterons l'analyseur de vue JSP. Au début, nous suivrons toujours la méthode traditionnelle et aurons un processus étape par étape.
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletReSponse; import org.springframework.SterreTeotyTy org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandView; @ contrôleur // dites-le qu'il s'agit d'une classe publique de contrôleur Demo01Controller {@RequestMapping (path = "/ test03") public ModelView Par défaut, il est demandé en aventill ModelAndView (); mav.setViewName ("/ web-inf / jsp / démo01.jsp"); retourner mav; } @RequestMapping (path = "/ test04") public ModelandView set la méthode de redirection () {ModelandView mav = new ModelAndView (); mav.setViewName ("redirect: /view/result01.jsp"); // ou //mav.setViewname(urlbasedViewResolver.redirect_url_prefix+"/view/result01.jsp "); retourner mav; }} Il ressemble à la méthode de la scène Web Java, mais un préfixe simple est défini pendant la redirection.
4. Démontrer comment le contrôleur saute au contrôleur
Similaire à l'appel d'un servlet à un autre
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletReSponse; import org.springframework.SterreTeotyTy org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandView; @ contrôleur // te dire qu'il s'agit d'une classe publique de contrôleur Demo01Controller {@RequestMapping (path = "/ test05") Public ModelView définir directement le mapping path () {ModeLand View mAV = newed;); mav.setViewName ("/ test03"); retourner mav; } @RequestMapping (path = "/ test06") public ModelandView set redirection () {ModelandView mav = new ModelAndView (); mav.setViewName ("redirect: / test04"); retourner mav; }} 5. Ajouter un analyseur JSP View
Au cours de la démonstration ci-dessus, nous avons constaté que le SetViewName dans ModelandView est utilisé pour terminer le saut. Les données réalisées ici sont une chaîne, mais la méthode de traitement est différente. Lorsque le chemin de saut est préfixé Redirection:, la méthode de traitement est différente.
De plus, si nous avons plusieurs chaînes similaires à /web-inf/jsp/demo01.jsp, nous constatons qu'il existe de nombreuses pièces publiques. SpringMVC nous fournit une classe spécialisée dans la gestion des demandes de contrôleur de transfert des pages JSP.
Veuillez noter ma description: si vous constatez que la chaîne que vous avez passée n'a pas d'identificateur de préfixe, alors par défaut, utilisez l'analyseur de vue JSP de configuration pour le gérer et terminer l'opération de transfert de demande
Remarque: Configurez la classe de configuration du noyau
package com.hanpang.config; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentScan; import org.springframework.contect.annotation.configuration; import org.springframework.web.servlet.Viewresolver; import; org.springframework.web.servlet.config.annotation.enablewebmvc; import org.springframework.web.servlet.view.internalResourceViewResolver; org.springframework.web.servlet.view.jstlview; @ configuration @ enablewebmvc @ composantscan (basepackages = "com.hanpang. **. web") webconfig {@ bean // instantiate publicweResolver = newswearcourcewereViewReReReReVeReSolver jspViewSViewResolver = new jspViewResolver.SetViewClass (jstlView.class); // Springmvc prend en charge JSTL TAG JSPVIEWRESOLVER.SetPrefix ("/ web-inf /"); jspViewResolver.SetSuffix (". jsp"); return jspViewResolver; }} ** Remarque: ** Veuillez faire attention à l'annotation sur la méthode @Bean
La méthode est équivalente au code en XML comme suit
<bean id = "jspresourceViewResolver"> <propriété name = "prefix" value = "/ web-inf /" /> <propriété name = "suffix" value = ". jsp" /> <propriété name = "Viewclass" value = "org.springframework.web.servlet.view.jstlview =" org.springframework.web.servlet.view.jstlview "/> </ bean>
Améliorer le code JSP de saut de contrôleur
Cet analyseur de vue ne peut transmettre que les demandes JSP et n'est pas valide pour les redirections. Veuillez prêter attention au contenu du commentaire du code
@RequestMapping (path = "/ test03") public ModelAndView Par défaut, il est demandé enduring () {ModelandView mav = new ModelAndView (); //mav.setViewname("/web-inf/jsp/demo01.jsp "); // Advanced: par défaut, il sera géré à l'aide de l'analyseur JSP View, // Prefix + "JSP / Demo01" + suffix => /web-inf/jsp/demo01.jsp mav.setViewName ("jsp / demo01"); // J'ai constaté que la chaîne n'a pas de rendement de modification de préfixe mav; } @RequestMapping (path = "/ test04") public ModelandView set la méthode de redirection () {ModelandView mav = new ModelAndView (); // l'analyseur invalide la redirection mav.setViewName ("redirect: /view/result01.jsp"); retourner mav; } Améliorer le code du contrôleur de saut de contrôleur
@RequestMapping (path = "/ test05") public ModelandView définit directement le mappage path () {ModelandView mav = new ModelAndView (); mav.setViewName ("/ test03"); retourner mav;}Après avoir configuré l'analyseur JSP View, testez à nouveau le code ci-dessus et consultez les résultats d'accès avec surprise.
Il est conforme à ce que nous avons dit avant "/ test03" est une chaîne qui sera traitée par défaut à l'aide de l'analyseur de vue JSP. Alors, comment l'améliorer?
Vous pouvez définir le préfixe "en avant:", et le code est amélioré comme suit:
@RequestMapping (path = "/ test05") public ModelandView définit directement le mappage path () {ModelandView mav = new ModelAndView (); mav.setViewName ("Forward: / test03"); // ou //mav.setViewname(urlbasedViewResolver.forward_url_prefix+"/test03 "); retourner mav;} Lorsque la chaîne est modifiée avec Forward:, la situation de traitement change pour convertir de la demande de contrôleur en un autre contrôleur. Si la redirection est effectuée, le code est le suivant:
@RequestMapping (path = "/ test06") public ModelandView set redirect () {ModelandView mav = new ModelAndView (); mav.setViewName ("redirect: / test04"); retourner mav;} 6.InternalResourceViewResolver Annexe
InternalResourceViewResolver: Il s'agit d'une sous-classe de UrlBasedViewResolver, il prend donc en charge toutes les fonctionnalités prises en charge par UrlBasedViewResolver.
Dans les applications pratiques, InternalResourceViewResolver est également le résolveur de vue le plus utilisé. Alors, quelles sont les caractéristiques uniques de InternalResourceViewResolver?
D'un point de vue littéral, nous pouvons interpréter InternalResourceViewResolver en tant que résolveur de vue de ressources interne. Il s'agit d'une caractéristique de InternalResourceViewResolver.
InternalResourceViewResolver résoudra les noms de vue retournés dans les objets InternalResourceView. InternalResourceView stockera les attributs du modèle renvoyés par la méthode du processeur de contrôleur dans les attributs de demande correspondants, puis redirigez la demande vers l'avant vers l'URL cible du côté serveur via RequestDispatcher.
Par exemple, dans InternalResourceViewResolver, prefix = / web-inf /, suffix = .jsp est défini dans InternalResourceViewResolver, puis le nom de vue renvoyé par la méthode du processeur de contrôleur demandé est test. À l'heure actuelle, InternalResourceViewResolver va analyser le test dans un objet InternalResourceView, stocker d'abord les attributs du modèle renvoyé dans l'attribut HTTPServletRequest correspondant, puis utilisez RequestDispatcher pour transférer la demande à /web-inf/test.jsp du côté serveur. Il s'agit d'une caractéristique très importante de InternalResourceViewResolver. Nous savons tous que le contenu stocké dans / web-inf / ne peut pas être directement demandé via la demande de demande. Pour des raisons de sécurité, nous placons généralement le fichier JSP dans le répertoire Web-Inf, et la façon dont InternalResourceView saute du côté du serveur peut bien résoudre ce problème. Vous trouverez ci-dessous une définition d'un internalResourceViewResolver. Selon cette définition, lorsque le nom de vue logique renvoyé est test, InternalResourceViewResolver ajoutera un préfixe et un suffixe défini, formez "/web-inf/test.jsp", puis l'utilisera comme URL InternalResourceView pour créer un nouvel objet InternalResourceView.
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.