Servlet이란
orcle 문서 : https://javaee.github.io/servlet-spec/downloads/servlet-3.1/Final/servlet-3_1-final.pdf
- Java의 CGI 프로그램(WebServer와 WAS가 소통하기위해 CGI의 규칙을 준수한) 즉, 클라이언트 요청에 의해 서버에서 실행되어야할 Java 프로그램을 말한다.
- WAS에 의해 Servlet이 실행되며 그결과는 WAS에 의해 다시 웹서버에게 전달된다
- MVC 패턴에서 Controller를 담당한다.
장점 (CGI에 비해)
동작 과정
1. 사용자의 요청
1.1 사용자가 웹서버에 요청을 전달
1.2 만약 Servlet에 대한 요청인 경우 WAS에 요청을 전달
2. WebContainer에서 request, response 객체 생성
2.1 웹컨테이너에서는 사용자의 요청에 대한 HttpServletRequest 객체와 HttpServletResponse 객체를 생성
3. 사용자 요청처리
3.1 WebContainer에서 web.xml(배포서술자)를 참조하여 사용자가 요청한 URL이 어떤 servlet에 mapping되는지를 찾음
3.2 사용자가 요청한 servlet이 이전에 요청된적이 없다면 객체를 생성하고, 해당 servlet의 init() 메소드를 호출하고, 메모리에 로드 시킨다. 만약 이전에 생성한 적이 있다면 객체를 다시 생성하지 않는다.
3.3 웹 컨테이너에서 사용자의 요청을 처리할 Thread를 생성한다.
3.4 Thread가 생성되었으면 해당 Thread를 통해 Servlet의 service()메소드를 실행한다.
3.5 service() 메소드에서는 사용자의 요청 메소드(get, post)에 따라 doGet(), 또는 doPost() 메소드가 호출된다. 이때 앞서 생성한 HttpServletRequest, HttpServletResponse 객체를 톰캣에 의해 인수로 전달 받는다.
4. 응답
4.1 doGet(), 또는 doPost()가 호출되어 사용자 요청에 따른 페이지를 생성한 뒤 그것이 담긴 response객체를 WebContainer에서 HTTP Response로 바꾸어 WebServer에 전송한다.
5. 소멸
5.1 request, response 객체를 소멸시킨다.
5.2 Thread를 종료한다.
HttpServletRequest와 HttpServletResponse
사용자가 요청시 웹컨테이너에서 자동으로 생성해주는 객체들이다.
1. HttpServletRequest
- 사용자의 요청과 관련된 정보(파라미터)와 동작을 가지고 있는 객체
- Servlet의 Service() 메소드의 인자로 넘겨지는 객체
기능
- 요청 파라미터 조회
- 사용자가 전달한 session 정보가 담겨있는 session 객체 조회
- request scope(범위) 안에 존재하는 component간의 공유 데이터에 접근
2. HttpServletResponse
- 응답 정보와 동작을 가지고있는 객체
- 마찬가지로 Servlet의 Service() 메소드의 이자로 넘겨지는 객체이다.
기능
- 다른페이지로 Redirect
- Response Header정보 설정
Life Cycle
Servlet은 빠른 응답속도 때문에 많은 사랑을 받았다. 빠른 응답속도의 요인은 최초 요청시 Servlet 객체가 만들어지면 메모리에 로딩된 후 이후 요청은 해당 객체를 계속해서 재사용을 하기 때문이다.
1. Servlet 객체 생성은 최초 1회만 이루어진다.
2. Init() (Servlet 초기화) 또한 최초 1회만 이루어진다.
3. Service(), doGet(), doPost() 호출은 사용자의 요청에의해 계속해서 이루어진다.
4. destroy() (Serlvet 제거)는 자원을 해제할 때(Servlet이 수정되어 대시 메모리에 로딩해야 하는 경우, 서버가 종료될 때) 이루어진다.
Servlet Container란
- 서블릿을 관리해주는 역할 수행.
Container의 역할
- 통신지원
서블릿과 웹서버가 통신할 수 있는 손쉬운 방법을 제공한다 예를 들어, 소켓 생성, 특정 포트에대해 리스닝, 연결요청이 왔을 시 스트림을 생성하여 요청 수신
등을 서블릿 컨테이너에서 알아서 처리해준다.
- 생명주기 관리
서블릿 컨테이너가 시작되는 순간 서블릿 클래스들을 로딩, 객체화하고 요청이 왔을 시 적절한 서블릿을 찾아 실행한다. 또한 서블릿의 생명이 다하면 서블릿을 제거한다.
- 멀티스레딩 관리
요청이 올시 스레드를 생성하여 서블릿을 실행한다. 즉 동시에 여러 요청이 온다면 그만큼의 스레드를 생성하여 멀티스레딩 환경으로 작업을 처리한다.
- 선언적인 보안관리
- JSP지원
Web.xml 이란?
- web application의 설정을 위한 배포 서술자
.
- xml 형식이다.
역할
- 배포시 각 어플리케이션의 환경을 설정하는 역할.
서버가 처음 로딩될 때 읽혀서 해당 환경설정을 tomcat에 전달.
- 배포할 Servlet의 정보
- 각각의 Serlvet이 매핑되는 URL정보.
Web.xml의 내용
- ServletContext의 초기 파라미터.
- Session의 유효시간
- Serlvet/JSP의 정의
- Servlet/JSP 매핑 URL
- Error Pages 처리
- 리스터/필터 설정
- 보안
등등..
Context Path
- WAS에서 웹 어플리케이션
을 구분하기 위한 Path
이다. 이클립스에서 WebProject를 생성하면 자동으로 server.xml
의 Context 태그
안에 생성된다
'Web > JSP,Servlet' 카테고리의 다른 글
JSP,Servlet - JDBC 기초 사용법 (0) | 2019.03.25 |
---|---|
JSP - JSP태그와 내부객체 , Java Bean (0) | 2019.03.25 |
Servlet - Servlet의 데이터 공유 (1) | 2019.03.25 |
Servlet - Servlet 초기화 파라미터 사용방법(web.xml, 어노테이션) (0) | 2019.03.25 |
JSP - JSP란?(Servlet과의 비교 model1, model2) (0) | 2019.03.24 |