2018. 5. 30. 14:15ㆍ프로그래밍언어/Java&Servlet
서블릿(Servlet) 이란?
서블릿이란 클라이언트의 요청에 따라 서버가 실행시키는 자바 프로그램입니다. 예전에는 웹서버가 모든 클라이언트의 요청을 받아서 처리를 했었는데, 요즘처럼 인터넷이 활성화된 시대에서는 웹서버 혼자서 모든 요청을 처리 할수 없게 되었습니다. 그래서 나온 것이 서블릿입니다. 웹서버에게 요청이 가면 그 요청을 서블릿 컨테이너에게 넘기고 서블릿 컨테이너가 요청에 알맞은 서블릿 객체를 생성시켜주게 됩니다. 하지만 여기에서 중요한 것은 서블릿 컨테이너가 모든 요청에 대해 서블릿 객체를 생성시키지 않는다는 점입니다. 만약 해당이 요청이 서버 입장에서 첫 요청이라면 서블릿 객체를 생성시키지만 만약 첫 요청이 아니라면 메모리에 이미 생성된 서블릿객체에 대해 스레드를 생성해서 요청을 처리하고 응답을 하게 됩니다.
서블릿 API 문서 -> http://tomcat.apache.org
서블릿은 어떻게 구현될까?
우선 서블릿을 구현할 때는 javax.servlet.http.HttpServlet 클래스를 상속하여 개발하게 됩니다. 그러한 서블릿은 서블릿 컨테이너가 생명주기를 관장하게 됩니다. 우선 HttpServlet의 상속 구조를 알아보면,
서블릿 API에 나와있는 위 글을 보면 최상위는 interface인 "Servlet", 그리고 그것은 상속한 abstract class인 "GenericServlet"를 HttpServlet 클래스는 상속을 받게 됩니다. |
각각에 대해서 간단히 설명하면 인터페이스인 Servlet은 서블릿 프로그램을 개발할 때 반드시 구현해야 하는 메소드를 선언하고 있는 인터페이스입니다.
이 5개의 메소드가 서블릿의 생명주기와 관련된 메소드라고 생각하시면 됩니다.
다음은 추상클래스인 GenericServlet 입니다. Servlet 인터페이스를 상속하여 클라이언트-서버 환경에서 서버단의 애플리케이션으로서 필요한 기능을 구현한 추상 클래스입니다. service( ) 를 제외한 모든 메소드를 재정의하여 적절한 기능으로 구현하였습니다.
마지막으로는 GenericServlet을 상속받은 HttpServlet 입니다. GenericServlet을 상속하여 service( )를 재정의함으로써 http 프로토콜에 알맞은 동작을 수행하도록 구현한 클래스입니다. 즉, http 프로토콜 기반으로 브라우저로부터 요청을 전달받아서 처리하도록 하는 클래스입니다. service( )에서는 요청방식(get,post,delete,put....)에 따라서 정해진 사양의 메소드가 호출되도록 구현되어 있습니다.
여기서 볼것은 service( ) 메소드가 2개 오버로딩되어있다는 것입니다. 그것을 설명하면 처음에 요청이 들어오면 매개변수가 ServletRequest req,ServletResponse res 인 service( )가 호출되고 이 메소드는 간단히 다른 service( )를 호출해주는 역할을 하고 두번째로 호출된 service( )에서 각 요청에 알맞은 방식의 메소드를 호출하는 역할을 하게 됩니다.
서블릿 동작흐름
참조:http://sjh836.tistory.com/126?category=679845
그리고 이러한 서블릿을 설정하는 파일이 web.xml 파일입니다. 웹서버가 서비스를 시작하기 위해 구동할 때 서버에서 많은 일이 일어나는데, 그 중의 하나가 클라이언트에 서비스하기 위한 웹 애플리케이션을 준비하는 작업입니다. 이때 웹서버는 각 웹 애플리케이션의 web.xml 파일을 읽고, web.xml에 정의된 내용대로 웹 애플리케이션을 실행하기 위한 설정을 수행하게 됩니다. 따라서 web.xml을 잘못 작성하게 되는 순간에는 웹 애플리케이션 안에 있는 모든 파일은 서비스 될수 없게 됩니다.
'프로그래밍언어 > Java&Servlet' 카테고리의 다른 글
JAVA - Hashtable, HashMap, ConcurrentHashMap 비교 (0) | 2019.02.01 |
---|---|
객체지향 design pattern - composite pattern 예제 (0) | 2019.01.29 |
객체지향 design pattern - strategy pattern 예제 (0) | 2019.01.04 |
java - synchronized 란? 사용법? (2) | 2019.01.04 |
JAXB - unmarshal , marshal (언마샬,마샬) (0) | 2018.06.03 |