서블릿
HTTP 요청 데이터를 어떻게 받고, 응답 데이터를 어떻게 내려줄 것인가에 대한 것
localhost:8080/hello?username=kim
하고 F12누르면 network탭에 request, response 로그 볼 수 있음
tip : 개발 할 때 http 요청 메시지를 편리하게 스프링 프레임 워크에서 눈으로 보고 싶을 때
properties에logging.level.org.appache.coyote.http11=debug 추가(개발할때만 사용 권장)
--> 헤더 정보들
서블릿 컨테이너 동작 방식
스프링 부트 실행하면 내장 Tomcat 서버 띄워줌. Tomcat 서버는 내부에 servlet container 기능을 가지고 있음. 이를 이용해서 servlet을 생성
서버의 요청 응답 구조
main -> webapp -> index.html
HttpServeltRequest를 사용하면 다음과 같은 HTTP 요청 메시지를 편리하게 조회 가능
HTTP 요청 데이터
GET - 쿼리 파라미터
--> /url'?username=hello&age=20'
--> 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
ex) 검색, 필터, 페이징 등에서 많이 사용하는 방식
POST - HTML Form
--> content-type : application/x-www.form-urlencoded
--> 메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20
ex) 회원가입, 상품 주문, HTML Form 사용
HTTP message body에 데이터를 직접 담아서 요청
--> HTTP API에서 주로 사용, JSON, XML, TEXT (rest api)
--> 데이터 형식은 주로 JSON사용
--> POST,PUT,PATCH
HTTP 요청 데이터 - GET 쿼리 파라미터
ex) http://localhost:8080/request.param?username=hello&age=20
서버에서는 HttpServletRequest가 제공하는 메서드를 통해 쿼리 파라미터를 편리하게 조회 가능
request.getParameter() 는 하나의 파라미터 이름에 대해서 하나의 값만 있을 때 사용해야 한다.
중복일 때는 request.getParameterValues()
( 사실 중복으로 보낼 경우 거의 없음 )
HTTP 요청 데이터 - POST HTML Form
--> request.getParameter는 GET URL 쿼리 파라미터에 있는 데이터 뿐만 아니라 POST-HTML Form 내부의 데이터 모두 꺼낼 수 있음.
HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트
그냥 API 방식
HTTP message body에 데이터를 직접 담아서 요청
HTTP API에서 주로 사용, JSON, XML, TEXT 사용
데이터 형식은 주로 JSON 사용
ex) 서버와 서버가 통신할 때, 앱에서 요청할 때, 웹 브라우저에서 javascript로 요청 할 때
POST, PUT, PATCH에서 사용
JSON 은 ObjectMapper 필요
참고
HTTP 응답 메시지 생성
1. 단순 text 보내기 2. html 보내기 3. messagebody에 json 데이터 보내기
HTTP 응답 코드 지정 (200,400,404 )
헤더 생성
바디 생성
편의 기능 제공
--> Content-Type, 쿠키, Redirect
html 응답으로 HTML을 반호나할 때는 content-type을 text/html로 지정