ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Servlet 이란 !!???
    자바웹프로그래밍/JSP 2020. 11. 10. 15:25
    728x90
    반응형

    Web Service의 servlet환경에서의 기본적인 동작 과정은

     

    브라우저 -> HTML Form -> Servlet -> HTML Page

     

     

     

     

     

    Servlet 개념

     

    웹 기반의 요청에 대한 동적인 처리가 가능한 하나의 클래스이다!

     

    하나의 클래스!! 이게 제일 중요한 대목이다.

     

    Servlet Program의 기본적인 동작 과정은 아래와같다.

     

     

    1. Web Server는 HTTP request를 Web Container(Servlet Container)에게 위임한다. 이말은 즉슨 일전에는 Web Server가 정적인 페이지를 사용자에게 보여줄때 request를 직접 response 해주었지만 현재는 다양한 동적인 service를 사용자가 원하므로 webserver는 동적인 서비스를 위해 http request를 web container(Servlet Container)에게 위임한것이다.

     

     

     

     

     

    2. Web Container는 service() 메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.

       1) Web Container는 적절한 Servlet 파일을 컴파일(.class 파일 생성)한다.

       2)  .class 파일을 메모리에 올려 Servlet 객체를 만든다.

       3) 메모리에 로드될 때 Servlet 객체를 초기화하는 init()메서드가 실행된다.

     

    3. Web Container는 Request가 올 때마다 thread를 생성하여 처리한다.

       - 각 Thread는 Servlet 의 단일객체에 대한 service() 메서드를 실행한다.

     

     

     

     

     

     

    Servlet Program 에서 thread는 매우 중요하다

     

    thread는 생성되면 즉시 해당 메서드만 수행한다. 이 해당 메서드가 끝나고나면 return하고 thread는 종료되고 제거된다. 즉 thread는 Servlet의 doGet() 또는 doPost()를 호출하고 종료된다는것이다.

     

     

    Web Continer는 Thread의 생성과 제거를 담당한다.

    thread의 생성과 제거의 반복은 큰 오버헤드를 만든다. 이를위해 Tomcat(Web application server)는 "Thread pool"(미리 만들어놓은 Thread)이라는 적절한 메커니즘을 사용하여 오버헤드를 줄인다.

     

    WAS는 Servlet의 LIFE CYCLE을 담당한다.

     

    웹 브라우저 클라이언트의 요청이 들어왔을때 servlet객체 생성은 was가 알아서 처리한다.was 위에서 servlet이 돌아다니고 db와 통신을하는등에 작업을 통해 사용자에게 동적 페이지를 돌려준다.

     

     

    클라이언트(브라우저)의 요청이들어오면 WAS는 해당 요청에 맞는 Servlet이 메모리에 있는지 확인한다.

    만약에

     

     

     

     

     

     

    Servlet 생명 주기 및 web.xml servlet 설정

    Client가 Servelt에 요청을 하면, Servlet은 바로 호출 되지 않고 객체를 생성하고 초기화 작업을 거친 후 , 요청을 처리하는 생명주기를 갖고 있다. Servelt의 생명주기를 단계별로 나타내면 1.요청이 오

    hipdizzy.tistory.com

    init()메서드는 오직 한번만 수행되며, 클라이언트의 요청에 따라 적절한 Servlet이 생성되고 이 Servlet이 메모리에 로드될 때 init()메서드가 호출된다.

     

    응답에 대한 모든 내용은 service()메서드에 구현해야한다.

    Servlet이 수신한 모든 request에 대해 service()메서드가 호출되며, HttpServlet을 상속받은 Servlet클래스에서 service()메서드를 오버라이드하지 않았다면, 그 부모인 HttpServlet의 service()가 호출된다.

     

    service()메서드는 request의 type(HTTP MEthod:Get,post,put,delete 등) 에 따라 적절한 메서드(doget,dopost,doput,dodelte등)을 호출한다.

     

    메서드가 return하면 해당 thread는 제거된다.

     

     

     

     

     

     웹 브라우저 reqeust-> WAS

     

       WAS의 역할

      1. 요청할때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장한다.

      2. 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성한다.

      3. 생성된 HttpServletRequest,HttpServletResponse 객체를 Servlet에게 전달한다.

     

     

     

    java Servlet 컨테이너/웹 서버는 일반적으로 멀티 쓰레드 환경이다.

      - 같은 Servlet에 대한 여러 개의 요청이 동시에 실행될 수 있어 runtime에 따라 결과가 달라질 수 있다.  즉, Servlet은 메모리에 한 번 올라오고 멀티 쓰레드 환경에서 여러 thread는 하나의 Servlet을 공유하기 떄문에 Concurrency Control(병행성 제어)가 필요하다.

     

    Servlet의 service() 메서드 안의 변수

      정적변수,멤버변수: 공유하는 자원이므로 상호배제가 필요하다.

      지역변수 : thread마다 독립적으로 생성하기때문에 괜찮다

     

    728x90
    반응형
Designed by Tistory.