Question

Je suis en train d'améliorer mon printemps configuration mvc afin de ne pas exiger un nouveau fichier de configuration pour chaque servlet ajouter, mais je suis en cours d'exécution dans des problèmes. Je l'ai essayé d'utiliser ce tutoriel comme point de départ, mais je suis en cours d'exécution dans un problème que je ne peux pas comprendre.

Le problème est que quand je fais un GET à mon servlet, je reviens d'une erreur 404. Voici ma config et un extrait de java représentant d'un contrôleur:

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>

application 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>

application 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 d'une classe de contrôleur (l'un des nombreux, mais ils se ressemblent tous essentiellement comme celui-ci):

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

Quelqu'un peut-il me dire ce que je fais mal? Merci!

Était-ce utile?

La solution

La seule chose hors de propos ici est que vous avez utilisé les mêmes fichiers de configuration de contexte à la fois le contexte webapp racine et votre contexte de servlet. Ceci est presque garanti d'être une mauvaise idée, et se traduira par beaucoup de comportements bizarres. Cela pourrait bien être la cause de votre problème.

Le ContextLoaderListener est configuré avec le contextConfigLocation de <context-param>, et crée et gère le WebApplicationContext racine.

Le ServletDispatcherServlet est configuré avec le contextConfigLocation de <init-param>, et crée et gère le servlet WebApplicationContext.

Le WebApplicationContext racine est le parent de la servlet appcontext, i.e. des haricots dans le WebApplicationContext racine sont visibles pour les haricots dans le servlet WebApplicationContext.

Votre première étape devrait être de séparer ces configurations. Avec les haricots corrects dans les bons endroits (par exemple tous les trucs MVC doit aller dans le contexte de servlet). Ne pas de partager des définitions de haricots entre les deux, il vous reste plus qu'à se confondre et / ou cassé.

Autres conseils

Cela ne répond pas directement à votre question, mais je l'ai toujours trouvé utile pour activer la journalisation de débogage au printemps quand je ne peux pas comprendre ce qui se passe mal.

Voici deux que j'utilise couramment dans mon fichier logging.properties:

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

Avez-vous plus d'un GET RequestMapping dans votre contrôleur, par hasard? S'il y a plus d'un et il y a ambiguïté dans les résoudre à une demande particulière Spring ne correspond pas à l'une des correspondances ambiguës GET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top