참고로 HTTP 프로토콜과 네트워크 이해 필요
WAS와 서블릿 컨테이너
HttpServletRequest
HttpServletRequest 역할
- HTTP 요청 메시지를 개발자가 편리하게 사용할 수 있도록 개발자 대신 HTTP 요청 메시지를 파싱한다.
- 그 결과를
HttpServletRequest
객체에 담아서 제공.
- 다음의 Http 요청 메시지를 편리하게 조회할 수 있다.
Http 요청 메시지
POST /login HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=xonic789&password=1234
- START LINE
- HTTP 메소드 (GET, POST, ..)
- URL (/login)
- 쿼리 스트링 (username=xonic789&password=1234)
- 스키마, 프로토콜 (http, HTTP/1.1)
- 헤더
- request header 조회
- 바디
- form 파라미터 형식 조회
임시 저장소
- 해당 HTTP 요청이 시작부터 끝날 때까지 유지되는 임시 저장소
- 저장:
request.setAttribute(key, value)
- 조회:
request.getAttribute(key)
세션 관리
HTTP 요청 데이터
HTTP 요청 메시지를 통해 클라이언트 -> 서버로 데이터를 전달하는 방법
- GET - 쿼리 파라미터
- /{endpoint}?username=xonic789
- 메시지 바디 없이, URL 쿼리 파라미터에 데이터를 포함해서 전달
- 예) 검색, 필터, 페이징 등
- POST - HTML Form
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파라미터 형식으로 전달 username=xonic789
- 예) 게시판 생성, 댓글 달기, HTML Form 사용
- HTTP message body에 데이터 직접 담기
- HTTP API에서 주로 사용, 99.99% JSON으로 (외 XML, TEXT..)
- POST, PUT, PATCH
HttpServletResponse
HttpServletResponse 역할
- 서블릿에 전달된 Response 에 편리하게 필요한 데이터를 담아 사용자에게 리턴하는 응답 객체.
HTTP 응답 메시지 생성
- HTTP 응답 코드(Status Code) 지정
- 헤더 생성
- 바디 생성
편의 기능 제공
- Content-Type, 쿠키, Redirect (Status Code 302)
HTTP 응답 데이터
- 단순 텍스트 응답
- `writer.println("asdf");
- HTML 응답
- HTTP API - MessageBody JSON 응답
content-type이 application/json
은 스펙상 utf-8 형식을 사용하도록 정의 되어 있으므로 따로 utf-8을 설정할 필요가 없다.
참조
인프런 김영한님 강의