📌서블릿이란?

 

WAS 의해 관리되는 객체의 형태로, 웹상에서 발생한 요청을 받고, 그에 대한 응답을 전송할 수 있는 객체들의 요건에 대한 명세(spec) 

 

 1. 서블릿 기초

 

서블릿은 JSP표준에 앞서 자바에서 웹 어플리케이션 개발을 위해 만들어진 표준으로, 규약에 따른 서블릿 개발 과정은 

다음과 같다.

  - 서블릿 규약에 따라 자바 코드를 작성(HttpServlet 상속 후 필요 메소드 재정의)

  - 자바 코드를 컴파일 하여 클래스 파일 생성

  - 클래스 파일을 /WEB-INF/classes 디렉토리 패키지 구조에 따라 저장

  - web.xml 파일에 서블릿 클래스 등록 및 리퀘스트와의 매핑

    (서블릿 3.0 규약부터 @WebServlet 어노테이션으로 대체)

  - 톰캣 등의 컨테이너 재실행(서블릿 리로딩 기능이 있는 경우 생략)

  - 웹 브라우저에서 요청 처리 결과 확인

 

 WAS(Web Application Server), Web Container, Servlet Container, JSP Container
   * Containr ? 내부의 관리객체(Component)에 대한 생명주기 관리사(운영 주체), 
                     객체 관리 중 발생하는 이벤트들에 대한 콜백(callback)구조를 가짐
                      $("#btn").on('click function(실행코드)} 
    - Servlet Containr ? 내부의 관리객체(Servlet)에 대한 생명주기 관리사(운영 주체)
    - JSP Containr ? 내부의 관리객체(JSP)에 대한 생명주기 관리사(운영 주체)

   *서블릿의 callback 메소드 종류

    - lifecycle callback :  생명주기 내에서 단 한 번씩 호출 ex) init, destroy

    - request callback : 요청 발생시마다 각 쓰레드 내에서 반복 호출되는 메소드

                                 ex) service , doxxx(service 에 의해 호출되고, request method에 따라 선택됨) 

        - 콜백 메소드 호출 순서

          객체 생성 직후 init 호출 -> 리퀘스트 발생시 service 호출 -> service메소드내에서 현재 리퀘스트의 http method

           구분 후 해당 doxxx 메소드 호출 -> 객체 소멸 직전 destroy 호출

 

 *서블릿 개발 단계
   1. HttpServlet 을 상속받은 구현체 정의
     - 필요한 callback 메소드 재정의
   2. compile : /WEB-INF/classes(context 's classpath)에 배포  
   3. 컨테이너에 등록
    - 2.x : web.xml -> servlet -> servlet-name, servlet-class, loadstartup, init-param

              - servlet-name : 컨테이너 내에서 관리되는 서블릿 인스턴스의 이름을 지정

              - servlet-class : 컨테이너 내에서 관리될 서블릿 클래스를 지정

              - init-param : 서블릿의 초기화 파라미터 설정(param-name, param-vlaue 로 구성)

              - load-on-startup : 서블릿의 인스턴스 생성 순위 지정                   
    - 3.x : @webServlet

   4. 서블릿 매핑
    - 2.x : web.xml -> servlet-mapping => servlet-name, url-pattern
    - 3.x : @WebServlet(value, urlPatterns)
    url : 
    경로 매핑 : ex) image/imageForm.do(절대 경로)
    확장자 매핑 : ex) *.l306, *.jsp (경로를 포함하지 않는다.)
    /image/*.l306(X)

 

 MIME(Multipurpose Internet Mail extensions)

  : 원래 목적은 이메일의 첨부되는 데이터의 타입(확장자)를 지정하기 위한 텍스트였으며,

    현재는 메일 뿐만 아니라 HTTP 등의 프로토콜에서 응답 데이터의 타입을 설명하기 위한

    목적으로 사용되고 있다.

    mainType/subType;charset=XXX
     ex) text/html;charset=UTF-8, text/plain;charset=UTF-8
           text/javascript, text/css
          image/gif, video/mpeg, audio/mp4

 

 2. URL 패턴 매핑 규칙

 

  웹 컨테이너에 등록된 서블릿은 웹상의 리퀘스트르 직접 처리할 수 있도록 url과의 매핑 과정이 필요하다

  web.xml에 직접 등록과정을 거치는 경우, <url-pattern> 엘리먼트를 통해 매핑 설정을 하고 @WebServlet

  을 사용하는 경우, 어노테이션의 속성으로 매핑 설정을 할 수 있다.

 

   (1) 매핑 규칙의 종류

      1. '/'로 ㅣ작하고 '/*' 로 끝나는 패턴은 경로 매핑을 위해 사용

      2.'*./' 로 시작하는 패턴은 확장자에 대한 매핑을 할 때 사용

      3. 오직 '/'만 포함하는 경우 어플리케이션의 기본 서블릿의로 매핑

 

 3. 서블릿 동작 과정(Servlet Contatiner의 역할)

 

    (1) 서블릿 요청 처리 과정

         등록 및 매핑 과정을 거친 서블릿이 매핑된 url을 사용한 요청을 처리하는 과정

         매핑 url패턴에 맞는 리퀘스트 발생 ->

         서블릿 컨테이너에서 매핑 서블릿의 인스턴스 검색 있다면: 해당 서블릿의 콜백 메소드 호출 

                                                                                           없다면: 해당 서블릿의 인스턴스 생성 -> 

                                                                                           서블릿의 콜백 메소드 호출

     (2) 서블릿 동작 과정에서 서블릿 컨테이너의 역할

       서블릿 컨테이너는 웹 어플리케이션 서버에서 Http 요청을 받아 처리하는 기초 역할을 담당한다.

       앞서 살펴본 서블릿의 동작 절차를 보면, 등록된 url-pattern에 매핑되는 리퀘스트를 서블릿에게

       처리 위임하기 위해 인스턴스를 생성 및 관리하며 적절한 형태의 콜백 메소드(service)를 호출해주는

       역할을 담당하는 것이 곧 서블릿 컨테이너라 할 수 있다.

 

4. 서블릿의 단점 및 JSP 사용 이유

 

    1. 스크립트 방식에 비해 구현 후 반드시 컴파일 및 등록과 매핑이라는 과정을 거쳐야 한다.

    2. 서블릿 리로딩 기능이 없는 WAS의 경우에, 등록 후 웹 리퀘스트를 받기 위해서는 컨테이너를 재시작

        해야 한다.

    3. 어플리케이션 구현 소스 내에 구성 스크립트 소스가 들어가므로 웹 디자이너와 웹 개발자 사이의 역할 분담

        및 협업이 자연스럽지 못한 단점이 있다

'웹기반 애플리케이션' 카테고리의 다른 글

JSP(Java Server Page)란?  (0) 2023.03.02
자원의 종류와 식별 방법, URI(URL,URC,URN)  (0) 2023.02.27
SOLID, MODEL1과 MODEL2의 차이  (0) 2023.02.24
Client/Server 와 서블릿(Servlet)  (0) 2023.02.21
톰캣이란?  (0) 2023.02.21

+ Recent posts