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 |