(호출 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를 참고 하시기 바랍니다.
그런 방법이 있었군요.^^
답글삭제