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에서 사용할 수 있습니다 .

res – REST with Spring (eBook) (everywhere)