[JSP] 서블릿(servlet) 객체의 라이프사이클

HodooHa·2024년 5월 21일
post-thumbnail

서블릿(servlet)이란?

브라우저가 HTML을 통해 서버에 요청을 전달하면 서버는 요청과 함께 사용자가 전달한 정보를 추출하여 요청된 기능을 처리한다. 이때 서버에서 사용자의 요청을 처리하는 대표적인 자바 기술이 서블릿이다.


서블릿의 작성 규칙

  1. javax.servlt과 javax.servlt.http 패키지의 API를 import한다.
  2. public 클래스로 선언한다.
  3. HttpServlet 클래스를 상속한다.
  4. 라이프 사이클과 관련된 콜백 메소드를 오버라이딩한다.

서블릿 계층 구조


서블릿 콜백 메소드

메소드 호출 시점 기능
init() 서블릿 객체가 생성된 직후 멤버 변수 초기화
service() 브라우저가 요청할 때마다 서블릿이 처리해야 할 구체적인 작업 처리
destory() 서블릿 객체가 삭제되기 직전 자원 해제

서블릿 설정

서블릿 컨테이너는 자신이 생성하고 관리할 객체에 대한 정보를 web.xml파일을 통해서 획득한다. 따라서 서블릿 클래스를 사용하기 위해서는 반드시 서블릿 클래스를 web.xml 파일에 등록해야 한다.

1. XML 설정

< servlet > : 작성된 서블릿 클래스를 등록할 때 사용
< servlet-name > : 서블릿 객체의 이름 (중복을 허용하지 않음)
< servlet-class > : 패키지 경로를 포함한 전체 경로가 등록되어야 함
< servlet-mapping > : 브라우저의 요청 URL과 서블릿을 매핑하는 설정
< url-pattern > : URL 형식을 지정

[xml 설정 예시]

<servlet>
  <servlet-name>monday</servlet-name>
  <servlet-class>com.multi.servlet.e_practice.Monday</servlet-class>
  <init-param>
    <param-name>temp</param-name>
    <param-value>good</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>monday</servlet-name>
  <url-pattern>/monday2.do</url-pattern>
</servlet-mapping>

2. 어노테이션 설정

매번 web.xml 파일을 수정하는 대신에 서블릿에서 어노테이션을 이용하여 복잡한 xml 설정을 대체하는 기능을 제공한다.

[어노테이션 설정 예시]

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/bye2") // <-- 어노테이션![](https://velog.velcdn.com/images/hodooha/post/5238d122-8ddb-4736-8a00-38167f190629/image.png)

public class Hello extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("안녕히가세요.!!");
        String name = request.getParameter("name");
        String message = request.getParameter("message");
        System.out.println("이름은: "+name+ "메시지는 "+ message);
    }
}

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글