본문 바로가기
개발이야기/웹_백엔드

14) Servlet 라이프 싸이클

by 효우너 2020. 7. 26.
728x90
반응형

* 이 글은 부스트코스 웹 백엔드 강의 수강 바탕으로 작성되었습니다.

 

1. LifecycleServlet

HttpServlet의 3가지 메소드를 오버라이딩

  • init()
  • service(request, response)
  • destroy()

 

 

실습코드

LifecycleServlet.java

package examples; 
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;

@WebServlet("/LifecycleServlet") 
public class LifecycleServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

public LifecycleServlet() { 
System.out.println("LifecycleServlet 생성!!"); 
} 

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호출!!"); 
	} 
} 

2. Servlet 생명주기

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
  •  if (메모리에 없음) {
     - 해당 서블릿 클래스를 메모리에 올림
     - init() 메소드를 실행
    }
     - service()메소드를 실행
  • was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행됩니다.

 

 

실습코드

LifecycleServlet.java

package examples; 
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; 

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

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 { 
response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 
out.println("<html>"); 
out.println("<head><title>form</title></head>"); 
out.println("<body>"); 
out.println("<form method='post' action='/firstweb/LifecycleServlet'>"); 
out.println("name : <input type='text' name='name'><br>"); 
out.println("<input type='submit' value='ok'><br>"); 
out.println("</form>"); 
out.println("</body>"); 
out.println("</html>"); 
out.close(); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
response.setContentType("text/html"); 
PrintWriter out = response.getWriter(); 
String name = request.getParameter("name"); 
out.println("<h1> hello " + name + "</h1>"); 
out.close(); 
} 

// protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
// System.out.println("service 호출!!"); 
// } 
//  }

 

3. service(request, response) 메소드

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

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

 
4. LifecycleServlet 수정 실습

  • Service(request, response)메소드 주석처리
  • HttpServlet의 doGet(request, response)메소드 오버라이딩
  • HttpServlet의 doPost(request, response)메소드 오버라이딩
728x90
반응형

'개발이야기 > 웹_백엔드' 카테고리의 다른 글

16) JSP란?  (0) 2020.07.30
15) Request, Response 객체 이해하기  (0) 2020.07.29
13) Servlet 이란?  (0) 2020.07.24
12) WAS  (0) 2020.07.24
11) 웹서버  (0) 2020.07.24

댓글