Wie man richtig verwenden Sie mehrere Controller in Spring MVC
Ich bin versucht, 2 Controller mit einem dispatcher-servlet in Spring MVC. Aber habe ich 404 Fehler beim Rendern des views. Der dispatcher ist ziemlich einfach, aus web.xml:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
und mit der folgenden Konfiguration:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
...
<context:component-scan base-package="com.mycompany.azalea" />
<mvc:annotation-driven />
</beans>
Sind die Steuerungen:
package com.mycompany.azalea;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/home")
public class homeController {
@RequestMapping(value = "/")
public String home() {
return "index";
}
}
und
package com.mycompany.azalea;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/data")
public class dataController {
@RequestMapping(value = "/")
public String home() {
return "index";
}
}
und ich bin mit einem ziemlich standard-resolver:
@Configuration
public class AppConfig {
//Resolve logical view names to .jsp resources in the /WEB-INF/views directory
@Bean
ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
Ansichten sind unter WEB-INF/views/home/WEB-INF/views/data/
Jedoch wenn ich versuche eine URL anfordern, wie http://localhost:8080/Azalea/home/
Bekomme ich einen Eintrag in der GlassFish log:
SCHWERER: PWC6117: Datei ".../build/web/Hause/WEB-INF/views/index.jsp" wurde nicht gefunden
statt der erwarteten Antrag für
".../build/web/WEB-INF/views/Hause/index.jsp"
Gleiche Muster für die "/data". Es sieht im wesentlichen wie der Anfrage-mapping eingefügt, in der falschen position in der Anfrage.
Mein Aktuelles umgehen, ändern Sie die Auflösung, um die
resolver.setPrefix("../WEB-INF/views/");
- und Rücksendung folgende von der regler:
public class homeController {
@RequestMapping(value = "/")
public String home() {
return "home/index";
}
}
Aber dies scheint eine suboptimale Lösung. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Vorschläge haben.
InformationsquelleAutor Andreas | 2013-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie hat es fast richtig. Das Präfix hat, absolut zu sein, zu arbeiten, wie Sie es wollen. Das heißt: Die
prefix
für die view-resolver hat eingestellt zu werden als ein absolutes:Und wenn Sie den view-Namen aus der
@RequestMapping
Methoden, die Sie haben, um die Pfade relativ zu Ihremview-resolver
'sprefix
Weg. Also, in derhomeController
haben, sollten Sie wiederhome/index
, und in IhremdataController
haben, sollten Sie wiederdata/index
.InformationsquelleAutor Bhashit Parikh