본문 바로가기
Spring Tutorial

[스프링 MVC 9] 서블릿: HttpServletRequest 기본 사용법

by 미소5 2023. 7. 18.

HttpServletRequest가 제공하는 편리한 기본 기능들(HTTP 메시지의 start-line, header 정보 조회)을 알아보자.

 

  • start-line 정보
@WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        printStartLine(req);
        printHeaders(req);
        printHeaderUtils(req);
        printEtc(req);
    }


    /**start line 정보*/
    private void printStartLine(HttpServletRequest req) {
        System.out.println("--- REQUEST-LINE - start ---");
        System.out.println("request.getMethod() = " + req.getMethod()); //GET
        System.out.println("request.getProtocol() = " + req.getProtocol()); //HTTP/1.1
        System.out.println("request.getScheme() = " + req.getScheme()); //http

        System.out.println("request.getRequestURL() = " + req.getRequestURL());
        // http://localhost:8080/request-header

        System.out.println("request.getRequestURI() = " + req.getRequestURI());
        // request-header

        System.out.println("request.getQueryString() = " + req.getQueryString());   //username=hello
        System.out.println("request.isSecure() = " + req.isSecure()); //https 사용 유무
        System.out.println("--- REQUEST-LINE - end ---");
        System.out.println();
    }

localhost:8080/request-header?username=hello 결과


 

  • 헤더 정보
/**모든 Header 정보*/
private void printHeaders(HttpServletRequest req) {
    System.out.println("--- Headers - start ---");

     //방법1
    /*Enumeration<String> headerNames = req.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String headerName = headerNames.nextElement();
        System.out.println(headerName + ": " + req.getHeader(headerName));
    }*/
    //방법2
    req.getHeaderNames().asIterator()
            .forEachRemaining(headerName -> System.out.println(headerName + ": " + req.getHeader(headerName)));

    System.out.println("--- Headers - end ---");
    System.out.println();
}

결과 (개발자도구에서 봤던)


 

  • Header 편리한 조회
/**Header 편리한 조회*/
private void printHeaderUtils(HttpServletRequest req) {
    System.out.println("--- Header 편의 조회 start ---");
    System.out.println("[Host 편의 조회]");
    System.out.println("request.getServerName() = " + req.getServerName()); //Host 헤더
    System.out.println("request.getServerPort() = " + req.getServerPort()); //Host 헤더
    System.out.println();

    System.out.println("[Accept-Language 편의 조회]");
    req.getLocales().asIterator()
            .forEachRemaining(locale -> System.out.println("locale = " + locale));
    System.out.println("request.getLocale() = " + req.getLocale());
    System.out.println();

    System.out.println("[cookie 편의 조회]");
    if (req.getCookies() != null) {
        for (Cookie cookie : req.getCookies()) {
            System.out.println(cookie.getName() + ": " + cookie.getValue());
        }
    }
    System.out.println();

    System.out.println("[Content 편의 조회]");
    System.out.println("request.getContentType() = " + req.getContentType());
    System.out.println("request.getContentLength() = " + req.getContentLength());
    System.out.println("request.getCharacterEncoding() = " + req.getCharacterEncoding());
    System.out.println("--- Header 편의 조회 end ---");
    System.out.println();
}

localhost:8080/request-header?username=hello 결과

  • GET URL 쿼리 파라미터 형식은 content-type이 없다. (null)

 


Postman
Postman 실행결과

  • content-type은 HTTP 메시지 바디의 데이터 형식

 


  • 기타 정보
    • 기타 정보는 HTTP 메시지의 정보는 아니다.
//기타 정보 
private void printEtc(HttpServletRequest req) {
    System.out.println("--- 기타 조회 start ---");
    System.out.println("[Remote 정보]");
    System.out.println("request.getRemoteHost() = " + req.getRemoteHost()); //
    System.out.println("request.getRemoteAddr() = " + req.getRemoteAddr()); //
    System.out.println("request.getRemotePort() = " + req.getRemotePort()); //
    System.out.println();
    System.out.println("[Local 정보]");
    System.out.println("request.getLocalName() = " + req.getLocalName()); //
    System.out.println("request.getLocalAddr() = " + req.getLocalAddr()); //
    System.out.println("request.getLocalPort() = " + req.getLocalPort()); //
    System.out.println("--- 기타 조회 end ---");
    System.out.println();
}

 


 


[스프링 MVC 8] 서블릿: HttpServletRequest (tistory.com)

 

[스프링 MVC 8] 서블릿: HttpServletRequest

HttpServletRequest 역할 HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청

joly156.tistory.com


 

[스프링 MVC 7] 서블릿: Hello 서블릿 (tistory.com)

 

[스프링 MVC 7] 서블릿: Hello 서블릿

스프링 부트 환경에서 서블릿을 등록하고 사용해보자. 스프링 부트 서블릿 환경 구성 @ServletComponentScan 스프링 부트가 서블릿을 직접 등록해서 사용할 수 있도록 해준다. @ServletComponentScan //서블

joly156.tistory.com


 

728x90
반응형