Spring MVC: comment créer un contrôleur par défaut pour la page d’index?

J’essaie de faire l’une de ces applications standard du spring mvc hello world mais avec la torsion que je voudrais mapper le contrôleur à la racine. (par exemple: http://numberformat.wordpress.com/2009/09/02/hello-world-spring-mvc-with-annotations/ ) Donc, la seule différence réelle est qu’ils mappent l’hôte \ appname \ quelque chose et Je voudrais le mapper sur host \ appname.

J’ai placé mon index.jsp dans src \ main \ webapp \ jsp et l’ai mappé dans le fichier web.xml comme fichier de bienvenue. J’ai essayé:

@Controller("loginController") public class LoginController{ @RequestMapping("/") public Ssortingng homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){ System.out.println("blablabla2"); model.addAtsortingbute("sigh", "lesigh"); return "index"; } 

En tant que contrôleur, je ne vois rien apparaître dans la console de mon tomcat. Est-ce que quelqu’un sait où je me trompe?

Mon web.xml:

     /jsp/index.jsp   contextConfigLocation /WEB-INF/mvc-dispatcher-servlet.xml   springweb org.springframework.web.servlet.DispatcherServlet 1   springweb /   

Le mvc-dispatcher-servlet.xml:

           

J’utilise Spring 3.0.5.release

Ou est-ce que ce n’est pas possible et dois-je remettre mon index.jsp à la racine du web-inf et placer une redirection vers quelque part dans mon fichier jsp pour que le contrôleur le récupère?

J’ai eu le même problème, même après avoir suivi la configuration de Sinhue, mais je l’ai résolu .

Le problème était que quelque chose (Tomcat?) Était transféré de “/” à “/index.jsp” lorsque le fichier index.jsp se trouvait dans mon répertoire WebContent. Lorsque j’ai supprimé cela, la demande n’a plus été transmise.

Ce que j’ai fait pour diagnostiquer le problème consistait à créer un gestionnaire de requêtes catch-all et à imprimer le chemin du servlet vers la console. Cela m’a montré que même si la demande que je faisais était pour http: // localhost / myapp / , le chemin du servlet était remplacé par “/index.html”. Je m’attendais à ce qu’il soit “/”.

 @RequestMapping("*") public Ssortingng hello(HttpServletRequest request) { System.out.println(request.getServletPath()); return "hello"; } 

Donc, en résumé, les étapes à suivre sont les suivantes:

  1. Dans votre application de mappage de servlet, utilisez /
  2. Dans votre contrôleur, utilisez RequestMapping("/")
  3. Débarrassez-vous de bienvenue-file-list dans web.xml
  4. Ne pas avoir de fichiers dans WebContent qui seraient considérés comme des pages par défaut (index.html, index.jsp, default.html, etc.)

J’espère que cela t’aides.

La redirection est une option. Une chose que vous pouvez essayer est de créer une page d’index très simple que vous placez à la racine du WAR qui ne fait rien d’autre que de redirect vers votre contrôleur comme

 < %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  

Ensuite, vous mappez votre contrôleur avec cette URL avec quelque chose comme

 @Controller("loginController") @RequestMapping(value = "/welcome.html") public class LoginController{ ... } 

Enfin, dans web.xml, pour que votre (nouvel) index JSP soit accessible, déclarez

  index.jsp  

Nous pouvons simplement mapper une méthode Controller pour la vue par défaut. Par exemple, nous avons un index.html comme page par défaut.

 @RequestMapping(value = "/", method = GET) public Ssortingng index() { return "index"; } 

une fois cela fait, nous pouvons accéder à la page avec le contexte d’application par défaut.

 Eg http://localhost:8080/myapp 

Cela fonctionne pour moi, mais quelques différences:

  • Je n’ai pas de liste de fichiers de bienvenue dans web.xml
  • Je n’ai pas de @RequestMapping au niveau de la classe.
  • Et au niveau de la méthode, juste @RequestMapping (“/”)

Je sais que ce ne sont pas de grandes différences, mais je suis à peu près sûr (je ne suis pas au travail maintenant), c’est ma configuration et cela fonctionne avec Spring MVC 3.0.5.

Encore une chose. Vous ne montrez pas votre configuration de répartiteur dans web.xml, mais vous avez peut-être une certaine précision. Cela doit être quelque chose comme ça:

  myServletName /  

Si ce n’est pas votre cas, vous aurez besoin d’un filtre de réécriture d’URL ou essayez la solution de redirection.

EDIT: En répondant à votre question, la configuration de mon résolveur de vue est un peu différente aussi:

     

Il peut être résolu de manière plus simple: dans web.xml

  dispatcher *.htm   index.htm  

Après cela, utilisez tous les contrôleurs que vous souhaitez traiter avec index.htm avec @RequestMapping (“index.htm”). Ou utilisez simplement le contrôleur d’index

    indexController     

Il suffit de mettre une autre entrée dans votre fichier xml printanier, à savoir mvc-dispatcher-servlet.xml

  

Après l’avoir placé dans votre fichier XML, placez votre fichier de vue ou jsp par défaut dans votre dossier JSP personnalisé, comme vous l’avez mentionné dans le mvc-dispatcher-servlet.xml .

changer d’ index avec votre nom jsp.

Un moyen d’y parvenir est de mapper votre fichier de bienvenue sur le chemin de demande de votre contrôleur dans le fichier web.xml :

[web.xml]

   home   

[LoginController.java]

 @Controller("loginController") public class LoginController{ @RequestMapping("/home") public Ssortingng homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){ System.out.println("blablabla2"); model.addAtsortingbute("sigh", "lesigh"); return "index"; } 

La solution que j’utilise dans mes applications Web SpringMVC consiste à créer une classe DefaultController simple comme suit: –

 @Controller public class DefaultController { private final Ssortingng redirect; public DefaultController(Ssortingng redirect) { this.redirect = redirect; } @RequestMapping(value = "/") public ModelAndView redirectToMainPage() { return new ModelAndView("redirect:/" + redirect); } } 

La redirection peut être injectée en utilisant la configuration de ressort suivante: –

    

Le ${default.redirect:loginController} sera par défaut loginController mais peut être modifié en insérant default.redirect=something_else dans un fichier de propriétés de spring / en définissant une variable d’environnement, etc.

Comme @Mike l’a mentionné plus haut, j’ai aussi: –

  • Débarrassez-vous de la section ... du fichier web.xml .
  • Ne pas avoir de fichiers dans WebContent qui seraient considérés comme des pages par défaut ( index.html , index.jsp , default.html , etc.)

Cette solution permet à Spring de s’inquiéter davantage des redirections qui peuvent ou non être ce que vous voulez.