RequestContextHolder
Spring 전역으로 Request 에 대한 정보를 가져올 때 사용한다.
RequestContextHolder 를 이용해서 Controller, Service, Dao 등 전 구간에서 HttpServletRequest에 접근할 수 있다.
RequestContextHolder 가 초기화 되는 시점은 Servlet이 생성될 때이다.
즉, 생성 시기는 Http Request가 오는 시점에 생성 및 초기화 되어지고 비즈니스 로직을 수행한 후 서블릿이
Destroy 될 때 Clean 된다.
RequestContextHolder는 같은 쓰레드 범위에서 데이터를 요청할 수 있다. 새로운 쓰레드를 생성하는 순간
DispatcherServlet의 범위에서 벗어나 서로 다른 서블릿이 된다.
RequestContextHolder Method
- getRequestAttributes() : 현재 Thread의 RequestAttributes를 반환한다.
- currentRequestAttributes() : 현재 Thread의 RequestAttributes를 반환한다.
- resetReuqestAttributes() : 현재 Thread에 대한 RequestAttributes를 재설정한다.
getRequestAttributes() 와 currentRequestAttributes() 의 기능은 거의 비슷하다.
getRequestAttributes()는 해당되는 RequestAttributes가 없으면 Null 을 반환한다.
하지만 currentRequestAttributes()는 해당되는 RequestAttributes 객체가 없을 경우 예외를 발생시킨다.
* HttpServletRequest
클라이언트의 요청과 관련된 정보와 동작을 가지고 있는 객체다.
Http 프로토콜의 Request 정보를 서블릿에게 전달하기 위한 목적인 객체이기도 하다.
생성되는 시점은 클라이언트의 요청이 들어오면 WAS 가 요청에 맞게 HttpServletRequest 객체,
HttpServletResponse 객체를 생성한다.
클라이언트가 요청을 보내고 서버로 요청이 들어오면 서버에서는 HttpServletRequest 객체를 생성하고 해당 요청
Path 에 매핑된 서블릿에게 전달된다.
이렇게 전달받은 HttpServletRequest 객체를 통해 Header 정보, Parameter, Cookie, URI, URL 등의 정보를 읽을 수 있다.