JSP를 공부하다보니 Servlet에 대해 궁금해졌다.
Servlet이 하는 일이 무엇인지, 어떻게 실행되는지 알아보자.
1. Applet이란?
Servlet이 뭔지 알고싶은데 왜 Applet이 나오지?
Servlet이 바로 Server Side Applet을 합친 말이기 때문이다.
Applet은 자바가 생긴지 얼마 되지않았을때 사용했던 것으로, 정적인 HTML을 보완해 동적인 기능을 제공해주는 자바 프로그램이다. 하지만 일반 프로그램과는 차이가 있다.
일반적인 프로그램의 경우, 개인 로컬 컴퓨터에 설치를 해서 사용하지만,
애플릿은 설치하는게 아닌, 서버측에서 인터넷으로 기능을 받아서 웹 브라우저에서 실행한다.
그래서 "웹 브라우저에서 실행되는 작은 자바 응용 프로그램" 이라고 한다.
2. Servlet이란?
위의 Applet의 의미와 같이 웹 브라우저에서 실행되는 작은 자바 응용 프로그램이다.
자바를 실행하면 class파일이 생성되므로, 웹 서버상에서 실행되는 자바 클래스 파일 이라고도 한다.
클라이언트 요청에 따라 동적으로 서비스를 제공하는 자바 클래스.
역사
JSP, Spring이 나오기 전, 서블릿을 통해 동적인 웹 페이지를 처리했다.
하지만 서블릿은 자바로만 이루어져있고 HTML을 자바 안에서 처리하여 화면을 구성하기 매우 어려웠다.
후에 ASP의 장점을 수용해서 한 층 쉬워진 JSP가 개발되었다.
특징
- 독자적으로 실행하지 못하고 JSP/Servlert 웹 컨테이너에서 실행된다.
- 자바언어의 특성을 가진다.
- 클라이언트 요청에 동적인 데이터를 처리한다.
- MVC패턴에서 Controller로 이용된다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlert클래스를 상속받는다.
서블릿 파일
네모상자 안을 보면, out.write();안에 HTML코드가 있는 것과
javax.servlet.http.HttpServlert 클래스를 사용하는 것을 볼 수 있다.
노란색 형광펜 부분은 아래 4번 서블릿 생명주기에서 다룰것이다.
3. Servlet Container
Java servlet과 상호작용하는 WAS의 구성요소.
위에서 Servlet의 특징 첫번째 '독자적으로 실행하지 못하고 웹 컨테이너에서 실행된다' 라고 했다.
독자적으로 실행하지 못한다는 것은, 돌봐줄 무언가가 같이 있어야 한다는 것이다.
돌봐줄 무언가가 바로 "웹 컨테이너"이다. 웹 컨테이너는 서블릿을 관리한다.
서블릿 컨테이너가 하는 일
1) 서블릿의 생명주기를 관리한다.
초기화할때는 init(), 요청을 처리할때는 servlet method, 종료할때는 destroy() 를 호출한다.
2) 서블릿과 웹서버가 통신할 수 있는 쉬운 방법들을 제공한다.
3) 멀티스레딩 지원
4) 보안관리
4. Servlet 생명주기(동작과정)
① 클라이언트가 URL 요청을 한다.
② 배포서술자(web.xml)은 서블릿 클래스가 필요한 서블릿 요청인지 파악하고
서블릿 요청이라면 서블릿 컨테이너로 요청을 보낸다.
③ 컨테이너는 request, response 객체를 만든다.
④ 요청에 필요한 서블릿 클래스가 메모리에 인스턴스가 없다면(처음 실행하거나 실행하고 지워진 경우)
새로 인스턴스를 생성하고 init()메소드를 실행해서 초기화한다.
(**인스턴스는 웹 컨테이너 당 하나만 존재한다. )
⑤ 초기화 이후 스레드를 생성한다.
⑥ 스레드에서 servive() 메서드 호출.
⑦ service()메서드는 get, post방식에 따라 doGet(), doPost() 메서드가 ③번에서 만들어둔
request, response객체를 호출하여 페이지를 만든다.
⑧ 완성된 페이지가 담긴 response객체를 HTTP응답 형태로 바꿔서 웹 서버로 전송한다.
⑨ 사용이 끝났으니 ③번에서 만든 객체들을 없애고(destroy()) 스레드를 종료한다.
⑩ 완성된 HTTP Response를 받은 웹서버는 브라우저에 전송한다.
주황색 글씨는 2번의 서블릿 파일 사진을 보면 메서드형태로 있는것을 볼 수 있다.
'Back-end > JSP' 카테고리의 다른 글
JSP) 내장 객체(2) - response (0) | 2022.03.01 |
---|---|
JSP) 내장 객체(1) - request (0) | 2022.03.01 |
JSP) 영역 객체와 속성(Attribute) (0) | 2022.02.01 |
JSP) 내장 객체란? (0) | 2022.02.01 |
JSP) JSP기본 요소 - 액션 태그 (0) | 2022.02.01 |