c:import 사용 시 주의사항 (Request method 'POST' not supported)
Controller의 requestMapping 애노테이션에 등록되어 있는 /miniList URL은 GET 방식만 허용할 수 있게 다음과 같이 정의되어 있고,
@RequestMapping(value = "/miniList", method = {RequestMethod.GET})
커스텀 태그는 다음과 같이 jsp 코드안에 추가되어 있다.
<c:import url="/miniList" />
위의 코드를 보면 일단 HTTP GET 방식으로의 요청으로만 /miniList 를 처리할 수 있을 것이다.
허나 아래 시퀀스 다이어그램과 같이 /account 요청 시 POST 방식으로 호출하게 되면 /account 의 결과 jsp 안에 있는 <c:import url="/miniList" /> 커스텀 태그 처리 동작이 최초 요청의 method 방식과 동일한 POST 방식으로 서버에 요청을 보낸다.
결국 POST 방식으로의 요청을 처리할 수 없다는 예외 메세지를 만나게 된다.
[2014-05-13 13:18:25 DEBUG o.s.w.s.DispatcherServlet][823] - DispatcherServlet with name 'dispatcher' processing POST request for [/miniList]
[2014-05-13 13:18:25 DEBUG o.s.w.s.DispatcherServlet][831] - Taking snapshot of request attributes before include
[2014-05-13 13:18:25 DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping][220] - Looking up handler method for path /miniList
[2014-05-13 13:18:25 DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver][132] - Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
[2014-05-13 13:18:25 WARN o.s.w.s.PageNotFound][194] - Request method 'POST' not supported
커스텀 태그 동작 방식이 이런 줄은 오늘 알게 되었다.
이를 해결하기 위해서는 다음과 같이 GET, POST 요청 모두를 수용할 수 있도록 Controller 코드를 다음과 같이 수정해 주면 된다.
@RequestMapping(value = "/miniList", method = {RequestMethod.GET, RequestMethod.POST})
또 한가지 유념해야 할 부분은 위의 시퀀스 다이어그램 1번과 5번의 HTTP request 객체는 서로 다르다는 것이다.
만약 5번 request 객체에 특정 데이터를 setAttribute 하여도 1번 request 에서는 getAttribute를 이용하여 값을 가져올 수 없다.
1번 request : org.apache.catalina.connector.RequestFacade@74aff38f
5번 request : org.apache.catalina.core.ApplicationHttpRequest@2e73997d
'프로그래밍' 카테고리의 다른 글
HTTP multipart/form-data raw 데이터는 어떤 형태일까? (13) | 2014.06.30 |
---|---|
My first Java8 Programming (0) | 2014.06.20 |
bean 엘리먼트의 parent attribute 사용 (0) | 2014.05.22 |
spring util:map 사용 시 key와 value 타입 지정 (0) | 2014.05.17 |
Tiles definition 렌더링 전 처리 방법 (ViewPreparer 사용) (0) | 2014.04.30 |
HTTP request body copy 방법 (0) | 2014.04.29 |
javascript self closing 문제 (2) | 2014.04.16 |
Spring MappingJacksonJsonView modelKey가 하는 역할 (0) | 2014.03.15 |