김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프론트앤드
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 자바
  • 백앤드
  • 코딩
  • HTML공부
  • httperror
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • ErrorPage
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 객체지향프로그래밍
  • 코딩공부
  • web.xml수정
  • 개발자
  • 풀스택
  • http에러메세지
  • 자바공부
  • 코딩공부 #자바공부
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ JSP/: 기본 익히기

[JSP] #12-2 Sevlet의 생명주기(LifeCycle)

2022. 10. 27. 12:35

1. 생명 주기?

 

 처음에 생명주기란 말을 듣고는 "뭐가.. 주... 죽는거야?"라는 생각이 들었다.

 서블릿을 통해 요청이 되고 응답이 되어지는 하나의 과정을 생명 주기라고 부른다.

 

 만약 클라이언트가 서블릿에 무언가를 요청한다면 서블릿도 자바 클래스이므로 당연히 초기화 과정과 메모리에 인스턴스를 생성한 뒤 서비스를 수행한 후 다시 소멸되는 과정을 거친다.

 이 각각의 과정에서 호출되어 기능을 수행하는 메서드들이 서블릿 생명주기 메서드이다.

 즉, 서블릿 생명주기 메서드란 서블릿의 실행 단계마다 호출되어 기능을 수행시키는 콜백 메서드이다.

 

 HttpServlet 클래스의 계층도 안에 이 생명주기에 대한 클래스가 있다.

 

- HttpServlet 클래스의 계층도
  class GenericServlet {}
  class HttpServlet extends GenericServlet {}
  class LifeCycle extends HttpServlet {}

 

 즉 생명주기라는 클래스를 사용하여 HttpServlet 클래스가 하나의 서블릿을 동작시킨다는 것!

 그리고 이것을 사용시키려면 web.xml에 등록을 해야 한다.

 이 결과 확인은 life.do 라는 명령어를 통해 실행시킬 예정이다.

 (물론 이 과정은 스프링 프레임워크에서 다 간소화되어져있지만 지금은 코드로 다 구현을 한다)

 

<!-- LifeCycle서블릿(HttpServlet 생명주기) 등록 -->
  <servlet>
  	<servlet-name>son</servlet-name>
  	<servlet-class>net.control.LifeCycle</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>son</servlet-name>
  	<url-pattern>/life.do</url-pattern>
  </servlet-mapping>

 

 

 그런데, 여기서 잠깐!
 대체 왜?
 왜 생명주기를 쓸까?
 그냥 서블릿을 실행시키면 안되나?
 굳이 구간을 나눠나눠가면서 프로그램을 실행시킬까?

 서블릿을 사용하는 이유는 빠른 응답속도 때문이다.
 왜냐하면 Servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청시에는 기존의 객체를 재활용하기 때문이다(이것이 생명주기에서 사용되는 메서드).
 그렇기에 동작 속도가 빠른 것이다. 만약 다양한 사용자들이 동일한 작업을 여러 번 요청하여 같은 작업을 서블릿을 통해 반복시킬 때 메모리에 존재하는 서블릿을 재사용함으로써 훨씬 빠르고 효율적으로 동작시킬 수 있다.

 

 

 

2. 생명 주기의 주요 메서드!

 

위에서 설명했듯 생명 주기의 각 분기별로 역할을 하는 주요 메서드들이 있다.

 

https://kadosholy.tistory.com/47

 

 

1) init()

 서블릿이 생성(초기화)되는 단계.

 

2) service()

 개발자가 구현한 방식으로 서블릿이 일을 하는 단계.

 URL을 통해서 요청이 들어오면(새로고침 등) service() 가 요청을 받아 전송방식을 구분(get 또는 post)해서 doGet() 또는 doPost 메서드를 호출한다.

 

3) doGet() & doPost()

 요청에 따라 get 또는 post방식으로 서블릿을 실행.

 

4) destroy()

 서블릿이 일을 마치고 소멸되는 단계.

 

5) 서블릿 생명주기 예제

package net.control;

import java.io.IOException;

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

public class LifeCycle extends HttpServlet {

	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
		System.out.println("init() 호출...");
	} // init() end
	
	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.service(arg0, arg1);
		System.out.println("service() 호출...");
	} // service() end
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
		System.out.println("doGet() 호출...");
	} // doGet() end

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
		System.out.println("doPost() 호출...");
	} // doPost() end

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		System.out.println("destroy() 호출...");
	} // destroy() end
	
} // class end

 

 위의 코드를 따라서 url에 접속해보았다.

 그리고 새로고침을 3번한 뒤 서버를 종료시켰다.

 그러자 이클립스 콘솔창에 출력된 결과 화면이 바로 아래와 같다.

 

http://localhost:9090/basic05_mvc/life.do

 

저작자표시 비영리 동일조건 (새창열림)

'⁂ JSP > : 기본 익히기' 카테고리의 다른 글

[JSP] #12-3 MVC의 디자인 패턴  (0) 2022.10.27
[JSP] #12-1 HttpServlet 파헤치기!  (0) 2022.10.27
[JSP] #11-5 JSTL 제어문  (0) 2022.10.26
[JSP] #11-4 JSTL(JSP Standard Tag Library, JSP전용태그)  (0) 2022.10.26
[JSP] #11-3 EL(Expression Language) - 내장 객체  (0) 2022.10.26
    '⁂ JSP/: 기본 익히기' 카테고리의 다른 글
    • [JSP] #12-3 MVC의 디자인 패턴
    • [JSP] #12-1 HttpServlet 파헤치기!
    • [JSP] #11-5 JSTL 제어문
    • [JSP] #11-4 JSTL(JSP Standard Tag Library, JSP전용태그)
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바