아무코딩

[웹] Servlet 본문

Spring+웹

[웹] Servlet

동 코 2020. 4. 23. 21:07

자바 웹 어플리케이션(Java Web Application)

WAS에 설치(deploy)되어 동작하는 어플리케이션입니다.

자바 웹 애플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다.

  • WAS 에 의해서 동작.

자바 웹 어플리케이션의 폴더 구조

img

  • WEB-INF
    • web.xml
      • 웹어플리케이션에 대한 정보를 가지고 있다.
      • web application의 설정을 위한 deployment descriptor
      • Deploy할 때 Servlet의 정보를 설정해준다.
      • 브라우저가 Java Servlet에 접근하기 위해서는 WAS(Ex. Tomcat)에 필요한 정보를 알려줘야 해당하는 Servlet을 호출할 수 있다.
        • 배포할 Servlet이 무엇인지
        • 해당 Servlet이 어떤 URL에 매핑되는지.

서블릿이란?

클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램.

(클라이언트의 HTTP요청에 대해 특정 기능을 수행, HTML문서를 생성 등의 응답을 하는 인터넷 서버 프로그램.)

  • 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할입니다.

  • 서블릿을 정의해보면

    • 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스입니다.
    • 서블릿은 HttpServlet 클래스를 상속받아야 합니다.
    • 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용해야 합니다.예를 들어, 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현합니다.

서블릿 컨테이너

서블릿을 관리해주는 역할

  • 통신 지원
    서블릿과 웹 서버가 통신할 수 있는 손쉬운 방법을 제공한다. 우리가 통신을 한다고 생각할 때 소켓을 만들고, 특정 포트를 리스닝하고, 연결 요청이 들어오면 스트림을 생성해서 요청을 받는다고 알고 있는데 이 과정을 서블릿 컨테이너가 대신해주는 것이다. 서블릿 컨테이너는 이런 통신 과정을 API로 제공하고 있기 때문에 우리가 쉽게 사용할 수 있다.

  • 생명주기 관리
    서블릿 컨테이너가 기동 되는 순간 서블릿 클래스를 로딩해서 인스턴스 화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 호출한다. 만약 서블릿의 생명이 다하는 순간 가비지 컬렉션을 진행한다.

  • 멀티스레딩 관리
    서블릿 컨테이너는 해당 서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다. 즉 동시의 여러 요청이 들어온다면 멀티스레딩 환경으로 동시다발적인 작업을 관리한다.

  • 선언적인 보안관리
    서블릿 컨테이너는 보안 관련된 기능을 지원한다. 따라서 서블릿 코드 안에 보안 관련된 메소드를 구현하지 않아도 된다.

  • JSP 지원

대표적으로 톰캣이 서블릿 컨테이너

톰캣은 웹서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다.

프로그래머가 작성하는 서블릿 클래스는 추상 클래스 HttpServlet에 있는 메소드 중 클라이언트 사용자가 요청한 정보에 따라 처리해야 할 메소드를 오버라이딩 해서 구현한다.

doGet() : 클라이언트 HTTP GET 요청에 대해 처리.

doPost() : 클라이언트 HTTP POST 요청에 대해 처리.

doPut() : 클라이언트 HTTP PUT 요청에 대해 처리.

doDelete() : 클라이언트 HTTP DELETE 요청에 대해 처리.

init() : 서블릿의 생명주기 처리로 가장 처음에 실행.

destory() : 서블릿의 생명주기 처리로 서블릿 객체를 메모리에서 제거할 때 마지막으로 실행.

서블릿 생명주기 (servlet Life Cycle)

서블릿 생성 -> init() -> { service() -> doXxx() } -> destory() -> 서블릿 종료 ( {} 반복 )

서블릿 클래스 객체가 생성되면 가장 처음에 메소드 init()이 실행되며, 클라이언트의 요청이 들어 올 때마다 service() 메소드가 실행되어 요청에 맞는 메소드 doXxx()를 생행한다. 마지막으로 서버가 종료되거나 서블릿을 더 이상 사용할 필요가 없어 서블릿 객체를 메모리에서 제거할 때, 마지막으로 메소드 destory()가 실행되어 사용하던 자원을 정리하고 종료된다.

init()과 destory()는 서블릿의 생성과 종료 시 단 한 번이 실행되며 service() 메서드는 사용자의 요청이 있을 때마다 반복적으로 실행된다.

Reference

'Spring+웹' 카테고리의 다른 글

[스프링] DI 방식 두가지 비교 (생성자 vs 세터 메서드)  (0) 2020.05.12
스프링 DI  (0) 2020.04.26
[웹/부스트코스] Servlet Lifecycle  (0) 2020.04.24
[웹/FE] class와 id  (0) 2020.04.21
[스프링] 스프링(Spring)이란?  (0) 2020.04.21
Comments