Spring에서 Service,Repository,Dao 클래스에서 HttpServletRequest 가져오는 방법

Spring에서 Service, Repository, Dao 같은
비즈니스 컴포넌트에서 HttpServletRequest 객체를 가져오는 방법에
대해서 말씀 설명 하겠습니다.

기본적으로 Spring은 HttServletRequest를 컨트롤러에서
Domain 오브젝트(Value Object) 바인딩 합니다.

이렇게 HttServletRequest를 한번 소모하게 되면 다시
호출할 경우 HttServletRequest가 Null이 됩니다.

이런 현상은 주로 ServletFilter 또는 리스너에서
사용할 경우 발생을 합니다.

이럴경우 즉 HttServletRequest 소모를 해도 다시
해당 객체 (정확히 HttServletRequest 객체는 아니지만
당시에 요청 받은 데이터) 가져올수 있는 방법 입니다.

소스를 보면 “ThreadLocal” 객체에 요청시 Request 객체를
복사해서 저장을 하고 요청이 완료되면 “ThreadLocal”
제거 합니다. (제거를 하지 않으면 Out of Memory가 발생합니다.)

#web.xml

web.xml에 서블릿 리스너를 아래와 같이 추가 합니다.

<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

#HttpServletRequest 객체 가져오기

public static HttpServletRequest getCurrentRequest() {

       ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder
               .currentRequestAttributes();

       HttpServletRequest hsr = sra.getRequest();
       return hsr;
   }


Published by: beyondj2ee

Past SI AA, now I am pikicast developer in yellow mobile and daddy, Java, Spring, OpenSource, Application Architect :) Java Application Architect. mail : beyondj2ee@gmail.com twitter : twitter.com/beyondj2ee facebook : https:www.facebook.com/beyondj2ee blog: http:beyondj2ee.wordpress.com

Categories useful댓글 남기기

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중