FireDrago

[Servlet] 서블릿이란 본문

프로그래밍/Servlet

[Servlet] 서블릿이란

화이용 2024. 1. 19. 13:24

1. 서블릿이란?

  • 서버에서 실행되는 작은 프로그램
  • 웹 어플리케이션 서버 (WAS)가 있어야 실행된다.
  • 클라이언트의 요청에 따라 특정 기능을 실행하고, 결과값을 반환한다.
  • 자바 클래스 형태로 구현된다. 
  • TCP/IP 연결, 소켓연결, HTTP 요청 파싱 후 읽기, 비지니스 로직 실행, HTTP 응답메시지 작성, TCP/IP 연결해제 소켓해제 등의 일련의 과정에서 개발자는 비지니스 로직만 서블릿으로 등록하면 자동으로 WAS가 다른 과정을 수행
  • 멀티스레드 지원

2. 서블릿 실행 순서

  •  클라이언트로 부터 HTTP 요청이 올때마다 HttpRequest, HttpResponse 객체를 생서하고 서블릿에 전달한다
    (request, response 객체는 요청마다 만들어지는 반면, 서블릿은 싱글턴으로 관리된다.)
  • 서블릿 (helloServlet) 이 실행되고 HttpResponse 객체를 생성한다.
  • 이를 바탕으로 HTTP 응답 메시지를 생성하고 클라이언트에게 전달한다.

 

3. 서블릿 계층구조

  • 서블릿은 자바로 만들어 졌기때문에 클래스 간의 계층구조를 가질 수 있다.
  • tomcat 내부의 Servlet , ServletConfig 인터페이스를 구현하는 GenericServlet 클래스가 있고,
    HttpServlet 클래스는 GenericServlet 클래스를 상속받는다.
  • 서블릿을 사용자가 만들기 위해서는 HttpServlet 클래스를 상속받고
    init (  )  : 클래스가 처음 메모리에 로드될때  최초 한번만 실행
    doGet( ) : get 방식의 요청이 올때마다 실행 (주요 기능)
    doPost( ) : post 방식의 요청이 올때마다 실행 (주요기능 )
    destroy (  ) : 서블릿이 종료될때 시행

    등의 메서드를 오버라이딩 하여 구현한다.

 

 

4. 서블릿 매핑하기

  • 서블릿은 클래스를 생성하고, 맵핑을 해야 작동한다.
    맵핑의 방식은 2가지가 있다.

4.1 web.xml 이용

<servlet>
  	<servlet-name>aaa</servlet-name>    <!- 서블릿 이름지정-->
  	<servlet-class>sec01.ex01.FirstServlet</servlet-class> <!- 서블릿 경로지정-->
  </servlet>
  <servlet>
  	<servlet-name>bbb</servlet-name>
  	<servlet-class>sec01.ex01.SecondServlet</servlet-class>
</servlet>
  
<servlet-mapping>
  	<servlet-name>aaa</servlet-name> <!- 서블릿 이름선택-->
  	<url-pattern>/first</url-pattern> <!- 서블릿을 실행할 url 명령어-->
  </servlet-mapping>
  <servlet-mapping>
  	<servlet-name>bbb</servlet-name>
  	<url-pattern>/second</url-pattern>
</servlet-mapping>

4.2 애너테이션 이용

  • web.xml 을 편집하는것은 번거롭다. 이에따라 서블릿 클래스 파일 내부에서 @ 를 사용하여 맵핑 할 수 도 있다.
@WebServlet("/third")  //  /third 명령어를 사용하면 이 servlet을 호출한다.
public class ThirdServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		System.out.println("ThirdServlet init 메서드 호출");
	}
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("ThirdServlet doGet 메서드 호출");
	}
	
	@Override
	public void destroy() {
		System.out.println("ThirdServlet destroy 메서드 호출");
	}

}

 

 

5. 멀티스레드 지원

  • 싱글턴으로 관리되는 서블릿을 누가 불러올까? 그 역할을 하는 것이 '스레드'이다.
  • 서블릿 컨테이너는 '스레드 풀' 이라는 곳에 스레드를 미리 만들어 놓는다. 
  • 여러 사용자가 접속하면 스레드는 각자 하나의 요청을 담당하여 서블릿을 실행하고 응답한다.
  • 멀티 스레드를 지원하기 때문에 개발자는 스레드를 직접 관리할 필요가 없어 편리하다.