ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [김영한 스프링] 04. 서블릿 - HttpServletRequest
    Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 2023. 6. 14. 21:46

    HttpServletRequest 역할

    HTTP 요청 메시지를 개발자가 직접 파싱 해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱 한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다.

     

    main/java/basic/request/RequestHeaderServlet 생성

     

     

    start-line 정보

    package hello.servlet.basic.request;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;

    @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
    public class RequestHeaderServlet extends HttpServlet {
       
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            printStartLine(request);
        }
        
        // start line 정보
        private void printStartLine(HttpServletRequest request) {
            
            System.out.println("--- REQUEST-LINE - start ---");
            
            System.out.println("request.getMethod() = " + request.getMethod()); // GET
            System.out.println("request.getProtocol() = " + request.getProtocol()); // HTTP/1.1
            System.out.println("request.getScheme() = " + request.getScheme()); // http
            // http://localhost:8080/request-header
            System.out.println("request.getRequestURL() = " + request.getRequestURL());
            // /request-header
            System.out.println("request.getRequestURI() = " + request.getRequestURI());
            // username=hi
            System.out.println("request.getQueryString() = " + request.getQueryString());
            System.out.println("request.isSecure() = " + request.isSecure()); // https 사용 유무
            System.out.println("--- REQUEST-LINE - end ---");
            System.out.println();
        }
    }

     

     

    localhost:8080/request-header

     

     

     

     

    헤더 정보

    package hello.servlet.basic.request;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Enumeration;

    @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
    public class RequestHeaderServlet extends HttpServlet {
        
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            // printStartLine(request); // start line 정보
            printHeaders(request); // Header 모든 정보
        }
        
        // Header 모든 정보
        private void printHeaders(HttpServletRequest request) {
            
            System.out.println("--- Headers - start ---");
            
            // 옛날 방식
            // Enumeration<String> headerNames = request.getHeaderNames();
            //
            // while (headerNames.hasMoreElements()) {
                // String headerName = headerNames.nextElement();
            //
                // System.out.println(headerName + " : " + headerName);
            // }
            
            // 요즘 방식
            request.getHeaderNames().asIterator().forEachRemaining(headerName -> System.out.println(headerName + " : " + headerName));
            
            System.out.println("--- Headers - end ---");
            System.out.println();
        }
    }

    asIterator()

      - 이 열겨에 포함된 나머지 요소를 순회하는 Iterator를 리턴함

     

    Iterator()

      - ArrayList, HashSet과 같은 컬렉션을 반복하는데 사용할 수 있는 객체

     

    forEachRemaining(Consumer<? super E> action)

      - 자바8부터 사용가능

      - 모든 요소가 처리되거나 작업에서 예외가 발생할 때까지 남은 각 요소에 대해 지정된 작업을 수행

     

     

     

     

    Header 편리한 조회

    package hello.servlet.basic.request;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Enumeration;

    @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
    public class RequestHeaderServlet extends HttpServlet {
       
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            // printStartLine(request); // start line 정보
            // printHeaders(request); // Header 모든 정보
            printHeaderUtils(request); // Header 편리한 조회
        }
        
        // Header 편리한 조회
        private void printHeaderUtils(HttpServletRequest request) {
            
            System.out.println("--- Header 편의 조회 start ---");
            System.out.println("[Host 편의 조회]");
            System.out.println("request.getServerName() = " + request.getServerName()); // Host 헤더
            System.out.println("request.getServerPort() = " + request.getServerPort()); // Host 헤더
            System.out.println();
            
            System.out.println("[Accept-Language 편의 조회]");
            request.getLocales().asIterator().forEachRemaining(locale -> System.out.println("locale = " + locale));
            System.out.println("request.getLocale() = " + request.getLocale());
            System.out.println();
            
            System.out.println("[cookie 편의 조회]");
            if (request.getCookies() != null) {
                for (Cookie cookie : request.getCookies()) {
                    System.out.println(cookie.getName() + ": " + cookie.getValue());
                }
            }
            System.out.println();
            
            System.out.println("[Content 편의 조회]");
            System.out.println("request.getContentType() = " + request.getContentType());
            System.out.println("request.getContentLength() = " +request.getContentLength());
            System.out.println("request.getCharacterEncoding() = " + request.getCharacterEncoding());
            
            System.out.println("--- Header 편의 조회 end ---");
            System.out.println();
        }
    }

     

     

     

     

    기타 정보

    package hello.servlet.basic.request;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Enumeration;

    @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
    public class RequestHeaderServlet extends HttpServlet {
        
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            // printStartLine(request); // start line 정보
            // printHeaders(request); // Header 모든 정보
            // printHeaderUtils(request); // Header 편리한 조회
            printEtc(request); // 기타 정보
        }
        
        // 기타 정보
        private void printEtc(HttpServletRequest request) {
            
            System.out.println("--- 기타 조회 start ---");
            
            System.out.println("[Remote 정보]");
            System.out.println("request.getRemoteHost() = " + request.getRemoteHost());
            System.out.println("request.getRemoteAddr() = " + request.getRemoteAddr());
            System.out.println("request.getRemotePort() = " + request.getRemotePort());
            System.out.println();
            
            System.out.println("[Local 정보]");
            System.out.println("request.getLocalName() = " + request.getLocalName());
            System.out.println("request.getLocalAddr() = " + request.getLocalAddr());
            System.out.println("request.getLocalPort() = " + request.getLocalPort());
            
            System.out.println("--- 기타 조회 end ---");
            System.out.println();
        }
    }

     

     

     

     

    출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

     

    스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

    웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

    www.inflearn.com

Designed by Tistory.