[Servlet] 서블릿 이란?
서블릿 Servlet 이란?
- 서버에서 웹 페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램이다.
- 자바 서블릿은 서버 측 기능을 확대시킨 자바 프로그램으로 JavaEE, Java, Java Platform, Enterprise Edition 의 한 기능이다.
- 서블릿은 javax.servlet.GenericServlet 클래스를 상속받아 작성하거나, HTTP protocol 서버를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받아 작성한다.
- 서블릿은 Servlet Container에 의해서 실행되고, 관리된다.
- 서블릿은 자바 코드 안에 HTML을 포함하고 있어서 그 효율성이 떨어진다.
- 따라서 HTML 변경시 서블릿을 재 컴파일해서 배포해야한다.
Servlet Container
- HTTP 요청을 받아서 Servlet을 실행시키고 그결과를 사용자 브라우저에게 전달해주는 기능을 제공한다.
- Servlet을 실행하고 생명주기를 관리하는 역할을 한다.
- 멀티 스레딩을 지원하여 클라이언트의 다중 요청을 스레드를 이용하여 처리한다.
- 서블릿 컨테이너는 해당서블릿의 요청이 들어오면 스레드를 생성해서 작업을 수행한다.
Servlet의 Life Cycle
servlet은 init(). service(), destory()의 세 개의 메소드에 의한 생명주기를 갖는다.
클라이언트가 servlet을 요청하는 경우 다음의 단계를 수행한다.
1) 해당 서블릿의 인스턴스가 존재하지 않는 경우
- Servlet 클래스를 로드하여 서블릿 클래스의 인스턴스를 생성한다.
- init() 메소드를 호출하여 서블릿 인스턴스를 초기화한다.
- 해당 서블릿의 인스턴스가 존재하는 경우 1,2 과정은 생략한다.
2) request 와 response 객체를 인수로 전달하여 service()메소드를 호출, 클라이언트의 요청을 처리하여 처리결과를 전송한다.
- service() 메소드는 클라이언트의 요청이 있을때마다 반복적으로 호출하여 클라이언트 요청을 처리한다.
- 클라이언트가 서블릿을 요청하면 컨테이너는 스레드를 생성하여 병행적으로 service() 메소드가 호출된다.
- 서블릿을 javax.servlet.HttpServlet 클래스를 상속 받아 작성했다면 service() 메소드는 클라이언트의 요청방식에 따라 GET방식이면 doGet()를 호출한다.
3)서블릿을 제거해야 하는 경우 컨테이너는 서블릿의 destroy() 메소드를 실행하고, 서블릿을 종료한다.
- 일반적으로 데이터베이스 연결해제, 백그라운드 스레드 중지등 사용한 자원을 종료한다.
이미지 출처:jojoldu.tistory.com/28
위에 블로거 분이 servlet container의 개념을 잘 설명해두어서 태그를 걸어놨다. 이분이 말하길
1)SpringFramework는 웹프레임워크가 아닌 웹 어플리케이션을 만들고자 등장한 SpringMVC 모듈로 구성된 프레임워크다.
2)Servlet Container는 서블릿 저장소 정도의 역할을 수행하며 서블릿의 라이프 사이클(init, service, destroy), 멀티스레드 등을 수행한다. 대표적인 servlet container으로는 Tomcat이 있다.
3)Spring MVC 는 Servlet Container가 관리하고 있는 servlet이다. 결국 로직을 수행하는 또하나의 서블릿이고 서블릿없이는 수행이 불가능한 구조로 되어있다.
4)Spring MVC의 모든 요청과 응답은 DispatcherServlet이 관리하고 있다.(그래서 디스패처인가? 가로채려고)
URL요청이 오면 이를 가로채 HandlerMapping 에게 해당 요청을 처리할 수있는 controller를 찾아내 결과값을 리턴한다.
그러면 또 꼬리물기식으로 궁금한게 MVC는 무엇일까??...
MVC패턴은 디자인 패턴중 하나이기도 한데 MODEL, VIEW, CONTROLLER의 역할로 나뉘어 어플이나 프로젝트를 구성하는 방식을 말한다.
그렇다면 SpringMVC는 어떤 구조로 운용되는지?
'Web > JSP&SERVLET' 카테고리의 다른 글
[Servlet] 필터 : Filter (0) | 2020.11.11 |
---|---|
[Servlet] 쿠키 : Cookie (0) | 2020.11.10 |
[WEB] URL과 URI (0) | 2020.10.28 |
[WEB] HTTP 와 HTTPS (0) | 2020.10.28 |
[WEB] 웹 어플리케이션 이란? (0) | 2020.10.28 |
댓글