Servlet Life Cycle

모든 서블릿은 init(), service(), destroy() 메소드를 호출하는 라이프 사이클을 가진다.
  • init()
    서블릿이 메모리에 로드(Load) 되었을 때 수행되고, 메모리에 남아 클라이언트의 요청 처리
    서블릿이 서비스하기 위해 필요한 초기화 작업 수행(file open, DB Connection, ...)

  • service()
    초기화된 서블릿은 클라이언트의 요청이 있을 때마다 스레드(Thread)가 생성되어 병행적으로 수행
    service() 메소드가 호출하는 메소드 (doGet(), doHead(), doOption(), doPost(), ...)

  • destroy()
    서블릿이 메모리에서 언로드(unload)되기 전에 수행

♣ Cron.java : 일정 시간에 반복적으로 특정한 일을 수행
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Cron extends HttpServlet {
    private long num;
    private Timer timer;
    private TimerTask task;
    
    // 서블릿이 처음 메모리에 로드될 때 수행
    public void init() {
        int delay = 0;
        int period = 5000;

        timer = new Timer();
        // TimerTask 객체를 생성하면서, 수행할 작업
        task = new TimerTask() {
            public void run() {
                num++;
            }
        };
        // delay 시간 후에 period 간격으로 task 실행
        timer.scheduleAtFixedRate(task, delay, period);
    }
    
    // 서블릿이 메모리에서 삭제될 때 Timer와 TimerTask 작업 취소
    public void destroy() {
        task.cancel();
        timer.cancel();
    }

    public void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
        res.setContentType("text/html;charset=UTF-8");
        PrintWriter out = res.getWriter();
        req.setCharacterEncoding("UTF-8");

        out.println("<html>");
        out.println("<head><title>Cron Test</title></head>");
        out.println("<body><h3>Cron Test</h3>");
        out.println("5초 간격으로 숫자가 증가함 (새로고침 버튼 클릭).");
        out.println("<p>숫자 = " + num + "</body></html>");    
    }
}

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,