Servlet
정의
클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 웹 프로그래밍 기술
- Server Side Applet의 약어
- applet: 플러그인의 하나, 전용 위젯 엔진이나 더 큰 프로그램 범위 내에서 실행되는 특정한 작업을 수행하는 조그마한 응용 프로그램
- 웹 컨테이너에서 수행되는 JAVA 클래스
- 자바로 구현된 CGI(Common Gateway Interface)
특징
- web application component
- 클라이언트의 요청에 동적으로 작동한다.
- 웹서버는 정적인 페이지만 제공한다. 웹서버가 동적인 페이지를 제공할 수 있도록 도와준다.
- Java Thread를 이용하여 동작한다.
- MVC 패턴의 Controller
- extends javax.servlet.http.HttpServlet
- UDP보다 느린 처리속도
- 자바 소스코드 속에 HTML 코드가 들어가는 형태
- html로 응답한다.
- html 변경시 servlet을 재컴파일해야한다.
생명 주기
서블릿의 생성과 소멸은 서블릿 컨테이너가 관리(호출)한다.
- init()
- 메모리에 해당 서블릿이 없다면 Servlet Container가 요청을 처리할 Servlet instance 생성, 메모리에 적재
- 자동 호출되어 서블릿이 초기화해줄 작업을 수행한다
- service()
- 클라이언트의 요청 처리
- 요청에 따라 doGet(), doPost()로 분기된다.
- 요청인 ServletRequest 객체와 응답으로 내어줄 결과 페이지 ServletResponse 객체를 매개변수로 사용한다.
- 서비스 후
- 컨테이너에 의해 thread pool에 들어간다. 나중에 다시 실행될 수 있다.
- 메모리에서 내려가서 garbage collection이 된다.
- destroy()
객체는 1개, 스레드는 각 요청마다 생성된다.
Servlet Container
정의
서블릿을 관리해주는 컨테이너
특징
- 서블릿은 스스로 작동할 수 없고, 서블릿을 관리, 작동해주는 것이 필요하다.
- 서블릿 = 역할 정의서, 컨테이너 = 정의서를 보고 수행
- 웹서버와 소켓 통신
- ex> Tomcat
역할
- 웹서버와의 통신 지원
- 일반적으로 소켓 통신을 할 경우 listen, accept이 필요하다.
- 위와 같은 복잡한 과정을 생략하고 서블릿에 구현해야할 비즈니스 로직에 집중할 수 있게 된다.
- 서블릿 생명주기 관리
- 서블릿 클래스를 인스턴스화, 초기화 메서드 호출, 요청에 따른 적절한 서블릿 메서드 호출, garbage collection 진행
- 멀티쓰레드 지원 및 관리
- 컨테이너는 요청마다 새로운 자바 스레드 생성
- 다중 스레드 생성 및 운영 - 안정성
- 선언적인 보안 관리
- 보안 관련 내용을 자바 소스나 서블릿에 구현하지 않는다.
- xml에 기록
동작 과정
- 클라이언트가 URL을 입력하면 Servlet Container로 HTTP REQUEST가 전송된다.
- 요청을 받은 컨테이너는 HttpServletRequest, HttpServletResponse를 생성한다.
- web.xml을 기반으로 요청 URL이 어느 서블릿에 해당하는지 찾는다.
- 해당 서블릿에서 service() 호출한다.
- 요청이 GET인지 POST인지에 따라 doGet() 혹은 doPost() 호출한다.
- 동적 페이지를 생성한 후 HttpServletReponse 객체에 응답을 보낸다.
- 응답 후 HttpServletRequest, HttpServletResponse를 소멸시킨다.
출처