
✅서블릿(Servelt)이란?
- Java를 사용해 동적 웹페이지를 생성하는 서버측 프로그램
- 서블릿은 WAS가 웹브라우저로부터 요청을 받으면, 해당 요청 수행 후 결과를 웹브라우저에게 전달함.
(ex. 로그인 시, 클라이언트가 입력한 아이디/비번을 확인 후, 결과를 응답 )
- 서블릿을 구현하기 위해선, HttpServlet 이라는 추상 클래스를 상속 받아야한다.
- 서블릿을 만들어도 서블릿은 스스로 작동하지 못함 → 따라서 서블릿 관리자(서블릿 컨테이너)가 필요함.

📌서블릿 컨테이너 (서블릿 관리자)
- 서블릿 클래스의 규칙에 맞게 서블릿을 담고 관리해주는 컨테이너 (서블릿이 배포된 컨테이너)
- 서블릿의 생명주기(생성/실행/소멸)를 관리하며, 서블릿 대신 웹서버와 데이터를 주고 받음.
- 웹 기술을 기반으로 동작하는 *애플리케이션 서버를 WAS(Web Applicaiton Server)라고 부름.
- WAS가 웹 브라우저로부터 Servlet 요청을 받을 시, 아래 객체들을 생성한 후, 생성된 객체들을 Servlet에게 전달.
* 요청 받은 정보 → HttpServletRequest 객체 생성/정보 저장.
* 응답 반환할 정보 → HttpServletResponse 객체 생성 (빈 객체)
* 애플리케이션 서버 : 서버측 애플리케이션의 생명주기를 관리하는 프로그램
⭐서블릿 컨테이너 기능
| 기능 | 설명 |
| 웹서버와 통신 지원 | 서블릿 컨테이너는 서블릿-웹서버 간의 손쉬운 통신을 지원. |
| 서블릿 생명주기 관리 | 서블릿의 생성/호출/고멸을 관리하며, 자원의 낭비를 방지함. |
| 멀티쓰레드 지원/관리 | 동시요청을 위한 멀티쓰레드 처리 지원. |
| 선언적인 보안관리 | 서블릿 컨테이너 이용시 보안 관련 내용을 구현해 놓지 않아도 됨. |
📌HttpServlet 클래스
: HTTP 프로토콜을 사용하는 웹브라우저에서 서블릿 기능 수행.
- 서블릿 구현을 위해 HttpServelt을 상속받아야함.
- HttpServlet이 보유한 doGet(), doPost() 모두 HttpServletResquest/HttpServletResponse 객체를 매개변수로 받음.
📌HttpServletRequest 클래스
- HTTP 요청 정보를 서블릿에게 전달하기 위한 목적으로 사용.
- 클라이언트 요청, 쿠키, 세션, URI/URL, 헤더 정보, 파라미터 등의 정보를 읽는 메서드 보유.
- Body의 Stream 을 읽는 메서드 보유.
📌HttpServletResponse 클래스
- HTTP 응답 정보(요청 처리 결과)를 서블릿에게 전달하기 위한 목적으로 사용.
- 서블릿은 HttpServletRepsone 객체에 Content Type, 응답코드, 응답 메세지 등을 담아서 전송.
✅서블릿 동작 과정

1 ~ 3. 서블릿 작성 및 등록
4. 서버가 클라이언트로 부터 요청을 받으면, 해당 요청을 WAS(서블릿 컨테이너)에게 위임.
WAS는 HttpServletResquest / HttpServletResponse 객체 생성.
5. WAS가 각 요청에 따라, 해당하는 서블릿 실행.
6~7. 요청한 서블릿 메서드 [ doGET() / doPost() ] 호출 / DB 연동.
8. 동적 페이지 생성 후, HttpServletResponse 객체에 응답 담아 전송.
9. HttpServletResquest / HttpServletResponse 객체 소멸
참고자료 :
https://velog.io/@oliviarla/HttpServletRequest-HttpServletResponse-%EA%B0%9D%EC%B2%B4%EB%9E%80
https://velog.io/@green9930/HttpServletRequest-HttpServletResponse-%EC%A0%95%EB%A6%AC
https://steady-coding.tistory.com/462
https://velog.io/@khsb2012/Servlet%EA%B3%BC-Servlet-Container
https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80