Comment puis-je carte contrôleur Spring MVC pour un uri avec et sans barre oblique?
J'ai un Printemps Contrôleur avec plusieurs RequestMappings pour différents Uri. Ma servlet est "l'interface utilisateur". Le servlet de l'URI de base ne fonctionne qu'avec une barre oblique. Je voudrais que mes utilisateurs de ne pas avoir à entrer le slash.
Cette URI travaux:
http://localhost/myapp/ui/
Celle-ci n':
http://localhost/myapp/ui
Il me donne un code d'État HTTP 404.
La servlet et de la cartographie de mon web.xml sont:
<servlet>
<servlet-name>ui</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ui</servlet-name>
<url-pattern>/ui/*</url-pattern>
</servlet-mapping>
Mon Contrôleur:
@Controller
public class UiRootController {
@RequestMapping(value={"","/"})
public ModelAndView mainPage() {
DataModel model = initModel();
model.setView("intro");
return new ModelAndView("main", "model", model);
}
@RequestMapping(value={"/other"})
public ModelAndView otherPage() {
DataModel model = initModel();
model.setView("otherPage");
return new ModelAndView("other", "model", model);
}
}
Changer votre modèle d'url de votre site web xml à partir d' /ui/* /ui
Je devrais avoir inclus les autres RequestMappings. (Voir edit) Modifiant le schéma d' /ui/* /ui brise toutes les mappages et je reçois 404 pour les Uri /ui /ui/ et /ui/autres
Ce contexte est la webapp déployé dans Tomcat? Votre demande est appelé
il est déployé dans un autre contexte. Dans mon exemple, j'utilise "myapp". Suis-je tort de penser que cela devrait fonctionner?
Non, il devrait certainement fonctionner comme prévu. La version de Printemps utilisez-vous? Aussi, comment êtes-vous de la configuration de Printemps, quelque chose comme
Je devrais avoir inclus les autres RequestMappings. (Voir edit) Modifiant le schéma d' /ui/* /ui brise toutes les mappages et je reçois 404 pour les Uri /ui /ui/ et /ui/autres
Ce contexte est la webapp déployé dans Tomcat? Votre demande est appelé
ROOT.war
ou <another_name>.war
ou l'application n'existe pas dans un sous-répertoire webapps?il est déployé dans un autre contexte. Dans mon exemple, j'utilise "myapp". Suis-je tort de penser que cela devrait fonctionner?
Non, il devrait certainement fonctionner comme prévu. La version de Printemps utilisez-vous? Aussi, comment êtes-vous de la configuration de Printemps, quelque chose comme
<context:component-scan base-package="..."/>
?OriginalL'auteur km1 | 2012-08-20
Vous devez vous connecter pour publier un commentaire.
Si votre application web est présente dans le serveur web du répertoire webapps, par exemple
webapps/myapp/
puis la racine de cette application de contexte peut être consulté à l'http://localhost:8080/myapp/
en supposant que le port par défaut de Tomcat. Cela devrait fonctionner avec ou sans le slash, je pense que par défaut - c'est certainement le cas dans la Jetée de v8.1.5Une fois que vous frappez
/myapp
le Printemps DispatcherServlet prend le dessus, les demandes d'acheminement de la<servlet-name>
comme configuré dans votreweb.xml
, qui dans votre cas est/ui/*
.La DispatcherServlet ensuite les routes toutes les demandes de
http://localhost/myapp/ui/
à la@Controller
s.Dans le Contrôleur lui-même, vous pouvez utiliser
@RequestMapping(value = "/*")
pour la mainPage() méthode, qui se traduira dans les deuxhttp://localhost/myapp/ui/
ethttp://localhost/myapp/ui
être acheminée vers le mainPage().Remarque: vous devez également être à l'aide de Printemps >= v3.0.3 en raison de SPR-7064
Pour être complet, voici les fichiers que j'ai testé avec:
src/main/java/controllers/UIRootController.java
WEB-INF/web.xml
WEB-INF/ui-servlet.xml
Et aussi 2 fichiers JSP à
WEB-INF/views/index.jsp
etWEB-INF/views/other.jsp
.Résultat:
http://localhost/myapp/
-> inscription à l'annuairehttp://localhost/myapp/ui
ethttp://localhost/myapp/ui/
-> index.jsphttp://localhost/myapp/ui/other
ethttp://localhost/myapp/ui/other/
-> autres.jspEspérons que cette aide!
OriginalL'auteur andyb
À l'aide de Springboot, mon application pourrait répondre à la fois avec et sans barre oblique par paramètre @RequestMapping "valeur d'option" à la chaîne vide:
OriginalL'auteur user1767316
Pour Java configuration
De configuration XML
Cheers!
OriginalL'auteur dheeran
J'ai finalement ajouté un nouveau RequestMapping rediriger l' /ui demandes /ui/.
Également supprimé la chaîne vide cartographie à partir de la page d'accueil du RequestMapping.
Pas de modifier nécessaire pour web.xml.
À la fin quelque chose comme ça dans mon controller:
Maintenant l'URL
http://myhost/myapp/ui
redirige vershttp://myhost/myapp/ui/
et puis mon contrôleur affiche la page d'introduction.OriginalL'auteur km1
Une autre solution que j'ai trouvé est de ne pas donner à la demande de la cartographie pour mainPage() valeur:
OriginalL'auteur Patrick
essayez d'ajouter
@RequestMapping(method = RequestMethod.GET)
public String list() {
return "redirect:/strategy/list";
}
le résultat:
** crédits:
Avancé @RequestMapping astuces – Contrôleur de racine et de Modèle URI
OriginalL'auteur SaganTheBest