진짜 개발자
본문 바로가기

Web/JSP,Servlet

Servlet - Servlet 개념

728x90
Servlet이란

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에 비해)

 - 빠르다 (스레드를 이용하여 요청을 처리하므로 -> 즉 이전의 CGI의 경우 각각의 CGI를 프로세스로써 생성하여 실행하고 죽는 식)
 - 플랫폼 독립적 (Java 기반이기 때문에)
 - 보안 (Servlet Container 와 Java가 지원하는 보안기능을 사용가능)


동작 과정

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 형식이다.

 

역할

  1. 배포시 각 어플리케이션의 환경을 설정하는 역할.
  1. 서버가 처음 로딩될 때 읽혀서 해당 환경설정을 tomcat에 전달.

    - 배포할 Servlet의 정보

    - 각각의 Serlvet이 매핑되는 URL정보.

 

Web.xml의 내용

  1. ServletContext의 초기 파라미터.
  1. Session의 유효시간
  1. Serlvet/JSP의 정의
  1. Servlet/JSP 매핑 URL
  1. Error Pages 처리
  1. 리스터/필터 설정
  1. 보안

등등..

 


Context Path

- WAS에서 웹 어플리케이션을 구분하기 위한 Path이다. 이클립스에서 WebProject를 생성하면 자동으로 server.xmlContext 태그안에 생성된다