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

Schreibe einen Kommentar