| Servlet(서블릿)이란?
프로그램을 수행해서 웹 페이지를 동적으로 생성하는 서버측 프로그램을 일컫는다.
Servlet은 원칙적으로 모든 클라이언트 - 서버 프로토콜을 통해 통신 할 수 있지만, HTTP와 함께 주로 사용된다.
HTTP와 함께 사용하기 위해서는 HttpServlet 클래스를 상속받아야 한다.
Servlet을 배포하고 실행하려면 웹 컨테이너(web container) 웹컨테이너란 servlet container, webtainer라고도 알려져 있으며, Java Servlet과 함께 상호작용하는 웹 서버의 한 요소로 Servlet의 라이프 사이클을 관리하고 URL과 특정 Servlet을 맵핑하고 URL 요청자가 올바른 액세스 권한을 갖도록 하는 것이다. 오픈 소스 웹 컨테이너의 예로는 Apache Tomcat, Apache Geronimo 등이 있다.를 반드시 사용해야 한다.
JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, Servlet은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
JSP -> HTML 문서 안에 Java 코드를 포함하고 있는 반면
Servlet -> 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
Servlet은 Java EE 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다. 비슷한 기술로는 Perl 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을때마다 새로운 프로세스가 생성되어 응답하는 데 반해, 자바 Servlet은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답한다. 또한 자바 Servlet은 Java로 구현되므로 다양한 플랫폼에서 동작한다.
Servlet은 '초기화'가 가장 중요한 상태다. Servlet이 초기화되지 않았다는 뜻은 초기화 되는 중(생성자를 실행하거나, init()메소드를 실행)이거나 아니면 소멸 되는 중(destroy() 메소드를 실행), 위의 두 가지가 아니라면 존재하지 않는 상태(does not exist) 중 하나이다. 즉 Servlet인터페이스에서는 service(), init(), destroy() 이 세 개가 라이프 사이클 메소드이다. 초기화가 된 상태면 호출될 때 마다 쓰레드(Thread)를 만들어 계속 service하는 형태이다.
// 라이프 사이클 예제
package examples;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifecycleServlet() {
System.out.println("LifecycleServlet 생성!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init test 호출!!");
}
public void destroy() {
System.out.println("destroy 호출!!");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("service호출!!");
}
}
요청과 응답
WAS는 웹 브라우저로부터 Servlet요청을 받으면, 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장한다(요청할 때 들어온 다양한 정보들을 저장할 객체를 생성). 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성한다(현재 요청을 보낸 클라이언트에게 전송하기 위한 정보를 담을 객체를 생성). 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달한다.
HttpServletRequest
http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용한다. 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있다. Body의 Stream을 읽어 들이는 메소드를 가지고 있다.
HttpServletResponse
WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달한다. 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송한다.
'■ 용어 정리' 카테고리의 다른 글
[용어정리] EL(Expression Language) 이란? (0) | 2020.04.28 |
---|---|
[용어정리] SCOPE(스코프) - In Servlet & JSP (0) | 2020.04.28 |
[용어정리] JSP(Java Server Page) - 정의, 사이클, 내장객체 (0) | 2020.04.28 |
[용어정리] 웹서버, WAS 란? (0) | 2020.04.28 |
[용어정리] 웹 이란? (0) | 2020.04.28 |