컨테이너란?

JooKit 주킷 2020. 7. 4. 23:42
목차 접기
728x90
반응형

클라이언트 들이 요청을 하면 웹서버가 받습니다.. APS나 PHP는 IIS, APache서버가 해석하지만.

JAVA는 오직 JVM만이 해석할수 있죠? 그래서 자바를 해석할수 있는 녀석이 따로 필요합니다.. 이것이 컨테이너 입니다.

 

 

1. 컨테이너란?  ex)톰켓

서브릿을 관리(서블릿에 대한 요청을 받고) 답변을 주는 중간 역할을 해주는 녀석..
클라이언트와 서블릿간의 요청과 답변을 전달해주는 녀석..
요청을 넘겨받은 컨테이너는
Http Request와 Http response객체를 만들어 서블릿 doPost(), doGet()메서드 중 하나를 호출한다.

클라이언트 -> 웹서버 장비
요청(get)함 ->  웹서버 -> Get -> 컨테이너(자바코드로 이루어짐) -> get(요청) -> 서블릿(자바코드)

 

클라이언트  <- 웹서버 장비
  응답받음  <-  웹서버 <- 응답문서 -> 컨테이너<- 응답문서 전달 <- 서블릿(자바코드)


<< 컨테이너가 서블릿을 실행하고 관리하는 역할을 하는데 이를 함으로써 해주는 역할을?>>

1. 통신지원 (웹서버(아파치)와 서블릿 간의 통신에 대한 걱정 NO)
서블릿과 웹 서버가 서로 통신 할수 있는 손쉬운 방법을 제공(API제공)

*서버와 대화하기 위해 필요한 것들
  1) ServerSocket만들기
  2)특정포트에 리스닝
  3)연결요청이 들어오면 스트림을 생성

 

2. 생명주기 관리(서블릿 자원 관리 고민 끝)
 서블릿의 탄생과 죽음을 관리 합니다.

* 개발자 대신
  - 서블릿 클래스를 로딩하여 인스턴스화
  - 초기화 메소드를 호출(생성자)
  - 요청이 들어오면 적절한 서블릿 메소드를 호출

생명을 다한 순간에는 적절하게 가비지 컬렉션이 진행..


3. 멀티스레딩 지원 : (다중 요청에 대해 스레드 생성 운영을 알아서 척척척)
요청이 들어올때마다 새로운 자바 스레드를 만들어 클라이언트 요청에 따라 적절한 HTTP서비스 메소드 실행하고 나면 스레딩 작업 끝(스레드 소멸)


4. 선언적인 보안관리 : (따로 자바 소스 코드 수정,컴파일 없이 보안관리 가능)
보안에 관련된 내용을 서블릿, 자바 클래스 코드 안에 하드코딩할 필요가 없다.
즉,필요한 데이터나 값, 코드 등을 직접 타이핑 해서 집어 넣는 일이 없다.!!
보안관리는 XML배포 서술자에다가 기록하면 된다.

 

5. JSP지원

 

<<컨테이너는 요청을 어떻게 다룰까>>

1. 사용자가 서블릿에 대한 링크를 클릭합니다.

2. 컨테이너는 들어온 요청이 서블릿이라는 것을 간파하고  HttpServletResponse와  HttpServletRequest객체를 생성합니다.

3. 사용자가 날린 URL을 분석하여 어떤 서블릿에 대한 요청인지 알아냅니다.(여기서 DD를 참조합니다)

   그 다음 해당 서블릿 스레드를 생성하여 Request/Response객체를 인자로 넘깁니다.

4. 컨테이너는 서블릿 service() 메소드를 호출합니다. 요청에 지정한 방식(method)에 따라 doGet()을 호출할지, doPost()를 호출할지 결정

5. doGet()/doPost()메소드는 동적인 페이지를 ㅅ행성한 다음, 이 를 Response객체에 실어 보냅니다.

  보내고 난 후에도 컨테이너는 Response객체에 대한 렌퍼런스값(참조값0을 가지고 있습니다.

6. 스레드 작업이 끝나면, 컨테이너는 ResPonse객체를 HTTP Response로 전환하여 클라이언트로 내려 보냅니다.

  이제 마지막으로 Request와 Response객체를 소멸시킵니다.

 

<<서블릿 코드를 살펴보자!!>>

 

 import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class MyServlet extends HttpServlet{
 
 //클라이언트의 요청을 받는 메서드 재정의
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  //클라이언트의 브라우져에 무언가를 출력할 수 있는 문자기반 출력스트림 생성
  PrintWriter out = response.getWriter();
  out.print("Your send method is get");
 }
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
  PrintWriter out = response.getWriter();
  out.print("Your send method is post");
 }
}

 

1. HttpServlet

서블릿은 HttpServlet을 상속합니다.

 

2. doGet() 메서드 / doPost()메소드

실제 프로젝트에서는 서블릿 중 doget()과 doPost메소드만 재정의 한다.

 

3. (HttpServletRequest request, HttpServletResponse response)

컨테이너가 생성한 Request와 Response객체 참조를 넘겨받는 곳

 

4. response.getWriter();

서블릿이 넘겨준 Response객체 안에는 PrintWriter를 사용하여 HTML코드를 작성한다.

 

 

※ 추가 내용

 

[JSP와 서블릿을 사용한 웹 서버]는 크게 URL 주소의 해석을 맡아 주는 HTTP 서버와 서블릿 클래스 또는 JSP 파일의 실행 요청을 처리해주는 웹 컨테이너(Web Container)로 구성된다.

 

웹 컨테이너란?

웹서버의 내부에서 서블릿 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할을 하며 특히 서블릿 클래스에 대한 웹 컨테이너를 서블릿 컨테이너. 

JSP 파일에 대한 웹 컨테이너를 JSP 컨테이너라고 한다.

위와 같이 두 타입의 서블릿 컨테이너, JSP 컨테이너를 통칭하여 웹 컨테이너라 한다.

728x90
반응형
LIST