1. 개요
이 빠른 사용방법(예제) 에서는 HttpServletRequest 클래스 의 getRequestURI() 와 getPathInfo() 간의 차이점에 대해 설명합니다 .
2. getRequestURI() 와 getPathInfo() 의 차이점
getRequestURI() 함수 는 완전한 요청 URI를 반환합니다. 여기에는 배포 폴더 및 서블릿 매핑 문자열이 포함됩니다. 또한 모든 추가 경로 정보를 반환합니다.
getPathInfo() 함수 는 서블릿에 전달된 경로만 반환합니다 . 전달된 추가 경로 정보가 없으면 이 함수는 null 을 반환 합니다.
즉, 웹 서버의 루트에 응용 프로그램을 배포하고 "/"에 매핑된 서블릿을 요청하면 getRequestURI() 및 getPathInfo() 모두 동일한 문자열을 반환합니다 . 그렇지 않으면 다른 값을 얻게 됩니다.
3. 요청 예시
HttpServletRequest 메서드 를 더 잘 이해하기 위해 다음 URL을 통해 액세스할 수 있는 서블릿 이 있다고 가정해 보겠습니다 .
http://localhost:8080/deploy-folder/servlet-mapping
이 요청은 "deploy-folder" 내부에 배포된 웹 애플리케이션의 "servlet-mapping" 서블릿에 도달합니다. 따라서 이 요청에 대해 getRequestURI() 및 getPathInfo() 를 호출 하면 서로 다른 문자열을 반환합니다.
간단한 doGet() 서블릿 메서드를 만들어 보겠습니다.
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
if ("getPathInfo".equals(request.getParameter("function")) {
writer.println(request.getPathInfo());
} else if ("getRequestURI".equals(request.getParameter("function")) {
writer.println(request.getRequestURI());
}
writer.flush();
}
먼저 curl 명령 으로 가져온 getRequestURI 요청 에 대한 서블릿의 출력을 살펴보겠습니다 .
curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path
마찬가지로 getPathInfo 에 대한 서블릿의 출력을 살펴보겠습니다 .
curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getPathInfo
/request-path
4. 결론
이 기사에서는 HttpServletRequest 에서 getRequestURI() 와 getPathInfo() 의 차이점에 대해 설명했습니다 . 또한 예제 서블릿 및 요청으로 이를 시연했습니다.
항상 그렇듯이 이러한 모든 기능을 테스트하기 위해 구현된 서블릿은 Github에서 사용할 수 있습니다 .