5

Ich habe eine Zuordnung in web.xml etwas wie folgt erstellt:Frühlings-Controller der URL-Anfrage Mapping funktioniert nicht wie erwartet

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

In meinem Controller ich so etwas wie dieses:

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

Und mein Dispatcher-servlet.xml hat Ansicht Resolver wie:

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

zu meiner Überraschung: Anfrage .../about/us erreicht im Controller nicht myMethod1. Der Browser zeigt 404 Fehler an. Ich habe einen Logger in die Methode eingefügt, aber es wird nichts gedruckt, dh es wird nicht ausgeführt.
.../about funktioniert gut! Was kann getan werden, um .../about/us Anfrage Arbeit zu machen? Irgendwelche Vorschläge?

Antwort

12

Sie müssen @RequestMapping(value="/us", method=RequestMethod.GET) verwenden, oder Sie brauchen about/about/us

+0

Aber ich habe keine Sache auf der Ebene der Controller-Klasse zugeordnet. Muss ich ? Ich denke nur dann muss ich '/ us' schreiben statt'/about/us' und guck mal: '/ about' funktioniert schon! Dann warum nicht über uns. – Atharva

+3

Der Grund: Sie haben **/about/** in web.xml dem DispatcherServlet zugeordnet. Sie müssen also nur einen Teil nach **/über ** abbilden. –

+0

Do **/about ** kommt in Ihre Methode? Ja wirklich?? Es muss in DispatcherServlet –

-3

Okay, ich habe die Sache arbeiten zu verlangen, hier sind Dinge, die ich in der Dispatcher-servlet.xml hinzugefügt:

<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

Dies ist ein Hack Workaround, verwenden Sie die Art, wie Ravi vorgeschlagen. – dardo

2

Da Sie kartiert „/ about“ in Ihrem web.xml, die uRL es wie diese www.xyz.com/about/* passieren

wie sie Ihre Konfiguration sagt sein wird es für

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

Um richtig zu arbeiten entweder /* in web.xml anstelle von /about

oder Endpunkt der Controller ändern

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

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

Verwandte Themen