2016-10-20 4 views
0

첫 번째 URL로 이동하면 컨트롤러에서 내 home() 메서드를 호출하지만 두 번째 url로 이동하면 내 homeTest() 메서드가 호출되지 않습니다. 왜 그런가요?스프링 mvc 서블릿 url이 올바르게 매핑되지 않았습니다.

404 오류가 발생합니다.

http://localhost:9083/MYAPP/foo  ------ first url 
http://localhost:9083/MYAPP/foo/bar ------ second url 

web.xml을

<servlet> 
     <servlet-name>springServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
     <servlet-name>springServlet</servlet-name> 
     <url-pattern>/foo/*</url-pattern> 
</servlet-mapping> 

컨트롤러 :

@RequestMapping(value="/foo", method = RequestMethod.GET) 
public String home(Model model){ 
    return "home"; 
} 

@RequestMapping(value="/foo/bar", method = RequestMethod.GET) 
public String homeTest(Model model){ 
    return "home"; 
} 
+0

어떤 오류가 발생합니까? –

+0

@JohnDonn SRVE0295E : 오류보고 : 404 – Nero

+1

Spring의 DispatcherServlet을 디버그하거나 로그 레벨을 적절히 변경하려고 할 수 있습니다.어떤 점에서 올바르게 기억한다면 매핑 된 모든 URL 경로의 목록을 볼 수 있습니다. 이것은 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 수 있습니다. –

답변

-1

그냥 변경 :

<url-pattern>/foo/*</url-pattern> 

To

<url-pattern>/foo/**</url-pattern> 
+0

이 변경으로 404가 여전히 나타납니다. – Nero

+0

@Nero 업데이트 된 답변을 지금 확인하십시오. – gschambial

+0

여전히 동일합니다. 404 오류 – Nero

3

RequestMappingHandlerMapping을 구성해야합니다.

공식 문서는 handler mappings 및 일부 속성에 대해 자세히 설명합니다. 여기에 관련 한 alwaysUseFullPath입니다 :

  • alwaysUseFullPathtrue 경우, 봄 적절한 핸들러를 찾기 위해 현재 서블릿 컨텍스트 내에서 전체 경로를 사용합니다. false (기본값)이면 현재 Servlet 매핑 내의 경로가 사용됩니다. 서블릿은 /testing/*alwaysUseFullPath 속성을 사용하여 매핑되는 경우 속성이 거짓으로 설정된다면, /viewPage.html가 가 간단히

사용 반면 은, 예를 들면, /testing/viewPage.html 사용 true로 설정되고 /foo/bar에 대한 매핑을 찾으려고하면 서블릿 환경 인 /foo과 일치하는 부분을 제거하고 /bar을 사용하여 처리기를 찾습니다. /bar에 매핑 된 처리기가 없습니다.

위의 속성을 true으로 설정하면 전체 경로가 사용됩니다.

당신은 requestMappingHandlerMapping

@Override 
public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
    RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); 
    handlerMapping.setAlwaysUseFullPath(true); 
    return handlerMapping; 
} 

를 오버라이드 (override)하는 @Configuration 주석 WebMvcConfigurationSupport 하위 클래스에서이를 구성 또는 어떤 메커니즘하는 구성에 적합한 수 있습니다 (예를 들어 XML 동등한있다).


정확하게 일치하는 경우는 /foo입니다. 여기서 특히 관련이 없습니다.

관련 문제