Pregunta

Estoy tratando de mejorar mi configuración MVC primavera con el fin de no requerir un nuevo archivo de configuración para cada servlet agrego, pero estoy corriendo en problemas. He intentado usar este tutorial como punto de partida, pero estoy corriendo en un problema que no puedo entender.

El problema es que cuando hago un GET a mi servlet, que regrese un error 404. Aquí está mi config y un fragmento de Java representante de un controlador:

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>

aplicación 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>

Fragmento de una clase controlador (una de muchas, pero todas se ven esencialmente como este):

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

Puede alguien decirme lo que estoy haciendo mal? Gracias!

¿Fue útil?

Solución

La única cosa fuera de lugar aquí es que usted ha utilizado los mismos archivos de configuración contexto tanto para el contexto webapp raíz y su contexto servlet. Esto es casi seguro que sea una mala idea, y dará lugar a un montón de comportamiento extraño. Esto bien puede ser la causa de su problema.

El ContextLoaderListener se configura con el contextConfigLocation <context-param>, y crea y gestiona el WebApplicationContext raíz.

El ServletDispatcherServlet se configura con el contextConfigLocation <init-param>, y crea y gestiona el WebApplicationContext servlet.

El WebApplicationContext raíz es el padre de la appcontext servlet, es decir los frijoles en la WebApplicationContext raíz son visibles para los frijoles en la WebApplicationContext servlet.

Su primer paso debe ser separar esas configuraciones. Con los granos correctas en los lugares correctos (por ejemplo, todas las cosas MVC tiene que ir en el contexto de servlet). Hacer no Definiciones frijol compartir entre los dos, sólo va a prestarse a confusión y / o roto.

Otros consejos

Esto no responde a su pregunta directamente, pero siempre he encontrado que es útil para habilitar el registro de depuración en la primavera, cuando no puedo averiguar lo que está mal.

A continuación se presentan dos que habitualmente utilizo en mi archivo logging.properties:

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

¿Tiene más de un GET RequestMapping en su controlador, por casualidad? Si hay más de uno y no hay ambigüedad en la resolución de ellos a una solicitud concreta de primavera no se asigna a ninguna de las asignaciones ambiguas GET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top