본문 바로가기

WEB

서블릿(Servlet)과 서블릿 컨테이너(Servlet Container)

Servlet

Servlet은 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이며
클라이언트의 요청을 처리하고, 그 결과를 반환하는 역할을 합니다.
웹페이지가 동적인 기능을 할 수 있게 도와주는 것입니다.

 

특징

 

  • 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트 입니다.
  • HTML을 사용하여 Response 합니다.
  • JAVA의 스레드를 이용하여 동작합니다.
  • MVC 패터에서 컨트롤러로 이용됩니다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet클래스를 상속받습니다.
  • UDP 보다 속도가 느립니다.
  • HTML 변경 시 Servlet을 재 컴파일해야하는 단점이 있습니다.

Servlet Container

서블릿을 담고 관리해주는 컨테이너 입니다.
톰캣(Tomcat)처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 합니다.
클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse를 생성하여 post, get 여부에 따라 동적인 페이지를 생성하여 응답을 보냅니다.

 

HttpServletRequest, HttpServletResponse

 

1) HttpServletRequest

  • http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용하며
    헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드와 Body의 Stream을 읽어 들이는 메서드를 가지고 있습니다.

2) HttpServletResponse

  • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse 객체를 생성하여 서블릿에게 전달하고 이 객체를 활용하여 content type, 응답 코드, 응답 메시지 등을 전송합니다.

 

특징

 

  • 클라이언트에서 요청을 하면 컨테이너는 HttpServletRequest, HttpServletResponse를 생성하여 post, get 여부에 따라 동적인 페이지를 생성하여 응답을 보냅니다.
  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리합니다.
  • 서블릿 객체는 싱글톤으로 관리합니다. -> 고객의 요청이 올때마다 계속 객체를 생성하는것은 비효율적이기에 최초 로딩시점에 미리 만들어두고 재활용합니다.

 

 

서블릿 예시

서블릿 예시

url이 호출되면 서블릿 코드가 실행됩니다.

HTTP의 요청정보는 HttpServletRequest, 응답정보는 HttpServletResponse가 됩니다.

 

Http 요청이 왔을때

1. WAS(Web Application Server)는 Request, Response 객체를 만들어서 서블릿 객체를 호출합니다.

2. 개발자는 Request에서 정보를 꺼내 사용하고 Response에 응답 정보를 입력합니다.

3. WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답정보를 생성하고 웹브라우저로 보내줍니다.

 

구현
public class myServlet extends HttpServlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init method 호출!");
    }
    
    @Override
    public void destroy() {
        System.out.println("destroy method 호출!");
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        System.out.println("doGet service method 호출!");		
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        System.out.println("doPost service method 호출!");		
    }
	
}

 

1) init

  • 서블릿 처음으로 요청될 때 초기화를 하는 메서드입니다.
  • 초기화 된 서블릿은 싱글톤으로 관리되어 다시 호출하면 기존에 있던 서블릿 클래스를 호출합니다.

2) service

  • 서블릿 컨테이너가 요청을 받고 응답을 내려줄 때 필요한 메서드입니다.

3) doGet

  • GET 방식으로 data 전송 시 호출합니다.

4) doPost

  • POST방식으로 data 전송 시 호출합니다.

5) destroy

  • 사용되지 않는 서블릿 클래스를 컨테이너가 주기적으로 호출하여 제거합니다.

 

 

 

 

참조

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1