[Servlet 2-2] 생명주기(LifeCycle)

임승현·2022년 11월 29일
0

Servlet

목록 보기
4/14

◈ 서블릿(웹프로그램)은 클라이언트 요청에 의해 WAS 프로그램에 등록된 서블릿 클래스를 읽어 메모리에 저장하고 서블릿 객체로 생성하여 요청 처리 메소드를 호출
→ 클라이언트 요청에 의한 서블릿 객체가 이미 생성되어 있는 경우 새로운 서블릿 객체를 생성하지 않고 기존 서블릿 객체를 사용하여 요청 처리 메소드 호출
→ WAS 프로그램 종료되면 WAS 프로그램에 의해 관리되는 모든 서블릿 객체 소멸
→ WAS 프로그램의 주요 기능 중 하나는 서블릿 객체를 관리하는 웹컨테이너(WebContainer) 기능 제공
◈ 컨테이너(Container) : 프로그램 관련 객체(Component)의 생명주기(LifeCycle)를 관리(생성,사용,소멸)하는 프로그램

📌생성자(Constructor) : 클래스는 자료형으로 객체를 생성하기 위한 특별한 메소드
→ 초기화 작업 - 객체 생성시 필드에 필요한 초기값 저장
→ 서블릿을 클라이언가 요청한 경우 WAS 프로그램이 서블릿 클래스로 서블릿 객체를 생성하기 위해 한번만 호출

public LifeCycleServlet() {
	System.out.println("### LifeCycleServlet 클래스의 생성자 호출 - 서블릿 객체 생성 ###");
    //
    //name="홍길동";
}

📌WAS 프로그램에 의해 서블릿 객체가 생성된 후 가장 먼저 한번만 자동 호출되는 메소드
→ 초기화 작업 관련 명령 작성
→ 서블릿은 생성자 대신 init() 메소드를 이용하여 초기화 작업 명령을 작성하는 것을 권장
◈ 생성자 대신 init() 메소드로 초기화 작업 명령을 작성하는 이유
→ init() 메소드의 매개변수로 ServletConfig 객체를 전달받아 메소드에서 사용 가능
◈ ServletConfig 객체 : 웹자원(WebContext)을 생성하기 위한 환경설정 관련 정보를 저장한 객체
→ [web.xml] 파일에서 제공되는 값을 얻어와 서블릿 클래스에서 사용 가능 - 유지보수의 효율성 증가

@Override//init 오버라이드(매개변수가 있는거를 오버라이드{두번째거})
public void init(ServletConfig config) throws ServletException {
	System.out.println("### LifeCycleServlet 클래스의 init() 메소드 호출 ###");
	//name="홍길동";

🌠ServletConfig.getServletContext() : ServletContext 객체를 반환하는 메소드
→ ServletContext 객체 : 웹자원 관련 정보를 저장한 객체
🌠ServletContext.getInitParameter(String name) : [web.xml] 파일에서 context-param 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드

name=config.getServletContext().getInitParameter("name");
}

📃web.xml

📍 context-param : 현재 프로젝트에 작성된 모든 웹프로그램에게 필요한 값을 제공하기 위한 엘리먼트
📍 param-name : 제공값을 구분하기 위한 이름(식별자)를 설정하는 엘리먼트
📍 param-value : 제공될 값을 설정하는 엘리먼트

<context-param>
  	<param-name>name</param-name>
  	<param-value>홍길동</param-value>
  </context-param>

📍 init-param : 현재 서블릿(웹프로그램)에게 필요한 값을 제공하기 위한 엘리먼트

<init-param>
  	<param-name>title</param-name>
  	<param-value>서블릿</param-value>
</init-param>

📌WAS 프로그램에 의해 서블릿 객체가 소멸되기전 마지막으로 한번만 자동 호출되는 메소드
→ 마무리 작업 관련 명령 작성
→ WAS 프로그램이 종료될 경우 WAS 프로그램에 의해 관리된 모든 서블릿 객체 소멸

@Override
public void destroy() {
	System.out.println("### LifeCycleServlet 클래스의 destroy() 메소드 호출 ###");
}

📌클라이언트 요청에 대한 처리와 처리 결과를 파일로 응답하기 위한 명령을 작성하는 메소드
→ 클라이언트 요청마다 WAS 프로그램에 의해 서블릿 객체로 반복 호출

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	System.out.println("### LifeCycleServlet 클래스의 service() 메소드 호출 ###");

