클라이언트가 요청한 URL과 @RequestMapping Annotation의 값을 이용해서 클라이언트의 요청을 어떤 컨트롤러의 어떤 메서드가 처리할 지가 결정되고, 매칭이 어떻게 이루어지는 지 알지 못할 경우 클라이언트의 요청 URL 매칭되는 메서드를 설정할 수 없기 때문에, 어떻게 매칭이 이루어지는 지 아는 것은 작지만 매우 중요하다.
@RequestMapping Annotation 간의 관계 그리고,
@PathVariable을 이용한 URI 템플릿
전체 경로와 Servlet 기반 경로 매칭 설정…
DispatcherServlet은 DefaultAnnotationHandlerMapping Class를 기본 HandlerMapping 구현체로 사용한다. 기본 설정은 컨텍스트 내에서의전체 경로가 아닌 Servlet 경로를 제외한 나머지 경로에 대해 Mapping을 처리한다. 예를 들어, DispatcherServlet에 대해서 다음과 같이 Servlet Mapping을 설정했다고 하자.

*.do로 오는 요청과 /game/ 으로 오는 요청을 dispatcherServlet이 처리하도록 설정하고 있다.
do와 game로 설정된 @RequestMapping은 어떻게 될까

/game/Info = http://본인 로컬호스트주소/패키지명/game/info
/game/list = http://본인 로컬 호스트주소/패키지명/game/list

/search/main.do = http://본인 로컬 호스트주소/패키지명/search/main.do
Servlet 경로를 제외한 나머지 경로를 사용하는 이유는 DispatcherServlet이 기본적으로 사용하는 HandlerMapping 구현체 (DefaultAnnotationHandlerMapping)와 HandlerAdapter 구현체(AnnotationMethodHandlerAdapter)가 전체 경로를 사용하지 않도록 설정되어 있기 때문이다. 만약 Servlet 경로를 포함한 전체 경로를 이용해서 매칭 여부를 판단하도록 설정하려면, 다음과 같이 SPRING 설정 파일에 이 두 구현체의 alwaysUserFullPath 프로퍼티 값이 true가 되도록 설정해 부어야 한다.

alwaysUserFullPath 프로퍼티의 설정 값을 true로 지정해주면 Servlet 경로를 포함한 전체 경로를 사용하게 되므로, 아까처럼 Servlet Mapping을 설정한 경우, http://host/컨텍스트경로/game/info 요청 URL에 대해 다음 @RequestMapping Annotation이 매칭이 되어 info() 메서드가 /game/info 요청을 처리하게 된다.
@RequestMapping("/game/info") //game은 Servlet 경로
public String info(..){
...
}
'Java > SPRING' 카테고리의 다른 글
스프링 프레임워크 [Sprng Framework] Validator Interface를 이용한 폼 값 검증 (0) | 2021.12.23 |
---|---|
스프링 프레임워크[Spring Framework] @PathVariable 어노텐션 (0) | 2021.12.23 |
스프링 프레임워크 [Spring Framework] Controller(컨트롤러) 메서드의 리턴 타입 (0) | 2021.12.23 |
스프링 프레임워크 [Spring Framework] Servlet API (0) | 2021.12.23 |
스프링 프레임워크 [Spring Framework] @RequestHeader 해더 어노텐션 (0) | 2021.12.23 |