본문 바로가기
JSP

[JSP] 8. 서블릿 생애 주기

글: Song hyun 2024. 7. 2.
728x90
반응형

[JSP] 8. 서블릿 생애 주기

 

 

1. 서블릿 생애 주기란?

-WAS는 웹 컨테이너를 포함하고 있다.

-웹 컨테이너는 서블릿 컨테이너, JSP 컨테이너가 있다.

 

 

2. 서블릿 생애 주기

(1) 클래스 로딩

(2) 서블릿 인스턴스 생성 (생성자 호출)

(3) 서블릿 초기화 (init() 메서드 호출)

(4) 서블릿 요청 처리 (doGet/doPost)

(5) 서블릿 컨테이너 소멸 (destroy() 메서드 호출)

 

 

3. 시나리오 코드

package com.tenco;

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

// http://localhost:8080/hello/my-servlet1
public class MyServlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;


    public MyServlet1() {
        super();
        System.out.println("호출 1 : 생성자 ");
    }

    @Override
    public void init() throws ServletException {
    	super.init();
    	System.out.println("호출 2 : init() ");
    }
   
    // 클라이언트가 매번 요청을 하는데, servic() 메서드는 그 때마다 항상 호출될까?
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	System.out.println("서비스 메서드 호출 확인");
    	System.out.println("호출 3 : service() ");
    	response.setContentType("text/html; charset=UTF-8");
    }
    
    @Override
    public void destroy() {
    	System.out.println("destroy 메서드 호출");
    	super.destroy();
    }
   

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 메서드 호출");
		System.out.println("호출 4-2 : doGet() ");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost 메서드 호출");
		System.out.println("호출 4-1 : doPost() ");
	}

}

 

package com.tenco;

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

// http://localhost:8080/hello/my-servlet1
public class MyServlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;


    public MyServlet1() {
        super();
        System.out.println("호출 1 : 생성자 ");
    }

    @Override
    public void init() throws ServletException {
    	super.init();
    	System.out.println("호출 2 : init() ");
    }
   
    // 클라이언트가 매번 요청을 하는데, servic() 메서드는 그 때마다 항상 호출될까?
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	System.out.println("서비스 메서드 호출 확인");
    	System.out.println("호출 3 : service() ");
    	response.setContentType("text/html; charset=UTF-8");
    	// 부모 클래스 메서드 호출
    	super.service(request, response);
    }
    
    @Override
    public void destroy() {
    	System.out.println("destroy 메서드 호출");
    	super.destroy();
    }
   

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 메서드 호출");
		System.out.println("호출 4-2 : doGet() ");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost 메서드 호출");
		System.out.println("호출 4-1 : doPost() ");
	}

}

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://jakarta.ee/xml/ns/jakartaee"
	xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
	version="6.0">
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>

	<servlet>
		<description></description>
		<display-name>HelloServlet</display-name>
		<servlet-name>HelloServlet</servlet-name>
		<servlet-class>com.tenco.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/hello-servlet</url-pattern>
	</servlet-mapping>
	
	<display-name>hello_servlet</display-name>
	<servlet>
		<description></description>
		<display-name>MyServlet1</display-name>
		<servlet-name>MyServlet1</servlet-name>
		<servlet-class>com.tenco.MyServlet1</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>MyServlet1</servlet-name>
		<url-pattern>/my-servlet1</url-pattern>
	</servlet-mapping>

</web-app>
package com.tenco;

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

// http://localhost:8080/hello/my-servlet1
@WebServlet(urlPatterns="/example",loadOnStartup=1)
public class MyServlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;


    public MyServlet1() {
        super();
        System.out.println("호출 1 : 생성자 ");
    }

    @Override
    public void init() throws ServletException {
    	super.init();
    	System.out.println("호출 2 : init() ");
    }
   
    // 클라이언트가 매번 요청을 하는데, servic() 메서드는 그 때마다 항상 호출될까?
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	System.out.println("서비스 메서드 호출 확인");
    	System.out.println("호출 3 : service() ");
    	response.setContentType("text/html; charset=UTF-8");
    	// 부모 클래스 메서드 호출
    	super.service(request, response);
    }
    
    @Override
    public void destroy() {
    	System.out.println("destroy 메서드 호출");
    	super.destroy();
    }
   

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet 메서드 호출");
		System.out.println("호출 4-2 : doGet() ");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost 메서드 호출");
		System.out.println("호출 4-1 : doPost() ");
	}

}
728x90
반응형