J'essaie de faire l'une de ces applications standard printemps mvc hello world, mais avec le twist 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 vraie différence est qu'ils le cartographient to Host\appname\quelque chose et je voudrais mapper à Host\appname.
J'ai placé mon index.jsp dans src\main\webapp\jsp et l'a mappé dans le fichier web.xml en tant que fichier de bienvenue . J'ai essayé:
@Controller("loginController")
public class LoginController{
@RequestMapping("/")
public String homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){
System.out.println("blablabla2");
model.addAttribute("sigh", "lesigh");
return "index";
}
En tant que contrôleur mais 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:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://Java.Sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!-- Index -->
<welcome-file-list>
<welcome-file>/jsp/index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<servlet>
<servlet-name>springweb</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springweb</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Le fichier mvc-dispatcher-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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="de.claude.test.*" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
J'utilise Spring 3.0.5.release
Ou n'est-ce pas possible et dois-je replacer mon index.jsp à la racine de l'info-Web et placer une redirection vers un emplacement situé dans mon jsp afin que le contrôleur l'utilise?
J'ai eu le même problème, même après avoir suivi l'installation de Sinhue, mais je l'ai résolu.
Le problème était que quelque chose (Tomcat?) Transférait de "/" à "/index.jsp" lorsque le fichier index.jsp se trouvait dans mon répertoire WebContent. Quand j'ai enlevé cela, la demande n'a plus été transmise.
Ce que j'ai fait pour diagnostiquer le problème a été de créer un gestionnaire de requête fourre-tout et d'imprimer le chemin d'accès du servlet à la console. Cela m'a montré que même si ma demande concernait http: // localhost/myapp/ , le chemin d'accès à la servlet était remplacé par "/index.html". Je m'attendais à ce que ce soit "/".
@RequestMapping("*")
public String hello(HttpServletRequest request) {
System.out.println(request.getServletPath());
return "hello";
}
Donc, en résumé, les étapes à suivre sont les suivantes:
<url-pattern>/</url-pattern>
RequestMapping("/")
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 fichier WAR.
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
<c:redirect url="/welcome.html"/>
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 rendre votre (nouveau) index JSP accessible, déclarez
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Nous pouvons simplement mapper une méthode Controller pour la vue par défaut. Par exemple, nous avons un fichier index.html comme page par défaut.
@RequestMapping(value = "/", method = GET)
public String index() {
return "index";
}
une fois cela fait, nous pouvons accéder à la page avec le contexte d'application par défaut.
E.g http://localhost:8080/myapp
Cela fonctionne pour moi, mais quelques différences:
Je sais que ce ne sont pas de grandes différences, mais je suis assez sûr (je ne suis pas au travail maintenant), c'est ma configuration et cela fonctionne avec Spring MVC 3.0.5.
Une dernière chose. Vous ne montrez pas la configuration de votre distributeur dans web.xml, mais vous avez peut-être un preffixe. Ce doit être quelque chose comme ça:
<servlet-mapping>
<servlet-name>myServletName</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
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: Répondant à votre question, ma configuration du résolveur de vues est également un peu différente:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
Il peut être résolu de manière plus simple: Dans web.xml
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
Après cela, utilisez les contrôleurs que vous voulez traiter avec index.htm avec @RequestMapping ("index.htm"). Ou utilisez simplement le contrôleur d'index
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
</props>
</property>
<bean name="indexController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
</bean>
Il suffit de mettre une entrée supplémentaire dans votre fichier XML print i.e.mvc-dispatcher-servlet.xml
<mvc:view-controller path="/" view-name="index"/>
Après avoir placé ceci dans votre fichier xml, placez votre vue par défaut ou votre fichier jsp dans votre dossier JSP personnalisé, comme indiqué dans le fichier mvc-dispatcher-servlet.xml
.
changez index
avec votre nom jsp.
Une façon 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]
<web-app ...
<!-- Index -->
<welcome-file-list>
<welcome-file>home</welcome-file>
</welcome-file-list>
</web-app>
[LoginController.Java]
@Controller("loginController")
public class LoginController{
@RequestMapping("/home")
public String homepage2(ModelMap model, HttpServletRequest request, HttpServletResponse response){
System.out.println("blablabla2");
model.addAttribute("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 String redirect;
public DefaultController(String 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: -
<bean class="com.adoreboard.farfisa.controller.DefaultController">
<constructor-arg name="redirect" value="${default.redirect:loginController}"/>
</bean>
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 ressort/en définissant une variable d'environnement, etc.
Comme @Mike a mentionné ci-dessus, j'ai aussi: -
<welcome-file-list> ... </welcome-file-list>
dans le fichier web.xml
.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 aimez.