스프링/3. 스프링 MVC

8. HttpServletRequest, Header

sdafdq 2023. 8. 3. 20:21

http 요청을 개발자 대신에 파싱해 주는 객체. service에 인자로 넣어두면 알아서 받아줌.

 

요청을 처리할 동안 잠깐 쓸 수 있는 임시 저장소

 request.setAttribute("name",value)

 

request.getSession() 처럼 세션 알 수 있는것도.

 

메시지 바디를 통으로 읽어들이는 것도 있음.

 

 

 

@WebServlet(name="requestHeaderServlet",urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        printStartLine(request);
    }

    private static void printStartLine(HttpServletRequest request) {
        System.out.println(request.getMethod());
        System.out.println(request.getProtocol());
        System.out.println(request.getScheme());
        System.out.println(request.getRequestURI());
        System.out.println(request.getRequestURL());
        System.out.println(request.getQueryString());
        System.out.println(request.isSecure());
    }
}

저 외에도 정말 많은 정보를 얻을 수 있다.

헤더에 관한 정보도. 그냥 다 얻을 수 있다.

 

 

 

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 + ": " + request.getHeader(headerName));
         }

//        request.getHeaderNames().asIterator()
//                .forEachRemaining(headerName -> System.out.println(headerName + ":"
//                        + request.getHeader(headerName)));
//                        System.out.println("--- Headers - end ---");
//        System.out.println();
    }

헤더 key, 이름들을 받아서, 

request.getHeader(headerName)으로 값을 받는다.

참고로 request.getHeader("host") 이런 것도 가능.

 

 

 

 

    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();
    }

이렇게 서버이름, (이번같은 경우 localhost), 포트 번호, Locales 요청한 언어들, 또 쿠키, Content에 대한 것들까지 조회 가능.

 

 

 

    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();
    }

remote 정보는 요청이 온거에 대한 정보.

 

local 정보는 서버에 대한 정보

 

 

 

포스트맨을 쓰면, 여러 http 메소드나 헤더등을 설정해서 요청을 보낼 수 있어서 편리함. 바디도 내가 직접 넣을 수 있음.

 

 

 

테스트에 용이

'스프링 > 3. 스프링 MVC' 카테고리의 다른 글

10. GET 요청 정보  (0) 2023.08.04
9. http 요청 데이터  (0) 2023.08.04
7. Hello Servlet  (0) 2023.08.03
5. 자바 웹 기술 발전 역사  (0) 2023.08.03
4. 서버의 클라이언트에게 제공 방식  (0) 2023.08.02