서블릿 라이프사이클에 대해 궁금증을 갖게 되어 정리해보았다.



■  서블릿은 init () 메소드를 호출하여 초기화된다.


■  서블릿은 service () 메소드를 호출 하여 클라이언트의 요청을 처리한다.


■  서블릿은 destroy () 메소드를 호출하여 종료된다.


■  마지막으로, 서블릿은 JVM의 가비지 컬렉터에 의해 가비지 수집된다.



그림으로 표현하면 다음과 같다.




init 메소드는 처음 한번만 실행되고 그 이후에 service()가 다 처리를 하는 것이다.

service () 메소드는 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)을 확인하고

적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출한다.



그럼 정말로 이렇게 도는지 확인하기 위해 테스트 소스를 작성해보았다.




1. jsp 파일


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).on("click""#button"function() {
        // get method 호출
        $.get("myServlet"function(content) {             
            $( "#list" ).append( "<li>"+content+"</li>" );
            myMethod();
        });
    
    myMethod = function(){
        // ajax post method 호출
        var myData = $("#button").val();
        $.ajax({
            type : "POST",
            data : myData,
            url : "myServlet",
            success : function(content) {
                $( "#list" ).append( "<li>"+content+"</li>" );
            }
        });
    }
});
</script>
</head>
<body>
    <button id="button" value="1">servlet 메소드 호출하기</button>
    <ul id="list">
    </ul>
</body>
</html>
 
cs



2. 서블릿 파일


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package myServletTest;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/myServlet/*")
public class MyServlet extends HttpServlet{
    
    private static final long serialVersionUID = 1L;
    String msg = "default";
    
    // The servlet is initialized by calling the init() method.
    public void init() throws ServletException {
        msg = "init 메소드 Call";
    }
    
    
    // The servlet calls service() method to process a client's request.
    // service () 메소드는 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)을 확인하고 
    // 적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출
    @Override
    public void service(ServletRequest request, ServletResponse response) 
            throws ServletException, IOException {
        String text = "Service 메소드 Call";
        if(!"default".equals(msg)){
            text = msg +"<br>"+text;
            msg = "default";
        }
        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        response.getWriter().write(text);       
    }
    
    
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String text = "doGet 메소드 Call";
        commonMethod(text, response);
    }
    
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String text = "doPost 메소드 Call";
        commonMethod(text, response);
    }
 
    // The servlet is terminated by calling the destroy() method.
    @Override
    public void destroy() {
        // Finalization code...
        System.out.println("destroy method call");
    }
    
 
    private void commonMethod(String text, HttpServletResponse response) 
            throws ServletException, IOException{
        if(!"default".equals(msg)){
            text = msg +"<br>"+text;
            msg = "default";
        }
        response.setContentType("text/plain");  
        response.setCharacterEncoding("UTF-8"); 
        response.getWriter().write(text);   
    }
}
 
cs


버튼을 누를시 get 요청 1번,  post 요청 1번이 이루어지고

response 시 공통되는 부분은 메소드로 빼서 작성했다.


이후 실행을 하면 


서블릿 java 파일에 service() 가 없을 경우 init() 한번 호출 이후 doGet(), doPost()를 호출한다.





서블릿 java 파일에 service() 가 있을 경우 init() 한번 호출 이후 service()를 호출한다.

service () 메소드가 HTTP 요청 유형 (GET, POST, PUT, DELETE 등)에 따라

적절하게 doGet, doPost, doPut, doDelete 등의 메소드를 호출하여 처리해줌을 알수 있었다.






이후 서블릿이 종료되면 destroy() 메소드가 발생하며 종료된다.



마지막으로 작성한 소스코드를 첨부한다.


myServletTest.zip




+ Recent posts