Servlet Lifecycle


methods

  • LifecycleServicelet()-作成者
  • init()-初期化
  • サービス(リクエスト、レスポンス)-サービスコール
  • destroy()-削除
  • さぎょうげんり


    WASがサーブレット要求を受信した場合は、そのサーブレットがメモリ内にあることを確認します.
    if(メモリにありません){
       - このテンプレートクラスをメモリに格納(コンストラクタを呼び出す)
       - Init()メソッドの実行
    }
        - サービス()メソッドの実行->リクエストの受信時に、応答する必要があるすべてのコンテンツをサービスメソッドに保存する必要があります.
  • またはWebアプリケーションの更新が終了すると、destroy()メソッドは
  • を実行します.
    package examples;
    
    import java.io.IOException;
    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;
    
    /**
     * Servlet implementation class LifecycleServlet
     */
    @WebServlet("/LifecycleServlet")
    public class LifecycleServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        public LifecycleServlet() {
            System.out.println("LifecycleServlet 생성");
            // TODO Auto-generated constructor stub
        }
    
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 호출");
    	}
    
    	public void destroy() {
    		System.out.println("destroy 호출");
    	}
    
    	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		System.out.println("service 호출");
    	}
    
    }
    

    doGetとdoPostの利用

  • DoGet、DoPostを使用する場合はサービス関数
  • を上書きする必要はありません.
  • HttpServletテンプレートメソッドモードでサービスメソッドを実装
    ->service()メソッドrequestメソッドに従ってdoGet、doPost、...じっこうかんすう
    クライアントの要求がGET/POSTの場合、独自のdoGet/doPost(request,response)メソッドが呼び出されます.
    ex)該当するテンプレートに直接URLアドレスを入力するか、リンク->GETをクリックしてサーバに要求を送信する
    ->呼び出しサービス()呼び出しdoGet()メソッド
  • 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 생성");
            // TODO Auto-generated constructor stub
        }
    
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init 호출");
    	}
    
    	public void destroy() {
    		System.out.println("destroy 호출");
    	}
    	
    //service() 메서드 비활성화
    //	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //		System.out.println("service 호출");
    //	}
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		resp.setContentType("text/html");
    		PrintWriter out = resp.getWriter();
    		out.println("<html>");
    		out.println("<head><title>form</title></head>");
    		out.println("<body>");
    		out.println("<form method='post' action='/firstweb/LifecycleServlet'>"); //form: action의 url으로 method를 요청한다는 의미
    		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();
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		resp.setContentType("text/html");
    		PrintWriter out = resp.getWriter();
    		String name = req.getParameter("name"); //request의 요청 정보로부터 name값을 가져옴
    		out.println("<h1> hello " + name + "</h1>");
    		out.close();
    		}
    
    }