Servlet(서블릿)

조예빈·2024년 5월 3일

Servlet

목록 보기
4/10

Servlet

  • 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
  • 자바로 작성되었기 때문에 자바의 일반적인 특징을 모두 가짐
  • 독자적으로 실행되지 못하고 JSP/Servlet(ex)tomcat) 컨테이너에서 실행되어야 함
  • 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송(서버에서 실행되어 보안성도 높음)

사용자 정의 서블릿 클래스 만들기 -> 서블릿 생명주기 메소드 구현 -> 서블릿 매핑 작업 -> 웹 브라우저에서 서블릿 매핑 이름으로 요청하기

한마디로, 서블릿은 spring boot에서의 spring web과 같은 기능인 것이다. 웹 개발에 특화된 클래스라고 생각하면 된다.

Tomcat(톰캣)

  • JSP/Servlet 컨테이너
  • 자바 기반 오픈 소스로 제공됨

서블릿 특징

  • 서버 쪽에서 실행되며 기능을 수행
  • 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능 제공
  • 스레드 방식으로 실행됨
  • 자바로 만들어져 자바의 특징(객체 지향)을 가짐
  • 컨테이너에서 실행됨
  • 컨테이너 종류에 상관없이 실행됨(플랫폼 독립적)
  • 보안 기능을 적용하기 쉬움
  • 웹 브라우저에서 요청 시 기능을 수행함

계층 구조

  • 자바로 만들어졌기 때문에 클래스들 간 계층 구조를 가짐

    출처

서블릿 생명주기(LifeCycle) 메소드

  • 서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메소드
    |생명주기 단계|호출 메소드|특징|
    |-|-|-|
    |초기화|init()|서블릿 요청 시 맨 처음 한번만 호출되며, 초기화 작업 수행|
    |작업 수행|doGet(), doPost()|서블릿 요청 시 매번 호출되며 실제로 클라이언트가 요청하는 작업 수행|
    |종료|destroy()|서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출되며 마무리 작업을 주로 수행

다른 메소드는 필요 없으면 생략해도 되지만, doGet()이나 doPost()와 같이 do로 시작하는 메소드는 서블릿의 핵심 기능을 처리하므로 반드시 구현해야함

사용자 정의 서블릿

  • HttpServlet 클래스를 상속받아서 제작
  • 이후 init, doGet, destory 메소드를 오버라이딩 해서 기능 구현

톰캣의 servlet-api.jar 클래스 패스 설정

  • 서블릿 api들은 톰캣의 servlet-api.jar 라이브러리로 제공되므로 이클립스의 프로젝트에서 서블릿을 사용하려면 반드시 클래스 패스를 설정해야 함

서블릿 매핑

  • 프로젝트 이름 뒤에 패키지 이름이 포함된 클래스 이름 전부를 입력해야 함

    http://IP주소:포트번호/프로젝트 이름/패키지 이름/패키지 이름이 포함된 클래스 이름

이 때, 톰캣이 로컬 PC에 설치된 경우에는 다음과 같이 입력해도 됨

http://localhost:8000/pro05/first

서블릿 동작 과정

  1. 클라이언트가 http://localhost:8000/pro05/first로 요청
  2. FirstServlet이 메모리에 존재하는지 확인 -> 최초의 요청이면 init() 메소드를 호출하여 FirstServlet 인스턴스를 메모리에 로드. 최초의 요청이 아니면 바로 3번으로 이동
  3. doGet(), doPost() 메소드를 호출하여 서비스를 함

=> 서블릿은 메모리에 존재하는 서블릿을 재사용함으로써 빠르고 효율적으로 동작

어노테이션을 이용한 서블릿 매핑

  • 서블릿을 만듦과 동시에 어노테이션 적용

    @WebServlet("/first")

  • 어노테이션 적용 시에는 매핑 이름이 이미 사용된 다른 매핑 이름과 중복되지 않도록 해야 함

서블릿의 기본 기능 수행 과정

  • 클라이언트로부터 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 다시 클라이언트에 돌려주는 과정
  1. 클라이언트로부터 요청을 받음
  2. DB 연동과 같은 비즈니스 로직 처리
  3. 처리된 결과를 클라이언트에 돌려 줌
  • 요청과 관련된 API : javax.servelet.http.HttpServletRequest 클래스
  • 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스

HttpServletResponse를 이용한 서블릿 응답

  1. setContentType()을 이용해 MIME-TYPE을 지정
  2. 데이터를 출력할 PrintWriter 객체 생성
  3. 출력 데이터를 HTML 형식으로 만듦
  4. PrintWriter()의 print나 println()을 이용해 데이터를 출력함

이 때, 아래의 두 줄을 추가해 주어야 한글이 깨지지 않고 제대로 출력된다.

req.setCharacterEncoding("utf-8"); 
response.setContentType("text/html;charset=utf-8");
profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글