서블릿
Last updated
Was this helpful?
Last updated
Was this helpful?
WAS에 설치(deploy)되어 동작하는 어플리케이션입니다.
자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다.
WAS 에 의해서 동작.
자바 웹 어플리케이션의 폴더 구조
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() : 서블릿의 생명주기 처리로 서블릿 객체를 메모리에서 제거할때 마지막으로 실행.
서블릿 생성 -> init() -> { service() -> doXxx() } -> destory() -> 서블릿 종료 ( {} 반복 )
서블릿 클래스 객체가 생성되면 가장 처음에 메소드 init()이 실행되며, 클라이언트의 요청이 들어 올 때마다 service() 메소드가 실행되어 요청에 맞는 메소드 doXxx()를 생행한다. 마지막으로 서버가 종료되거나 서블릿을 더 이상 사용할 필요가 없어 서블릿 객체를 메모리에서 제거할 때, 마지막으로 메소드 destory()가 실행되어 사용하던 자원을 정리하고 종료된다.
init()과 destory()는 서블릿의 생성과 종료시 단 한번이 실행되며 service() 메소드는 사용자의 요청이 있을 때마다 반복적으로 실행된다.