5

he creado una asignación en web.xml algo como esto:Controlador de primavera no funciona como debería

<servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/about/*</url-pattern> 
</servlet-mapping> 

En mi controlador Tengo algo como esto:

import org.springframework.stereotype.Controller; 
@Controller 
public class MyController{ 
    @RequestMapping(value="/about/us", method=RequestMethod.GET) 
    public ModelAndView myMethod1(ModelMap model){ 
     //some code 
     return new ModelAndView("aboutus1.jsp",model); 
    } 
    @RequestMapping(value="/about", method=RequestMethod.GET) 
    public ModelAndView myMethod2(ModelMap model){ 
     //some code 
     return new ModelAndView("aboutus2.jsp",model); 
    } 
} 

Y mi despachador-servlet.xml tiene vista resolutor como:

<mvc:annotation-driven/> 
<bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:viewClass="org.springframework.web.servlet.view.JstlView" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp"/> 

Para mi sorpresa: solicitud .../about/us no está llegando a myMethod1 en el controlador. El navegador muestra un error 404. Puse un registrador dentro del método pero no está imprimiendo nada, es decir, no se está ejecutando.
.../about funciona bien! ¿Qué se puede hacer para que la solicitud .../about/us funcione? ¿Alguna sugerencia?

Respuesta

12

Es necesario utilizar @RequestMapping(value="/us", method=RequestMethod.GET) o si tiene que pedir about/about/us

+0

Pero no he mapeado nada en el nivel de clase del controlador. Realmente necesito ? Creo que solo entonces necesito el escritor '/ us' en lugar de'/about/us' y echar un vistazo: '/ about' ya está funcionando! Entonces, ¿por qué no 'sobre/nosotros'. – Atharva

+3

Motivo: Ha asignado **/about/** en web.xml a DispatcherServlet. Por lo tanto, debe asignar solo la parte siguiente **/acerca de **. –

+0

¿**/about ** entra en su método? ¿¿De Verdad?? Debe estar entrando en DispatcherServlet –

-3

yo bien se lo trabaja, esto es lo que he añadido en el despachador-servlet.xml:

<bean 
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
     <property name="alwaysUseFullPath" value="true" /> 
    </bean> 

    <bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <property name="alwaysUseFullPath" value="true" /> 
</bean> 
+1

Esta es una solución alternativa, use la forma en que sugirió Ravi. – dardo

2

Puesto que haya asignado "/ about" en su web.xml, la url que pasará será así www.xyz.com/about/*

como la configuración dice que trabajará para

  1. www.xyz.com/about/about/us
  2. www.xyz.com/about/about

Con el fin de que funcione correctamente o bien utilizar /* en web.xml en lugar de /about

o cambiar el punto final del controlador para

@RequestMapping(value="/us", method=RequestMethod.GET)

@RequestMapping(value="/", method=RequestMethod.GET)

Cuestiones relacionadas