본문 바로가기

Java & Html

HttpServletRequest를 가져오는 방법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Spring에서 HttpServletRequest를 메소드 파라미터로 선언하지 않고 가져올 수 있는 방법에 대해 소개하겠습니다. 

 

먼저 소스코드는!

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

 

(중략)

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

 

RequestContextHolder 클래스와 ServletRequestAttributes 클래스를 이용하면 됩니다.

 

org.springframework.web.context.request.RequestContextHolder 클래스는 ThreadLocal를 사용해서

현재 쓰레드에 RequestAttributes 인스턴스를 바인딩 해두었다가 요청을 하면 이 인스턴스를 돌려주는 역할을 합니다.

 

그런데 RequestContextHolder 클래스를 살펴보니 request를 가져올 수 있는 메소드가 2개가 존재했습니다.

바로 currentRequestAttributes()와 getRequestAttributes() 메소드인데 이 메소드들의 차이는 바로!

 

몰라서 Spring API를 참조했습니다;;


getRequestAttributes

public static RequestAttributes getRequestAttributes()
Return the RequestAttributes currently bound to the thread.

Returns:
the RequestAttributes currently bound to the thread, or null if none bound

currentRequestAttributes

public static RequestAttributes currentRequestAttributes()
                                                  throws IllegalStateException
Return the RequestAttributes currently bound to the thread.

Returns:
<dd>the RequestAttributes currently bound to the thread </dd>
Throws:
<dd>IllegalStateException - if no RequestAttributes object is bound to the current thread</dd> 


 

간단히 정리하면 두 메소드 모두 현재 스레드에 바인딩된 RequestAttributes를 가져온다는 것은 동일하나

getRequestAttributes()는 RequestAttributes가 없으면 널을 반환하고,

currentRequestAttributes()는  RequestAttributes가 없으면 예외를 발생합니다.

 

어느 블로그에서는 web.xml 파일에 아래와 같이 리스너를 설정해야한다고 나와서 관련 블로그 URL을 남겨봅니다.

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


'Java & Html' 카테고리의 다른 글

Java - 메일 발송  (0) 2015.01.29
[spring] log4j 설정 및 사용법  (0) 2014.11.19
java.util.Date 를 이용한 날짜 차이  (0) 2014.02.03
java.math.BigDecimal Sample(숫자계산)  (0) 2013.12.16
자바 정규 표현식  (0) 2013.10.25