2009년 9월 4일 금요일

Spring에서 호출 URL 찾는 방법

프로젝트를 진행 하다보면 호출 URL을 참고할 때가 있습니다.
(호출 URL에 따라서 권한을 체크 한다던지 아니면 접속 로그를
남긴다든지 등)
Controller에서 HttpServletRequest.getRequestURI() 또는
HttpServletRequest.getRequestURL() 를 통해서 쉽게 구할 수가
있습니다.
하지만 문제는 View에서 호출 URL을 구할 경우 입니다.
jsp/jstl 뷰 또는 사용자 정의 뷰 (AbstractView를 상속 받은)로
갔을때 위 와 같은 메서드를 콘솔에 출력 하면 호출 URL이 아닌
forwarding된 뷰의 경로가 출력 됩니다.
즉 "/sample/hello.do"를 호출 했을 경우 당연히 호출 된
URL이 나와야 하는데 "/views/sample/hello.jsp" 같은
JSP가 출력 됩니다.
물론 컨트롤러에서
request.getAttribute("sourceURL",request..getRequestURI() )
를 담어서 뷰에서 처리 할수도 있습니다.
하지만 그전에 만약 스프링에서 API를 제공 한다면 그것을
되도록 사용 하는것이 맞다고생각 합니다.
이유인즉은 처음 시스템을 개발 하시는 분들은 모르겠지만
구축 후 유지보수 하시는 분들은 저걸 왜 request 객체에
담았지 하고 의문에 빠지게 됩니다. 물론 comment를 상세히
기록 하면 될 수도 있지만 여전히 코드를 의심하게 될 것입니다.
당행히 스프링에서 호출 URL을 찾는 API를 제공하고 있습니다.
그런 놈을 찾기가 어렵지 사용법은 무지 easy 합니다.
  • 호출 URL 찾는 방법

패키지 경로 : org.springframework.web.util.UrlPathHelper
UrlPathHelper urlPathHelper = new UrlPathHelper(); String originalURL = urlPathHelper.getOriginatingRequestUri(request); out.print("OriginalURL ==>" + originalURL  );

JSP에서 실행 하면 포워딩 된 jsp가 출력 되는 것이 아니라
/sample/hello.do가 그대로 출력 됩니다.
이 메서드 외에 UrlPathHelper 클래스에서 제공하는 유용한 메서드가
있습니다. 꼭 API Docs를 참고 하시기 바랍니다.

댓글 1개: