📌서블릿이란?
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 |