Servlet
- 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
- 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스로 HttpServlet 클래스를 상속받아야 한다
- 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용
- 예를 들어, 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현
- 현재 프로젝트에서 웹을 개발할 때 서블릿을 직접 써서 개발하지는 않는다
- 편하게 사용할 수 있게 도와주는 다양한 프레임워크를 사용해서 개발하는 경우가 더 많으나, 그런 프레임워크들도 서블릿이 없이는 동작할 수 없기 때문에 서블릿의 기본적인 작성법이나, 서블릿의 라이프 사이클을 이해하고 있다면 웹의 동작을 이해하는 데 많은 도움이 된다
버전에 따른 Servlet 작성 방법
- Servlet 3.0 spec 이상에서 사용하는 방법
- web.xml 파일보다는 자바 어노테이션(annotation)을 사용
- Servlet 3.0 spec미만에서 사용하는 방법
- servlet을 등록할 때 servlet과 그 servlet의 mapping 정보(url)를 web.xml 파일에 등
Servlet 라이프 싸이클(생명주기)
- 클라이언트가 서버(WAS)로 URL 요청 -> 서버는 URL 매핑을 통해서 해당하는 서블릿 클래스를 확인하고 이 클래스가 메모리에 존재하는지 여부를 확인(서버에 서블릿 객체는 하나만 존재한다) -> 메모리에 없을 시에만 객체 생성, 초기화(init()) 수행 -> service
- 만약 서블릿이 수정되었다면, 메모리에 올라간 서블릿은 더 이상 이용할 수 없으므로 삭제(destroy())하고 클라이언트에서 요청이 들어오면 새롭게 생성, 초기화 수행 -> service
- WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인
if (메모리에 없음) { 해당 서블릿 클래스를 메모리에 올림 init() 메소드를 실행 }
- service()메소드를 실행(요청에 대한 응답 구현)
- WAS가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행
요청과 응답
- WAS는 웹 브라우저로부터 Servlet요청을 받으면, 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장
- 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성
- 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달
HttpServletRequest
- 클라이언트가 서버에게 보낸 요청을 추상화한 객체
- 메서드로 요청할 때 가지고 있는 정보들을 모두 담는다
- path 정보, 클라이언트의 IP, 클라이언트의 다양한 정보를 포함
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있다
- Body의 Stream을 읽어 들이는 메소드를 가지고 있다
HttpServletResponse
- 서버가 클라이언트에게 응답하기 위한 정보를 추상화한 객체
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송
HttpServlet의 service(request, response) 메소드
- HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현
- 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출
- 클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출
- HttpServlet을 상속받은 개별 Servlet 클래스들은 service()는 따로 오버라이드하지 않고, doGet(), doPost() 메서드를 오버라이드해서 기능을 구현한다
- WAS는 service()만 호출한다
- 부모 클래스 HttpServlet의 service() 메서드가 실행되면서, 오버라이드 된 메서드들이 실행된다.
템플릿 메소드 패턴
- 참고)
- http://jdm.kr/blog/116
- https://yaboong.github.io/design-pattern/2018/09/27/template-method-pattern/상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다. – 토비의 스프링 3.1
- 알고리즘의 뼈대(구조)를 구성해두고, 이를 오버라이드(override)하는 등으로 활용
- 추상 클래스와 훅 메소드를 활용
서블릿 매핑(내용 추가 필요)
- 와일드카드(*)
출처) 부스트코스 풀스택 강의
'Spring' 카테고리의 다른 글
Java config를 이용하여 스프링 컨테이너(ApplicationContext) 설정하기 (0) | 2021.07.10 |
---|---|
스프링 Ioc/DI 컨테이너 사용 (xml 파일 이용) (0) | 2021.07.08 |
forward & redirect (0) | 2021.07.01 |
Servlet과 JSP연동 (0) | 2021.07.01 |
JSP 란? (0) | 2021.07.01 |