Servlet Life Cycle
모든 서블릿은 init(), service(), destroy() 메소드를 호출하는 라이프 사이클을 가진다.
♣ Cron.java : 일정 시간에 반복적으로 특정한 일을 수행
모든 서블릿은 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>");
}
}
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
- 손가락귀신
정신 못차리면, 벌 받는다.
,