본문 바로가기
Back-End/Spring MVC

서블릿 - HttpServletRequest

by 달의 조각 2022. 4. 15.
이 글은 김영한 님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 수강하며 정리한 글입니다.

 

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

 

 

HTTP 요청 메시지

 

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

username=kim&age=20

˙ START LINE: HTTP 메소드, URL, 쿼리 스트링, 스키마, 프로토콜
˙ 헤더: 헤더 조회
˙ 바디: form 파라미터 형식 조회, message body 데이터 직접 조회

더보기

 

📄RequestHeaderServlet

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

 

START LINE

request.getMethod(); //GET
request.getProtocol(); //HTTP/1.1
request.getScheme(); //http
request.getRequestURL(); //http://localhost:8080/request-header
request.getRequestURI(); // /request-header
request.getQueryString(); //username=hi
request.isSecure(); //https 사용 유무

 

모든 헤더 정보

/* 이전 방법: 모든 헤더 정보를 꺼내서 다음 요소가 있다면 출력하는 방식
        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));

 

편의 조회

//[Host 편의 조회]
request.getServerName(); //localhost
request.getServerPort(); //8080

//[Accept-Language 편의 조회]
request.getLocales().asIterator() //언어 우선 순위
        .forEachRemaining(locale -> System.out.println("locale = " + locale));
request.getLocale(); //ko 가장 높은 우선 순위

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

//[Content 편의 조회]
request.getContentType(); //text/plain
request.getContentLength();
request.getCharacterEncoding(); //UTF-8

 

기타 정보

//[Remote 정보]
request.getRemoteHost();
request.getRemoteAddr();
request.getRemotePort();

//[Local 정보]
request.getLocalName();
request.getLocalAddr();
request.getLocalPort();

 

🍎 임시 저장소 기능

˙해당 HTTP 요청이 시작부터 끝날 때까지 유지되는 임시 저장소 기능
  ˙ 저장: request.setAttribute(name, value)
  ˙ 조회: request.getAttribute(name)

 

🍎 세션 관리 기능

˙ request.getSession(create: true)

'Back-End > Spring MVC' 카테고리의 다른 글

서블릿 - HttpServletResponse  (0) 2022.04.18
서블릿 - HTTP 요청 데이터의 종류  (0) 2022.04.16
Hello 서블릿  (0) 2022.04.14
자바 백엔드 웹 기술 역사  (0) 2022.04.13
HTML, HTTP API, CSR, SSR  (0) 2022.04.13

댓글