(SERVLET) Servlet 개요
스프링 Web MVC는 서블릿 기반의 웹 애플리케이션을 쉽게 만드는데 도와주는 FrameWork
그렇다면 Servlet은 무엇인가?
서블릿 (Servlet)
-
자바 엔터프라이즈 에디션은 웹 애플리케이션 개발용 스펙과 API 제공.
자바 플랫폼, 엔터프라이즈 에디션(Java Platform, Enterprise Edition; Java EE)은 자바를 이용한 서버 측 개발을 위한 플랫폼이다. Java EE 플랫폼은 PC에서 동작하는 표준 플랫폼인 Java SE에 부가하여, 웹 애플리케이션 서버에서 동작하는 장애 복구 및 분산 멀티티어를 제공하는 자바 소프트웨어의 기능을 추가한 서버를 위한 플랫폼이다. 이전에는 J2EE라 불리었으나 버전 5.0 이후로 Java EE로 개칭되었다.
이러한 Java EE 스펙에 따라 제품으로 구현한 것을 웹 애플리케이션 서버 또는 WAS라 불린다.
API 중 가장 핵심적인 class : HttpServlet
-
요청 당 스레드 (만들거나, 풀에서 가져다가) 사용
한 요청을 처리할 때마다 새로운 프로세스를 만들고 죽이는 식으로 동작하는 것이 아닌 한 프로세스를 공유하는 스레드를 만들어 요청을
처리한다.
서블릿 등장 이전에 사용하던 기술인 CGI (Common Gateway Interface)
-
요청 당 프로세스를 만들어 사용
서블릿의 장점 (CGI에 비해)
-
빠르다.
-
플랫폼 독립적
-
보안
-
이식성
서블릿 엔진 또는 서블릿 컨테이너 (톰캣, 제티, 언더토,...)
- 서블릿 스펙을 구현한 컨테이너
- 스펙에 기반하여 서블릿을 어떻게 초기화하고 어떻게 초기화하고 어떻게 사용해야 하는지 서블릿의 라이프사이클을 관리할지 알고 있다.
- 서블릿 애플리케이션을 우리가 직접 실행할 수 없다. (서블릿 컨테이너가 실행)
-
세션 관리
-
네트워크 서비스
-
MIME 기반 메시지 인코딩 디코딩
-
서블릿 생명주기 관리
-
...
서블릿 생명주기
-
서블릿 컨테이너가 서블릿 인스턴스의 init() 메서드를 호출하여 초기화한다.
-
최초 요청을 받았을 때 한번 초기화하고 나면 그다음 요청부터는 이 과정을 생략한다.
-
서블릿이 초기화된 다음부터 클라이언트의 요청을 처리할 수 있다. 각 요청은 별도의 스레드로 처리하고 이때 서블릿 인스턴스의 service() 메서드를 호출한다.
-
이 안에서 HTTP 요청을 받고 클라이언트로 보낼 HTTP 응답을 만든다.
-
service()는 보통 HTTP Method에 따라 doGet(), doPost() 등으로 처리를 위임한다.
-
따라서 보통 doGet() 또는 doPost()를 구현한다.
-
서블릿 컨테이너 판단에 따라 해당 서블릿을 메모리에서 내려야 할 시점에 destroy()를 호출한다.
public class HelloServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
resp.getWriter().write("Hello Servlet");
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
코드 참조
https://github.com/mike6321/Spring/tree/master/SpringMVC/sampleservletpre