- [JSP] 8. 서블릿 생애 주기2024년 07월 02일
- Song hyun
- 작성자
- 2024.07.02.:21
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반응형'JSP > 기본 이론' 카테고리의 다른 글
[JSP] 10. WAR 파일 생성 및 배포 (0) 2024.07.03 [JSP] 9. 서블릿 작성, 배포, web.xml에 대한 이해 (1) 2024.07.03 [JSP] 7. 서블릿을 사용하여 GET/POST 방식으로 데이터 주고 받기 (0) 2024.07.02 [JSP] 6. 서블릿 만들기 (0) 2024.07.01 [JSP] 5. 서블릿이란? (0) 2024.07.01 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)