본문 바로가기

Spring/Spring MVC

(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

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com