5

我已經創建了在web.xml東西一個這樣的映射:春季控制器的URL請求映射工作不正常

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

在我的控制器我有這樣的事情:

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

和我調度員servlet.xml中具有視圖解析器,如:

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

出乎我的意料:請求.../about/us沒有到達控制器中的myMethod1。瀏覽器顯示404錯誤。我在方法內部放置了一個記錄器,但它不打印任何東西,也就是說,它沒有被執行。
.../about工作正常!可以做什麼使.../about/us請求工作?有什麼建議麼?

回答

12

您需要使用@RequestMapping(value="/us", method=RequestMethod.GET)或您需要申請about/about/us

+0

但我沒有在控制器類級別上映射任何事物。我需要嗎?我認爲只有這樣我才需要編寫'/ us'而不是'/ about/us',並看看:'/ about'已經在工作了!那麼爲什麼不「關於/我們」。 – Atharva

+3

原因: 您已將web.xml中的**/about/**映射到DispatcherServlet。所以,你只需要映射下面的**/about **部分。 –

+0

做** /關於**進入你的方法??真??它必須進入DispatcherServlet –

-3

好我得到的東西的工作,這裏有事情,我在調度-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

這是一個黑客解決方法,使用Ravi建議的方式。 – dardo

2

既然你已經映射「/關於」在web.xml,它會通過URL將是這樣www.xyz.com/about/*

由於配置稱將

工作10
  1. www.xyz.com/about/about/us
  2. www.xyz.com/about/about

爲了正常工作,無論是在web.xml中使用 /*,而不是​​

或控制器的端點改變

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

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