자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 37. 서블릿(Servlet) - 서블릿 개요, 서블릿 컨테이너, 서블릿의 동작 방식, 서블릿 작성 규칙

개발학생 2025. 4. 28. 15:52
반응형

1. 서블릿 개요

  • JSP가 나오기 이전, 자바로 웹 애플리케이션을 개발할 수 있도록 만든 기술
  • 클라이언트의 요청에 동적으로 작동하는 웹 애플리케이션 컴포ㅓㄴ트
  • MVC 모델에서 컨트롤러(Controller) 역할
  • 모든 메서드는 스레드로 동작
  • javax.servlet.http 패키지의 HttpServlet 클래스를 상속받음 

2. 서블릿 컨테이너

  • 서블릿은 스스로 동작하지 않으므로, 그를 관리하는 컨테이너가 필요함
    -> 여기서는 서블릿 컨테이너로 톰캣(Tomcat) 사용
  • 역할
    • 통신 지원: 클라이언트와의 통신을 위해 서버에서 특정 포트로 소켓을 열고 I/O 스트림을 생성하는 등의 과정을,
      간단히 해주는 API 제공
    • 수명주기 관리: 서블릿을 인스턴스화 한 후 초기화 하고 요청에 맞는 적절한 메서드 호출
      -> 응답 후에는 가비지 컬랙션으로 객체 소멸
    • 멀티스레딩 관리: 서블릿 요청들을 스레드를 생성해 처리(멀티스레드 방식으로 여러 요청 동시 처리)
    • 보안 관리 및 JSP 지원: 보안을 지원하므로, 보안 기능을 별도 구현하지 않음

서블릿과 서블릿 컨테이너

 

3. 서블릿의 동작 방식

  • 서블릿은 MVC 패턴에서 컨트롤러 역할(MVC 패턴을 따라 웹 애플리케이션을 개발하는 방법이 모델2 방식)
    -> 클라이언트의 요청을 받아 분석 후 처리할 서블릿을 찾고, 서블릿을 통해 비즈니스 서비스 로직을 후출하고, 
        모델로부터 그 결괏값을 받아 request나 session 영역에 저장한 후,
        결괏값을 출력할 적절한 뷰(JSP 페이지)를 선택하여 결괏값을 출력하고 요청한 클라이언트에 응답
  • 그림에 따르면 컨트롤러와 DAO 사이에 비즈니스 서비스 객체가 있는데,
    이는 컨트롤러가 요청을 분석한 후 호출되어 실제 비즈니스 로직을 처리하는 역할 
    -> 프로그램으로 구현하면 코드가 너무 어려워지므로,
        이 책에서는 서블릿이 컨트롤러와 서비스 객체의 역할을 모두 할 수 있도록 구현 

4. 서블릿 작성 규칙

  • javax.servlet, javax.servlet.http, java.io 패키지 임포트
  • 반드시 public으로 서블릿 클래스를 선언하고, HttpServlet을 상속받아야 함
  • 사용자의 요청을 처리하기 위해, doGet() 메서드나 doPost() 메서드를 반드시 오버라이딩
  • doGet() 메서드나 doPost() 메서드는 ServletException이나 IOException 예외를 throw하도록 선언
  • doGet() 메서드나 doPost() 메서드를 호출할 때의 매개변수는 HttpServletRequest, HttpServletResponse
    -> requset와 response 객체의 자료형으로, 클라이언트의 요청을 전달하고 응답하기 위한 클래스들
// 서블릿 작성 규칙에 따라 작성한 서블릿 클래스의 예시
package 패키지명;

// 기본적으로 필요한 패키지(클래스)
import java.io.IOException;

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

public class 서블릿클래스명 extends HttpServlet {    // HttpServlet 상속
  @Override    // doGet() 오버라이딩
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
      // 메서드의 실행부
  }
}

 

반응형