* Packaging을 Jar가 아닌 War로 쓰는 이유: JSP 이용을 위해
HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 service 메서드를 실행한다
서블릿 HTTP 요청이 오면 WAS가 그니까 서블릿 컨테이너가 REQUEST, RESPONSE 객체를 만들어서 서블릿에 던져준다
request.getParameter로 쿼리파라미터를 받는다
response에 값을 넣으면 웹 브라우저에 응답하는 response http 응답 메세지에 담겨서 나가게 된다
스프링부트를 실행하면, 내장 톰캣 서버를 띄어준다.
톰캣 서버는 내부에 서블릿 컨테이너를 가지고 있어서 서블릿을 생성해준다.
서버는 request response 객체를 만들어서 helloservlet을 호출해주고 필요한 작업을 하고 종료된다
response 데이터를 가지고 종료되어서 그 객체 정보로 HTTP 응답 생성한다
HttpServletRequest 역할
서블릿은 개발자가 HTTP 요청 메세지를 편리하게 사용할 수 있도록 개발자 대신 HTTP 요청 메세지를 파싱한다
그 결과를 HttpServletRequest 객체에 담아서 제공한다
HTTP 요청 메세지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에는 주로 3가지 방법이 있다.
1. GET - 쿼리 파라미터 : /url?username=hello&age=20 처럼 메세지 바디 없이 URL 쿼리 파라미터에 데이터를 포함해서 전달
2. POST - HTML Form : 메세지 바디에 쿼리 파라미터 형식으로 전달한다 username=hello&age=20
3. HTTP message body : 메세지 바디에 데이터를 직접 담아서 요청한다. HTTP API에 주로 사용, 주로 JSON 형식으로
HTTP 요청 데이터 - GET 쿼리 파라미터
메세지 바디 없이 ' 쿼리 파라미터 ' 를 사용해서 데이터를 전달한다.
URL에 ?를 시작으로 보낼 수 있고, 추가 파라미터는 &로 구분한다.
.getParameter("username") - username 단일 파라미터를 조회함
.getParameterValues("username") - 이름이 같은 복수 파라미터 조회
HTTP 요청 데이터 - POST HTML Form
메세지 바디에 쿼리 파라미터 형식으로 데이터를 전달한다.
POST의 HTML Form을 전송하면, 웹 브라우저는 HTTP 메세지를 만든다.
content-type인 application/x-www-form-urlencoded 형식은 GET에서 살펴본 쿼리 파라미터 형식과 동일하다.
그래서 쿼리 파라미터 조회 메서드를 그대로 사용하면 된다.
서버 입장에서는 GET이랑 HTML 형식이 둘 다 동일하므로 .getParameter()로 편리하게 조회 가능하다.
HTTP 요청 데이터 - API 메세지 바디 - JSON
HTTP 요청 데이터에 메세지 바디에 내가 원하는 데이터를 직접 담아서 서버에 전송하는 것이다
HTTP API에서 주로 사용하며 데이터 형식은 주로 JSON이다.
스타트라인 -> 헤더 -> 메세지 바디
JSON 형식으로 파싱할 수 있게 데이터 객체를 하나 생성한다
GetInputStream으로 stream 가져오고 streamUtils.copyToString으로 꺼내온다 -> 메세지 바디 전체
objectMapper.readValue로 객체 꺼내옴
* JSON 결과를 파싱해서 자바 객체로 변환하려면, JSON 변환 라이브러리(Jackson, Gson ...) 를 추가해서 사용해야한다
스프링 부트로 Spring MVC 선택시 기본으로 Jackson 라이브러리 'ObjectMapper'를 함께 제공한다
HttpServletResponse - 기본 사용법
주요 역할은 HTTP 응답 메세지를 생성하는 것이다. - HTTP 응답코드 지정, 헤더 생성, 바디 생성
'spring' 카테고리의 다른 글
[Spring MVC 1편] MVC 프레임워크 만들기 (2) | 2024.08.08 |
---|---|
[Spring MVC 1편] 서블릿, JSP, MVC 패턴 (0) | 2024.08.07 |
[Spring MVC 1편] 웹 애플리케이션 이해 (4) | 2024.07.30 |
Port 8080 was already in use. 에러 해결 (7) | 2024.07.25 |
게시판 프로젝트- 2 (4) | 2024.07.25 |