개발 의문 해결

getRequestURI()가 jsp 파일명으로 나올 때

티시즌 2023. 8. 24. 00:46

URI를 읽어서 특정 텍스트가 포함되면 예외 처리를 하는 코드를 짜려고 했다.
그런데 생각처럼 잘 되지 않았다.

나는 서블릿 매핑이 나올 거라고 예상했는데,
다음 코드들은 모두 내 생각과 달리 .jsp 를 반환했다.

String[] uriArray = ((HttpServletRequest) request).getRequestURI().split("/");

StringBuffer urlArray = ((HttpServletRequest) request).getRequestURL();

String getServletPath = request.getServletPath();

 

알고 보니 getRequestDispatcher를 썼기 때문에, 반환되는 jsp 파일명이 나오는 것이라고 한다.

이 내용을 ChatGPT로 확인해 보았다.

 

서블릿에서 JSP로 포워딩되면, JSP에서 request.getServletPath()를 호출하면 포워딩된 리소스의 경로가 반환됩니다. 즉, 직접적으로 JSP 파일에서 원래의 서블릿 매핑 URL을 가져오는 것은 어렵습니다.

그러나 서블릿에서 요청 객체에 서블릿 매핑 URL을 속성으로 추가하고 이를 JSP에서 추출하는 방법이 있습니다. 아래 코드는 그 예시입니다:

java
// In your Servlet
String servletPath = request.getServletPath();
request.setAttribute("servletPath", servletPath);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/mLogin.jsp");
dispatcher.forward(request, response);​


jsp
<%= request.getAttribute("servletPath") %>

이렇게 하면 /member/login과 같은 원래의 서블릿 매핑 URL을 출력할 수 있습니다.

즉, 직접적인 방법은 없지만 간접적으로 위와 같이 구현하여 필요한 정보를 얻어낼 수 있습니다.