📃LifeCycleServlet.java

package xyz.itwill.servlet;
//
import java.io.IOException;
import java.io.PrintWriter;
//
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;
//
//서블릿(웹프로그램)은 클라이언트 요청에 의해 WAS 프로그램에 등록된 서블릿 클래스를 읽어 메모리에 저장하고 서블릿 객체로 생성하여 요청 처리 메소드를 호출
//→ 클라이언트 요청에 의한 서블릿 객체가 이미 생성되어 있는 경우 새로운 서블릿 객체를 생성하지 않고 기존 서블릿 객체를 사용하여 요청 처리 메소드 호출
//→ WAS 프로그램 종료되면 WAS 프로그램에 의해 관리되는 모든 서블릿 객체 소멸
//→ WAS 프로그램의 주요 기능 중 하나는 서블릿 객체를 관리하는 웹컨테이너(WebContainer) 기능 제공
//컨테이너(Container) : 프로그램 관련 객체(Component)의 생명주기(LifeCycle)를 관리(생성,사용,소멸)하는 프로그램
//
@WebServlet("/lift.itwill")
public class LifeCycleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	//
	private String name;
	//
	//생성자(Constructor) : 클래스는 자료형으로 객체를 생성하기 위한 특별한 메소드
	//→ 초기화 작업 관련 명령 작성 - 객체 생성시 필드에 필요한 초기값 저장
	//→ 서블릿을 클라이언가 요청한 경우 WAS 프로그램이 서블릿 클래스로 서블릿 객체를 생성하기 위해 한번만 호출
	public LifeCycleServlet() {
		System.out.println("### LifeCycleServlet 클래스의 생성자 호출 - 서블릿 객체 생성 ###");
		//
		//name="홍길동";
	}
	//WAS 프로그램에 의해 서블릿 객체가 생성된 후 가장 먼저 한번만 자동 호출되는 메소드
	//→ 초기화 작업 관련 명령 작성 
	//→ 서블릿은 생성자 대신 init() 메소드를 이용하여 초기화 작업 명령을 작성하는 것을 권장
	//생성자 대신 init() 메소드로 초기화 작업 명령을 작성하는 이유
	//→ init() 메소드의 매개변수로 ServletConfig 객체를 전달받아 메소드에서 사용 가능
	//ServletConfig 객체 : 웹자원(WebContext)을 생성하기 위한 환경설정 관련 정보를 저장한 객체
	//→ [web.xml] 파일에서 제공되는 값을 얻어와 서블릿 클래스에서 사용 가능 - 유지보수의 효율성 증가
	@Override//init 오버라이드(매개변수가 있는거를 오버라이드{두번째거})
	public void init(ServletConfig config) throws ServletException {
		System.out.println("### LifeCycleServlet 클래스의 init() 메소드 호출 ###");
		//name="홍길동";
		//
		//ServletConfig.getServletContext() : ServletContext 객체를 반환하는 메소드
		//→ ServletContext 객체 : 웹자원 관련 정보를 저장한 객체
		//ServletContext.getInitParameter(String name) : [web.xml] 파일에서 context-param 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드
		name=config.getServletContext().getInitParameter("name");
	}
	//
	//WAS 프로그램에 의해 서블릿 객체가 소멸되기전 마지막으로 한번만 자동 호출되는 메소드
	//→ 마무리 작업 관련 명령 작성
	//→ WAS 프로그램이 종료될 경우 WAS 프로그램에 의해 관리된 모든 서블릿 객체 소멸
	@Override
	public void destroy() {
		System.out.println("### LifeCycleServlet 클래스의 destroy() 메소드 호출 ###");
	}
	//
	//클라이언트 요청에 대한 처리와 처리 결과를 파일로 응답하기 위한 명령을 작성하는 메소드
	//→ 클라이언트 요청마다 WAS 프로그램에 의해 서블릿 객체로 반복 호출
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("### LifeCycleServlet 클래스의 service() 메소드 호출 ###");
		//
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		//
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>jQuery</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>서블릿의 생명주기(LifeCycle)</h1>");
		out.println("<hr>");
		out.println("<p>"+name+"님, 안녕하세요.</p>");//생성자에 name에 값 미입력시 null 출력
		out.println("</body>");
		out.println("</html>");
	}
}

0개의 댓글