1. 개념
- CGI : 웹 서버와 웹 어플리케이션 사이에 데이터를 주고 받기 위한 규칙을 의미함 / 컴파일 방식의 CGI 프로그램(웹서버->기계어 실행)과 인터프리터 방식 CGI 프로그램(웹서버->스크립트 엔진 실행->소스 해석)으로 구분
- 서블릿 : Java로 만든 웹 어플리케이션을 서블릿이라 함(Server와 Applet의 합성어) / 클라이언트에게 서비스를 제공하는 작은 단위의 서버 프로그램
- 서블릿 컨테이너 : 서블릿의 생성, 실행, 소멸까지 서블릿의 생명주기를 관리하는 프로그램 / 클라이언트로부터 요청이 들어오면, 서블릿 컨테이너는 호출 규칙에 따라 서블릿 메서들을 호출하며 호출 규칙은 javax.servlet.Servelt 인터페이스에 정의됨
- JavaEE : 서블릿, JSP를 만들고 실행하는 규칙, EJB(Enterprise JavaBeans) 분산 컴포넌트에 관한 규칙, 웹 서비스에 관한 규칙 등 기업용 애플리케이션 제작에 필요한 기술들의 사양을 정의한 것을 JavaEE라 칭함 / JavaEE 사양에 따라 개발된 서버를 JavaEE 구현체 또는 WAS라고 정의함
2. 웹 프로젝트 폴더 구조
- src : 자바 소스 파일 관리 폴더, 프로퍼티 파일(.properties)도 이 폴더에 둠
- build/classes : 컴파일된 자바 클래스 파일(.class)이 놓아지는 폴더, 패키지에 소속된 클래스인 경우 이 폴더에 해당 패키지가 자동으로 만들어짐
- WebContent : HTML, CSS, JavaScript, JSP, 이미지 파일 등 웹 콘텐츠를 두는 폴더
- WebContent/WEB-INF : 웹 어플리케이션의 설정과 관련된 파일을 두는 폴더
- WebContent/WEB-INF/web.xml : 웹 어플리케이션 배치 설명서 / 서블릿, 필터, 리스터, 매개변수, 기본 웹 페이지 등 웹 어플리케이션 컴포넌트들의 배치 정보를 이 파일에 작성함
- WebContent/WEB-INF/lib : 자바 아카이브 파일(.jar) 파일을 저장
3. 서블릿 클래스 설명
- init() : 서블릿 컨테이너가 서블릿을 생성한 후 초기화 작업을 수행하기 위해 호출하는 메서드(데이터베이스 연결, 스토리지 서버 연결, 프로퍼티 로딩 등)
- service() : 클라이언트가 요청할 때 호출되는 메서드 / 실질적으로 서비스 작업 수행
- destroy() : 서블릿 컨테이너가 종료되거나 웹 어플리케이션이 멈출 때, 해당 서블릿을 비활성화 시킬 때 호출됨
- getServletConfig() : 서블릿 설정 정보를 다루는 ServletConfig 개책를 반환함
- getServletInfo() : 서블릿을 작성한 사람, 버전, 권리를 담은 문자열 반환
* 서블릿 구동 절차
1) 클라이언트 클라이언트 요청
2) 서블릿 컨테이너 : 클래스 로딩 -> 인스턴스 생성 -> 생성자 호출 -> init() 호출 -> service() 호출 -> 클라이언트 응답
3) 컨테이너 종료 -> destroy() 호출
4. 서블릿 클래스 세부 설명
- ServeletRequest 객체
~ getRemoteAddr() : 클라이언트 IP 주소 반환
~ getScheme() : 클라이언트 요청한 URI 형식의 Scheme을 반혼
~ getProtocol() : 요청 프로토콜의 이름과 버전을 반환
~ getParameterNames / getParameterValues : 요청 정보에서 매개변수 이름만 / 값만 반혼
~ getParameterMap : 요청 정보에서 매개변수들을 Map 객체에 담아서 반환
~ setCharacterEncoding() : POST 요청의 매개변수에 대해 문자 집합을 설정함 / 기본값은 ISO-8859-1로 설정됨 / 매개변수의 문자 집합을 지정하지 않으면 무조건 ISO-8859-1이라 가정하고 유니코드로 반환함 / getParameter() 호출 전 해당 함수를 호출하여 문자열 인코딩 형식을 정의해야함
- ServletResponse 객체
~ setContentType() : 출력할 데이터의 인코딩 형식과 문자 집합을 지정함
~ setCharacterEncoding() : 출력할 데이터의 문자 집합
~ getWriter() : 클라이언트로 출력할 수 있도록 출력 스트림 객체를 반환(이미지나 동영상은 getOutputStream() 사용)
- @WebServel 이노테이션 : Servlet 3.0 이상 사양부터 서블릿 배치 정보 설정
- GenericServlet : 추상 클래스로서 하위 클래스에게 공통의 필드와 메서드를 상속해주고자 존재, Servlet의 service() 함수만 구현하면 됨.