참고로 @RequestMapping 어노테이션은 Ant 스타일의 패턴을 지원한다.
? : 1개의 문자와 매칭
* : 0개이상의 문자와 매칭
** : 0개 이상의 디렉토리와 매칭

기억하도록~~

'IT > 스프링' 카테고리의 다른 글

파일 업로드 in spring... 3  (1) 2012.01.18
Validator / Error interface .... in Spring  (0) 2012.01.16
PathVariable 어노테이션을 이용한 URI 템플릿...  (0) 2012.01.16
URI 매칭.. (서블릿 맵핑)  (0) 2012.01.13
@ModelAttribute  (2) 2012.01.13


DispatcherServlet은 DefaultAnnotationHandlerMapping 클래스를 기본 HandlerMapping 구현체로 사용한다.

 @RequestMapping 의 주의사항..

@RequestMapping("/search/game.do")
public String search(...) {
...


@RequestMapping("/game/info")
public String info(...) {
...


코드를 보면 /search/game.do 는 search에서 처리하고, /game/info 는 info에서 처리할듯 하지만...
첫번째것은 맞고 두번째는 틀렸다.

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
<url-pattern>/game/*</url-pattern>
</servlet-mapping>

url-pattern 에서 /game/* 로 설정했기 때문이라네?
url-pattern값으로 디렉토리를 포함한 패턴을 지정하게 되면 서블릿 경로는 /game 이 되며, 
서블릿 경로를 제외한 나머지 경로를 이용해서 @RequestMapping 어노테이션의 값과 매칭여부를 판단한단다.

해서 game/info 의 요청이 오면 실제 요청 URI 는 /info가 된다. 
허나 RequestMapping 에는 /game/info라고 했으므로 /info와 맞지 않게 된다.


이런 이유는 DispatcherServlet 이 기본적으로 사용하는 HandlerMapping 구현체와 HandlerAdapter 구현체가 전체 경로를 사용하지 않도록 설정되어있기 때문이란다.

해서 사용하게 설정하면... 위의 경우 잘 되겠지?
즉, 서블릿 경로를 포함한 전체 경로를 이용해서 매칭 여부를 판단하도록 설정하려면, 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:alaywaUseFullPath="true"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerAdapter" p:alwaysUseFullPath ="true"/>
 


 










 



'IT > 스프링' 카테고리의 다른 글

Ant 경로 패턴 in @RequestMapping  (0) 2012.01.16
PathVariable 어노테이션을 이용한 URI 템플릿...  (0) 2012.01.16
@ModelAttribute  (2) 2012.01.13
모델 생성.... (Model )  (0) 2012.01.13
@Controller 어노테이션... - 1 -  (0) 2012.01.10

+ Recent posts