01. HttpServletRequest의 개요
01-1. HttpServletRequest 역할
- HTTP 요청 메시지를 개발자가 직접 파싱해도 되지만, 매우 불편하다
- 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱한다
- 결과는 HttpServletRequest 객체에 담아서 제공한다
- ex) protected void service(HttpServletRequest request, HttpServletResponse response) { }
- HttpServletRequest를 사용하면 HTTP Body의 내용을 편리하게 사용 가능
01-2. HTTP 요청 메시지
POST /save HTTP/1.1 # 시작 라인
Host: localhost:8080 # 헤더 정보
Content-Type: application/x-www-form-urlencoded # 헤더 정보
username=kim&age=20 # 바디 정보
- 시작 라인
- HTTP 메서드
- URL
- 쿼리 스트링
- 스키마, 프로토콜
- 헤더
- 헤더 조회
- 바디
- form 파라미터 형식 조회
- message body 데이터 직접 조회
HTTP 메시지를 파싱하는 것에 더하여 HttpServletRequest 객체는 추가적인 부가 기능 제공한다.
대표적으로는 임시 저장소 기능과 세션 관리 기능이 존재한다.
임시 저장소 기능
- 해당 HTTP 요청 시작 - 끝 까지 유지되는 임시 저장소 기능
- HTTP 요청 정보가 살아있을때까지 유지되는 정보
- 저장: request.setAttribute(name, value)
- 조회: request.getAttribute(name, value)
세션 관리 기능
- request.getSession(create: true);
02. HttpServletRequest 기본 사용법
02-1. 시작 라인 추출
private static void printStartLine(HttpServletRequest request) {
// Parsing HTTP message start line
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
System.out.println("request.getRequestURL() = " + request.getRequestURL()); // <http://localhost:8080/request-header>
System.out.println("request.getRequestURI() = " + request.getRequestURI()); // /request-header
System.out.println("request.getQueryString() = " + request.getQueryString()); //username=hi
System.out.println("request.isSecure() = " + request.isSecure()); // https 여부
System.out.println("--- REQUEST-LINE - end ---");
System.out.println();
}
--- REQUEST-LINE - start ---
request.getMethod() = GET
request.getProtocol() = HTTP/1.1
request.getScheme() = http
request.getRequestURL() = <http://localhost:8080/request-header>
request.getRequestURI() = /request-header
request.getQueryString() = null
request.isSecure() = false
--- REQUEST-LINE - end ---
02-2. 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();
}
--- Headers - start ---
host:host
connection:connection
pragma:pragma
cache-control:cache-control
sec-ch-ua:sec-ch-ua
sec-ch-ua-mobile:sec-ch-ua-mobile
sec-ch-ua-platform:sec-ch-ua-platform
upgrade-insecure-requests:upgrade-insecure-requests
user-agent:user-agent
accept:accept
sec-fetch-site:sec-fetch-site
sec-fetch-mode:sec-fetch-mode
sec-fetch-user:sec-fetch-user
sec-fetch-dest:sec-fetch-dest
accept-encoding:accept-encoding
accept-language:accept-language
--- Headers - end ---
02-3. 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();
// Accept-Language
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();
// Cookie
System.out.println("[cookie 편의 조회]");
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
System.out.println(cookie.getName() + ": " + cookie.getValue());
}
}
System.out.println();
// Contents
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();
}
'Spring MVC > Spring MVC - 백엔드 웹 개발 기술 2탄' 카테고리의 다른 글
[스프링 MVC - 백엔드 웹 개발 기술] HttpServletResponse와 HTTP 응답 방식 - TEXT, HTML, API JSON (0) | 2023.08.13 |
---|---|
[스프링 MVC - 백엔드 웹 개발 기술] HTTP 요청 방식 - GET, POST, HTTP API (1) | 2023.05.14 |
[스프링 MVC - 백엔드 웹 개발 기술] 서블릿 생성 해보기 (0) | 2023.05.07 |
[스프링 MVC - 백엔드 웹 개발 기술] Spring Boot MVC 프로젝트 생성 (0) | 2023.05.07 |
[스프링 MVC - 백엔드 웹 개발 기술] HTML, HTTP API, CSR, SSR, 자바 백엔드 기술 웹 역사 (0) | 2023.04.30 |