서블릿은 자바 언어로 동적인 웹페이지 생성이 가능하도록 해주는 기술 중 하나인데요.
정확히 말하자면 서버 측에서 HTTP 프로토콜을 기반으로 받아들인 사용자(클라이언트) 요청을 어떻게 받아들이고 어떻게 분석해서 어떠한 동적 컨텐츠를 생성하고 사용자에게 응답(제공) 하고 전송할지를 정의하는 자바 기반의 템플릿입니다.
서블릿의 간단한 실행 로직
이러한 서블릿이 실행되기 위해서는 서버 및 개발 환경이 갖춰져 있어야 하는데요. 이러한 절차는 다음 페이지에서 확인해 보시면 될 것 같습니다.
서블릿의 실행 순서를 그림으로 표현해 본다면 다음과 같은데요.
클라이언트로부터 요청을 받아 요청 정보의 헤더 안에 있는 URL을 분석한 뒤 요청 받은 페이지가 서블릿일때 서블릿 컨테이너에 처리를 넘기면 컨테이너는 서블릿을 WEB-INF의 classes 폴더나 lib 폴더에서 찾아 실행 준비를 시작합니다.
컨테이너가 해당 요청이 최초인지의 여부를 판단합니다. 해당 요청이 최초일 경우 메모리를 로딩하고 객체를 생성해 메모리를 할당한 뒤 초기화 작업 코드가 담긴 init() 메서드를 실행합니다. 그 뒤 최초 여부 상관 없이 클라이언트의 요청이 있을 때마다 service() 메서드를 실행합니다.
일단 프로젝트를 진행해 보면서 차차 알아보겠지만, 일단 서블릿의 실행 순서를 간단하게만 알아보자면 아래의 그림대로 실행이 이루어 지는데요.
(자료 출처 : https://velog.io/@ieed0205/Servlet)
우선 클라이언트가 이름을 입력하고 버튼을 누른다고 해봅시다.
그럼 클라이언트(사용자)의 요청(버튼)에 의해 위의 그림처럼 사용자가 입력한 값이 name 속성과 헤더 정보에 포함되어 서버에 전송되는데요.
가장 먼저 찾게 되는 경로는 WEB-INF의 lib 폴더나 web.xml 파일입니다.
여기서 짧게만 서술하자면, web.xml 파일은 서블릿을 설정하고, URL 패턴을 서블릿에 매핑하는 데 사용됩니다. 이 파일은 웹 애플리케이션의 배포 서술자(deployment descriptor)로서, 서블릿 컨테이너가 웹 애플리케이션을 배포하고 실행하는 데 필요한 정보를 제공합니다.
이때 web.xml 파일에 정의된 설정은 웹 애플리케이션이 서버에 배포될 때 읽혀지며, 이를 통해 서버는 URL 요청을 처리하는 방법을 이해합니다. 따라서, 서블릿과 URL 매핑을 올바르게 설정하기 위해서는 초기 설정 단계에서 반드시 작성되어야 합니다.
아무튼 이러한 xml파일을 서버는 사용자가 특정 URL로 요청을 보낼 때 서버는 해당 파일을 참조하여 해당 URL 패턴과 매핑된 서블릿을 찾게 되고, 매핑된 서블릿이 있으면, 서블릿 컨테이너는 해당 서블릿을 호출하여 요청을 처리하게 되는거죠.
정확히 얘기하자면, ①사용자가 웹 브라우저를 통해 특정 URL로 요청을 보내게 되면 ② 서버는 web.xml 파일이나 애너테이션을 통해 설정된 URL 패턴(url-pattern)과 일치하는 서블릿을 찾습니다. ③그 다음 URL 패턴과 매핑된 서블릿 이름을 찾습니다. ( 태그를 통해 설정된 부분) ③그 후 서블릿 이름을 통해 해당 서블릿 클래스의 태그를 찾습니다.
④서블릿 컨테이너는 서블릿 클래스를 로드하고 인스턴스화한 뒤, 요청을 처리하기 위해 service() 메서드를 호출합니다.
해당 데이터(요청)가 서블릿 컨테이너에 도달되면 컨테이너에서는 사용자가 명시하지 않아도 자동으로 클라이언트와의 송수신에 필요한 HttpServletRequest, HttpServletResponse 객체를 생성하게 됩니다.
이때 해당 서블릿 컨테이너는 당연히 HttpServlet 추상클래스를 상속 받는 상태여야 합니다. (추가적인 메서드 재정의를 위해서)
아무튼 사용자의 요청을 종류 별(GET OR POST)로 받아온 입력 정보를 컨테이너에서 송수신 객체를 사용하여 아래의 그림처럼 사용자의 입력을 처리하고 어떻게 출력할지를 결정하여 사용자에게 정보를 제공하게 됩니다.
그러면 사용자는 최종적으로 해당 페이지를 응답 받게 됩니다.