클라이언트의 요청을 처리
하고결과를 반환
하는Servlet 클래스
의규칙
을 지킨자바 웹 프로그래밍 기술
자바를 사용
하여웹을 만들기 위해 필요한 기술
(자바 기반
-->JDK / JVM 필수
): 즉,
java를 이용해 웹개발
을 하기 위해서 필요한가장 기본적인(low한) 기술
이Servlet
클라이언트 요청
에 대해동적으로 작동
하는웹 애플리케이션 컴포넌트
html을 사용
하여 요청에 응답Java Thread
를 이용하여 동작MVC 패턴
에서Controller
로 이용
Client
가HTTP 요청
WAS
는HttpServletRequest
/HttpServletResponse
객체를생성
WAS
는요청 URL에 해당
되는서블릿 객체
를호출
(서블릿을 지원하는 WAS
==서블릿 컨테이너
)개발자
는HttpServletRequest
를 통해요청 정보를 편리하게 사용
====비즈니스 로직 수행====
개발자
는HttpServletResponse
를 통해응답 정보를 작성
WAS
는HttpServletResponse
를 통해HTTP Response Message 생성 후 Client에 전달
서블릿
을관리
하기 위한모든 작업
을 수행(생성 / 호출 / 관리)
java thread
를사용
해서서블릿을 호출
톰캣(Tomcat)
처럼서블릿을 지원하는 WAS
를서블릿 컨테이너
라고 함서블릿 객체
는싱글톤
으로관리
고객의 요청
이 올 때 마다생성하는것
은비효율적이기 때문
공유 변수 사용
에주의
해야 한다서블릿 컨테이너가 종료
-->서블릿도 종료
동시 요청
을 위한멀티 쓰레드(Multi Thread)
처리를 지원
실제 우리가 WAS를 직접 구현
하면많은 사전 과정
을구현
해야 한다
TCP/IP 연결
&소켓 연결
HTTP request 메시지 파싱
HTTP response 메시지 작성
TCP/IP
및소켓 연결 종료
Servlet을 지원하는 WAS
즉,서블릿 컨테이너
는이러한 과정들을 대신 수행
해준다
-->개발자
는비즈니스 로직에 집중
할 수 있다!!
starter
를 이용한프로젝트 구성
(Packaging
을 반드시War로 설정
-->후에 JSP를 사용
하기 위해 필요)
lombok
설정
lombok 플러그인 설치
Preferences
-->Annotation Processors
검색 -->Enable annotation processing
체크
Postman
설치
:API 요청을 보낼 수 있는 툴
[
@ServletComponentScan
설정 - 기본설정 ]:
Springboot
환경에서서블릿을 직접 등록
해서 사용할 수 있도록 필요한어노테이션
[ 서블릿 등록 ]
- 단계
- 1)
@WebServlet
으로이름
/연결 url
지정
- 2)
HttpServlet 상속
- 3)
protected 접근지정자
를 갖는service 메소드
Override
- 4)
비즈니스 로직 작성
HTTP request 메시지
를편리하게 사용
할 수 있도록개발자 대신 파싱
해서제공된 객체
HttpServletRequest
를 사용해서HTTP request message
의다양한 정보
를조회
할 수 있음
start-line
headers
body
- 추가적으로 다양한
부가 기능도 제공
임시 저장소 기능
: 해당 HTTP 요청이 시작되고 끝날 때 까지 유지되는임시저장소
- 저장 :
req.setAttribute(name, value)
- 조회 :
req.getAttribute(name)
세션 관리 기능
req.getSession(create: true)
( start-line 정보 조회 )
( Header 정보 조회 )
( 기타 정보 조회 )
HTTP request
와상관 없
는추가적인 정보
들
( 분류 )
쿼리 파라미터 (주로 GET)
HTML Form (POST)
HTTP request message
의body
(POST / PUT / PATCH
)
단순 텍스트
JSON
( 쿼리 파라미터 & HTML Form )
쿼리 파라미터
http request message
의body가 없이
URL
의쿼리 파라미터
에데이터를 포함해서 전달
- ex)
/url?username=hello&age=20
주 사용
:검색 / 필터 / 페이징
HTML Form
HTML의 Form형식
에서 바로데이터를 넘기는 방식
무조건 POST로 요청
을 하기 때문에쿼리 파라미터
와 다르게Http request message body로 데이터 전송
데이터의 형식
은쿼리 파라미터
와동일한 형식
이라서같은 방법으로 조회
할 수 있다!Content-Type
:application/x-www-form-urlencoded
반드시 지정!
단일 파라미터 조회
:req.getParameter()
사용복수 파라미터 조회
:req.getParameterValues()
사용
( HTTP reqeust message의 body ) - 단순 text
단순 데이터
를Stream
으로 주고받는 경우byte코드
를우리가 읽을 수 있는 문자(String)
으로변환
해야 한다
(Charset
을지정
해줘야 한다 --> 여기서는UTF_8
)
( HTTP reqeust message의 body ) - JSON
입력받은 문자
를jackson 라이브러리의 objectMapper
를 통해JSON 형식
으로바꿔줘야 한다
HelloData
:JSON객체로 변환된 정보
를 받기 위한임시 데이터 구조
- 지금은 이렇게
stream
을JSON으로 바꾸고
매우할게 많아보이지만
,
실제로는 Spring MVC써서 편리하게 사용
할 수 있음 -->걱정 X
HTTP response 메시지
를편리하게 만들
수 있도록 제공되는 객체
status-line
:statusCode
지정response-header
:데이터 타입 등등을 지정
header 편의 메서드
:setHeader
로텍스트로 필드를 삽입
하는 것이 아니라하나하나 각각 setter로 지정
(아래 그림
)