Frage

Ich versuche, meine Feder mvc Konfiguration zu verbessern, um nicht eine neue Konfigurationsdatei für jede Servlet benötige ich hinzufügen, aber ich laufe in Probleme. Ich habe versucht mit dieses Tutorial als Ausgangspunkt, aber ich laufe in ein Problem, dass ich nicht herausfinden kann.

Das Problem ist, dass wenn ich ein GET mein Servlet tun, ich habe einen Fehler 404 zurück. Hier sind meine Config und ein Vertreter Java Schnipsel aus einem Controller:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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">
    <display-name>SightLogix Coordination System</display-name>

    <description>SightLogix Coordination System</description>

    <servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                    /WEB-INF/application-context.xml
                    /WEB-INF/application-security.xml
                </param-value>
            </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/slcs/*</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/application-context.xml
            /WEB-INF/application-security.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
                org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

applikations context.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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-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/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd"

    default-init-method="init" default-destroy-method="destroy">

    <mvc:annotation-driven />

    <context:component-scan base-package="top.level" />
</beans>

applikations security.xml:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <http>
        <intercept-url pattern="/**" access="ROLE_MANAGER" requires-channel="https" />
        <http-basic />
    </http>

    <authentication-manager>
        <authentication-provider user-service-ref="myUserDetailsService">
            <password-encoder hash="sha"/>
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="myUserDetailsService"
        class="path.to.my.UserDetailsServiceImpl">
    </beans:bean>

</beans:beans>

Snippet einer Controller-Klasse (einer von vielen, aber sie sehen alle im Wesentlichen wie folgt):

@Controller
@RequestMapping("/foo.xml")
public class FooController
{       
    @RequestMapping(method=RequestMethod.GET)
    public void handleGET(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        ...

Kann mir jemand sagen, was ich falsch mache? Dank!

War es hilfreich?

Lösung

Das einzige, was hier fehl am Platz ist, dass Sie beide die gleichen Kontext Konfigurationsdateien für den Kontext root Webapp verwendet haben und Ihr Servlet-Kontext. Dies ist fast garantiert eine schlechte Idee zu sein, und in einer Menge seltsame Verhalten führen. Das kann gut sein, die Ursache des Problems.

Die ContextLoaderListener wird mit dem contextConfigLocation <context-param> konfiguriert, und erzeugt und verwaltet die Wurzel WebApplicationContext.

Die ServletDispatcherServlet mit dem contextConfigLocation <init-param> konfiguriert und erstellt und verwaltet das Servlet WebApplicationContext.

Die Wurzel WebApplicationContext ist die Mutter des Servlets appcontext, d.h irgendwelche Bohnen in der Wurzel WebApplicationContext auf diese Bohnen in dem Servlet WebApplicationContext sichtbar sind.

Ihr erster Schritt soll diese Konfigurationen zu trennen sein. Mit den richtigen Bohnen in den richtigen Stellen (zum Beispiel all MVC Zeug muss im Servletkontext gehen). Haben nicht Aktie Bean Definitionen zwischen den beiden, es wird nur erhalten verwirrend und / oder gebrochen.

Andere Tipps

Dies beantwortet Ihre Frage nicht direkt, aber ich habe immer gefunden, es hilfreich die Debug-Protokollierung im Frühjahr zu aktivieren, wenn ich nicht herausfinden kann, was schief läuft.

Im Folgenden sind zwei, dass ich häufig in meiner logging.properties Datei:

org.springframework.beans.factory.support.level=FINEST
org.springframework.security.level=FINEST

Haben Sie mehr als eine GET RequestMapping in Ihrem Controller durch eine Chance? Wenn es mehr als ein, und es gibt in Mehrdeutigkeit sie auf eine spezielle Anforderung Lösung Frühling nicht zu einem der mehrdeutigen GET-Mappings mappen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top