본문 바로가기
JSP-Servlet

Servlet Life Cycle 서블릿 라이프 사이클, 생명주기

by Jann 2021. 10. 5.
728x90

Java Servlet Life Cycle 자바 서블릿 라이프 사이클, 생명주기

Java Servlet Life Cycle 자바 서블릿 라이프 사이클

 

 

Servlet Life Cycle 서블릿 라이프 사이클

객체의 생성부터 소멸까지의 과정을 생명주기 즉 라이프 사이클(Life Cycle)라고 하는데, Servlet의 경우 HttpServlet의 3가지 메소드 init, service, destroy를 오버라이딩하는 라이플 사이클을 가지고 있다.

 

1). init() - 시작

2). service(request, response) - do get/post 통한 요청

3). destroy() -끝

 

Servlet 생명주기 특징

 

WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인

- if (메모리에 없을 경우) { - 해당 서블릿 클래스를 메모리에 올림 - init() 메소드 실행} - service()메소드 실행

- WAS가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행

 

service(request, response) 메소드

HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현한다.

- 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출하고,

-클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출한다.

 

package com.test;

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

@WebServlet("/ServletLifecycle")
public class ServletLifecycle extends HttpServlet {
	private static final long serialVersionUID = 1L;
      
    public ServletLifecycle() {
        System.out.println("ServletLifecycle 생성~");
    }

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init test 호출~");
	}
	
	public void destroy() {
		System.out.println("destroy 호출~");
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
       {
		System.out.println("service호출~");		
	}
}

위의 코드에 대한 결과는 콘솔창에서 아래와 같이 확인이 가능하다.

 

<Servlet Console 출력 결과>

ServletLifecycle 생성~
init test 호출~
service호출~

 

간단한 문장 <연습이다!~> Servlet 출력 코드 예시 

package com.test;

import java.io.IOException;
import java.io.PrintWriter;

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

public class MyTest extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.print("<div style=\"font-size: 2em; margin:100px 100px 100px 100px; \">");
		out.print("연습이다!~");
		String path = req.getContextPath()+"/test02/a.jsp";
		out.print("</div>");
		out.close();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		doGet(req, resp);
	}

}

 

728x90

댓글