-
[스프링 MVC 1] 2. 서블릿INFLEARN/스프링 MVC 1편 2021. 10. 16. 23:40
2. 서블릿
[강의 정리] 김영한님 :: 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
1. 프로젝트 생성
# IntelliJ 세팅
- Build Tools : Gradle -> IntelliJ IDEA
- Lombok plugin 설치
- Annotation Processors > Enable annotation processing
2. Hello 서블릿
# 스프링 부트 + 서블릿 환경 구성
- 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설정하고 해야할 작업들이 많아, 이 강의에서는 톰캣 서버를 내장하고 있는 스프링 부트를 사용하여 서블릿 코드를 실행
- @ServletComponentScan : 스프링 부트에서 지원하는 서블릿 자동 등록 애노테이션
# 서블릿 등록하기
- @WebServlet : 서블릿 애노테이션 (중복 불가)
- @WebServlet(name="helloServlet", urlPatterns = "/hello")
- name : 서블릿 이름
- urlPatterns : URL 매핑
- @WebServlet(name="helloServlet", urlPatterns = "/hello")
- HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행 (단축키 ctrl + O)
- protected void service(HttpServletRequest request, HttpServletResponse response)
- localhost:8080/hello?username=word 와 같이 쿼리 파라미터까지 넣어서 실행 가능
# HTTP 요청 메시지 로그 확인
- application.properties 파일에 logging.level.org.apache.coyote.http11=debug 추가 하면 로그 확인 가능 (개발계에서만 사용)
# 서블릿 컨테이너 동작 방식
- 내장 톰캣 서버 생성
- 스프링 부트 실행 -> 내장 톰캣 서버 실행
- 톰캣 서버 (서블릿 컨테이너) -> 서블릿 생성
- 서블릿 컨테이너 내부에 -> helloServlet 생성
- HTTP 요청, HTTP 응답 메시지
- 웹 애플리케이션 서버의 요청 응답 구조
- HTTP 요청 -> request, response 객체 생성
- helloServlet 호출 (service 메서드 / request,response 객체 전달)
- response 객체 정보 HTTP로 응답 생성
3. HttpServletRequest - 개요
# HttpServletRequest 제공 기본 기능
- start line 정보
- 헤더 정보
- 헤더 편리한 정보
- host, accept-language (locale), cookie, content, ..
- 기타 정보
- remote, local
단축키 ctrl + T (extract method)
4. HTTP 요청 데이터 - 개요
# GET - 쿼리 파라미터
- /url?username=hello
- 메세지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
- ex) 검색, 필터, 페이징 등
# POST - HTML Form
- content-type: application/x-www-form-urlencoded
- 메시지 바디에 쿼리 파라미터 형식으로 전달 ?username=hello
- ex) 회원 가입, 상품 주문 등의 HTML FROM
# HTTP message body
- HTTP API에서 주로 사용 (JSON, XML, TEXT)
- 데이터 형식은 주로 JSON 사용 (POST, PUT, PATCH)
5. HTTP 요청 데이터 - GET 쿼리 파라미터
# URL 쿼리 파라미터 사용해서 데이터 전달
- username=hello, age=20
- http://localhost:8080/request-param?username=hello&age=20
- 전체 파라미터 조회
- request.getParameterNames().asIterator().forEachRemaining(paramName -> System.out.println(paramName + " = "+ request.getParameter(paramName)));
- 단일 파라미터 조회 (request.getParameter())
- String username = request.getParameter("username");
String age = request.getParameter("age");
- String username = request.getParameter("username");
- 복수 파라미터 조회 (request.getParamterValues() / 거의 안씀)
- String[] usernames = request.getParameterValues("username");
6. HTTP 요청 데이터 - POST HTML FORM
# 메세지 바디에 쿼리 파라미터 형식으로 데이터 전달
- username=hello&age=20
- 요청 URL : http://localhost:8080/request-param
- content-type: application/x-www-form-urlencoded
- meesage body : username=hello&age=20
- application/x-www-form-urlencoded 형식은 GET 쿼리 파라미터 형식과 같음
- 클라이언트(웹 브라우저) 입장에서는 GET, POST 차이가 있지만, 서버 입장에서는 같은 형식이므로 request.getParamter()로 구분없이 사용 가능
+) content-type은 HTTP 메시지 바디 형식 제공
- GET : URL 쿼리 파라미터 형식, 메시지 바디 X -> content-type 없음
- POST : HTTP 메시지 바디 사용 ->. content-type 지정 필수
7. HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트
# HTTP message body에 데이터 직접 담아서 요청
- 데이터 형식은 주로 JSON (XML : 레거시..)
- POST, PUT, PATCH
- InputStream (bytecode) -> StreamUtils (to String)
- 문자 전송
- POST : http://localhost:8080/request-body-string
- content-type: text/plain
- message body: hello
- 결과 messageBody = hello
8. HTTP 요청 데이터 - API 메시지 바디 - JSON
# JSON 형식 전송
- JSON 형식 전송
- POST : http://localhost:8080/request-body-json
- content-type: application/json
- message body : {"username" : "hello", "age" : 20}
- 결과 messageBody = {"username" : "hello", "age" : 20}
- JSON 결과 파싱해서 자바 객체로 변환 하려면 JSON 라이브러리 Jackson 사용 (ObjectMapper)
9. HttpServletResponse - 기본 사용법
# HttpServletResponse 역할 - HTTP 응답 메시지 생성
- HTTP 응답코드 지정
- 헤더 생성
- 바디 생성
- 편의 기능 제공
- Content-Type, 쿠키, Redirect
10. HTTP 응답 데이터 - 단순 텍스트, HTML
# 단순 텍스트, HTML
- 단순 텍스트 응답
- wirter.println("ok")
- HTML 응답
- Content-type : text/html
11. HTTP 응답 데이터 - API JSON
# API JSON
- Content-type : application/json
- Jackson 라이브러리의 objectMapper.writeValueAsString() (객체 -> JSON 문자)
'INFLEARN > 스프링 MVC 1편' 카테고리의 다른 글
[스프링 MVC 1] 6. 스프링 MVC - 기본 기능 (0) 2021.11.05 [스프링 MVC 1] 5. 스프링 MVC - 구조 이해 (0) 2021.10.27 [스프링 MVC 1] 4. MVC 프레임워크 만들기 (0) 2021.10.23 [스프링 MVC 1] 3. 서블릿, JSP, MVC 패턴 (0) 2021.10.18 [스프링 MVC 1] 1. 웹 애플리케이션 이해 (0) 2021.10.13