5

ho creato una mappatura in web.xml qualcosa di simile:primavera controller non funziona come previsto

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

Nel mio controller ho qualcosa di simile:

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); 
    } 
} 

E il mio dispatcher-servlet.xml ha vista resolver come:

<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"/> 

Con mia grande sorpresa: richiesta .../about/us non sta raggiungendo myMethod1 nel controller. Il browser mostra l'errore 404. Inserisco un logger nel metodo ma non stampa nulla, cioè non viene eseguito.
.../about funziona bene! Cosa può essere fatto per rendere operativa la richiesta .../about/us? Eventuali suggerimenti?

risposta

12

È necessario utilizzare @RequestMapping(value="/us", method=RequestMethod.GET) o avete bisogno di richiedere about/about/us

+0

Ma non ho mappato nulla sul livello di classe del controller. Ho bisogno di? Penso che solo allora ho bisogno di scrivere '/ us' invece di'/about/us' e dare un'occhiata: '/ about' sta già lavorando! Allora perché non "su/noi". – Atharva

+3

Il motivo: Hai mappato **/about/** in web.xml su DispatcherServlet. Pertanto, è necessario mappare solo la parte che segue **/circa **. –

+0

Fai **/about ** entrando nel tuo metodo ?? Veramente?? Deve essere in DispatcherServlet –

-3

Va bene ho preso la cosa a lavorare, qui ci sono le cose che ho aggiunto nel dispatcher-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

Questa è una soluzione alternativa, usa il modo suggerito da Ravi. – dardo

2

Dal momento che hai mappato "/ about" nel web.xml, l'url passerà sarà così www.xyz.com/about/*

come la configurazione dice che funzionerà per

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

Per funzionare correttamente usare sia /* in web.xml anziché /about

o cambiare punto finale del controller per

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

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

Problemi correlati