4 서블릿의 라이프 사이클.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

12 장 자바 애플릿. 2 Applet 개요 Applet 프로그램 – 웹 페이지에 포함되어 구동 된다. 웹 브라우저나 애 플릿뷰어 (appletviewer) 에서 실행되는 프로그램 – 웹 브라우저 내에 Applet 을 해석하여 실행할 수 있 도록 Applet 구동용 인터프리터가.
Chapter 07 : 서블릿 고급2. chapter 07 : 서블릿 고급2 학습목표 세션 tracking hidden 태그 이용 encodeURL 메소드 사용법 URL 파라미터 이용 쿠키 이용 세션 이용 encodeURL 메소드 사용법.
네트워크 프로그래밍 및 실습.
Introduction to Servlets
2 서블릿의 기초.
4강. Servlet 맛보기 Servlet 문서 작성 하기 web.xml에 서블릿 맵핑 어노테이션을 이용한 서블릿 맵핑
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
최윤정 Java 프로그래밍 클래스 상속 최윤정
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Ch.07-5 xml-rpc 사용하기 김상엽.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
10장 예외 Lab 10-1.
2 서블릿의 기초.
3장. 웹 어플리케이션과 JSP 및 Servlet의 이해 제3장.
9 표준 액션.
Internet Computing KUT Youn-Hee Han
5 익셉션 처리.
11 필터와 래퍼.
PHP입문 Izayoi 김조흔.
1. JSP(Java Server Pages) 소개
3 JSP의 기초.
7 JSP의 기초.
4 쿠키와 세션.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Java Web Programming 4일차.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Power Java 제14장 배치 관리자.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
제14장 자바 서블릿.
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
서블릿 이해하기 JSP 기반의 서블릿과 서블릿 소스 코드를 이해한다. 간단한 서블릿 프로그램을 제작할 수 있다.
6강. Servlet 본격적으로 살펴보기-II
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
10장. 예외처리.
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
26강. 포워딩(Forwarding) RequestDispatcher 클래스 HttpServletResponse 클래스
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
3강. JSP 맛보기 JSP 문서 작성 하기 JSP 아키텍처 Lecturer Kim Myoung-Ho Nickname 블스
13. 연산자 오버로딩.
Method & library.
자바응용.
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
CHAP 21. 전화, SMS, 주소록.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Introduction to JSP & Servlet
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
MIDP 네트워크 프로그래밍 ps lab 김윤경.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
JSP Programming with a Workbook
Power Java 제14장 배치 관리자.
6 쿠키와 세션.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
7 생성자 함수.
6 객체.
20 XMLHttpRequest.
Presentation transcript:

4 서블릿의 라이프 사이클

학습 목표 서블릿 클래스로부터 서블릿 객체가 만들어지고, 서블릿 객체가 초기화 되어서 서블릿이 되고, 서블릿이 사용되고, 최종적으로 소멸되기까지의 전 과정을 서블릿의 라이프 사이클이라고 한다. 이 장에서는 서브릿의 라 이프 사이클에 관련된 프로그래밍 기술을 배워보자. 내 용 서블릿의 라이프 사이클 서블릿 클래스의 init 메서드의 destroy 메서드 서블릿 설정 정보를 갖는 ServletConfig 객체 서블릿의 환경을 표현하는 ServletContext 객체

1. 서블릿의 라이프 사이클 (1) 웹 브라우저에서 호출되면 서블릿 클래스로부터 서블릿 객체가 만들어지고, 그 객체가 웹 컨테이너에 의해 초기화된 다음에 호출된다. 웹 브라우저의 요청을 처리할 수 있는 상태의 서블릿 객체를 서블릿이라고 함. [그림 6-1] 서블릿의 라이프 사이클

1. 서블릿의 라이프 사이클 (2) 서블릿 실행 과정 (1)

1. 서블릿의 라이프 사이클 (3) 서블릿 실행 과정 (2)

1. 서블릿의 라이프 사이클 (4) 서블릿 실행 과정 (3)

1. 서블릿의 라이프 사이클 (5) 서블릿 라이프 사이클(Life Cycle) (1) 서블릿 일생에 대해 궁금한 점? 서블릿 클래스는 언제 로딩되는가? 서블릿의 생성자는 언제 호출되는가? 서블릿은 얼마나 오랫동안 살아 있는가? 서블릿은 자원을 언제 초기화하는가? 서블릿은 사용한 자원을 언제 깨끗하게 청소하는가?

1. 서블릿의 라이프 사이클 (6) 서블릿 라이프 사이클 (2)

1. 서블릿의 라이프 사이클 (7) 서블릿 라이프 사이클 (3) – 관련 메소드

1. 서블릿의 라이프 사이클 (8) 서블릿 라이프 사이클 (3) – 관련 메소드

1. 서블릿의 라이프 사이클 (9) 서블릿 라이프 사이클 (4) – 4번의 중요한 순간들 init() 호출 컨테이너 에서 서블릿 객체를 생성한 다음에 호출한다. service() 이전에 실행 서블릿 객체를 초기화 초기화할 내용(DB 접속 등)이 있는 경우 재정의 service() 호출 클라이언트의 요청 후 컨테이너에서 쓰레드를 이용하여 호출 요청의 HTTP 메소드(GET, POST등)를 참조하여 해당 메소드(doGet(), doPost() 등) 호출 판단 거의 재정의 하지 않음

1. 서블릿의 라이프 사이클 (10) 서블릿 라이프 사이클 (4) – 4번의 중요한 순간들 doGet() / doPost() 호출 service() 메소드에서 HTTP 메소드(GET, POST)를 참조하여 호출 비즈니스 로직을 구현 또는 호출 두 메소드 중 하나는 반드시 재정의하여 구현해야 한다. destroy() 호출 컨테이너 에서 서블릿 객체를 제거할 때에 호출한다. 거의 웹 애플리케이션을 종료할 때. 서블릿 객체 초기화 및 실행 도중에 할당한 자원을 제거 init() 메소드를 재정의하였거나 제거할 자원이 있는 경우 재정의

스레드에 의해 동일한 작업이 중복 수행되는 경우? 1. 서블릿의 라이프 사이클 (11) 서블릿 라이프 사이클 (5) – 클라이언트 요청 실행 클라이언트의 요청은 서로 다른 다른 스레드에서 실행 스레드에 의해 동일한 작업이 중복 수행되는 경우?

2. 서블릿 초기화 & 종료 (1) 서블릿 로딩 & 초기화 컨테이너 시작 시 배포된 웹 애플리케이션 및 서블 릿을 확인 로딩 : 컨테이너 시작 시 로딩 또는 최초 클라이언 트 요청 시 로딩 초기화 : 서블릿 로딩 후에 init()를 호출하여 서블 릿을 초기화 함. service() 메소드는 서블릿 초기화 완료 후에 실행 가능함.

2. 서블릿 초기화 & 종료 (2) 서블릿 초기화 객체가 서블릿이 되는 순간 서블릿 객체는 초기화 과정을 통해 컨테이너로 부터 서블릿 자격을 부여받음

[그림 6-2] 서블릿 클래스의 init 메서드와 destroy 메서드 2. 서블릿 초기화 & 종료 (3) init() / destroy() 메소드 재정의 서블릿 일생에서 한번만 실행되어야 할 코드는 서블릿 클래스 안에 init() 메서드와 destroy() 메서드를 선언하고 그 안에 써 놓으면 된다. public class SomeServlet extends HttpServlet { public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { out.println( “<HTML> ”); out.println( “<HEAD><TITLE>Hello</TITLE></HEAD> ”); out.println( “<BODY>Hello, Everyone.</BODY> ”); out.println( “</HTML> ”); public void destroy() { 서블릿이 초기화될 때 해야 할 일을 기술하는 부분 서블릿이 제거되기 전에 해야 할 일을 기술하는 부분 [그림 6-2] 서블릿 클래스의 init 메서드와 destroy 메서드

2. 서블릿 초기화 & 종료 (4) init() 메서드의 작성 방법 파라미터가 없는 메서드로 선언해야 하고, 리턴 타입은 void로 지정해야 하며, public 메서드로 선언해야 한다. javax.servlet.ServletException 타입 예외를 던질 수 있으며, 필요치 않으면 생략 가능 위의 점선으로 표시된 부분에 서블릿 클래스의 초기화 작업 중에 실행해야 할 코드를 작성 public void init() throws ServletException { } 우리가 작성할 코드가 들어가는 부분

2. 서블릿 초기화 & 종료 (5) init() 메서드 호출 컨테이너는 서블릿 클래스를 로딩한 후에 서블릿 클래스의 init(ServletConfig config) 메소드를 호출하여 초기화한다. init(ServletConfig config) 메소드에서 init() 메소드를 호출한다.

2. 서블릿 초기화 & 종료 (6) init() 메서드의 재작성 예 (1) [예제6-1] 피보나치 수열을 출력하는 서블릿 클래스 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.math.BigInteger; public class FibonacciServlet extends HttpServlet { private BigInteger arr[]; public void init() { arr = new BigInteger[100]; arr[0] = new BigInteger( “1 ”); arr[1] = new BigInteger( “1 ”); for (int cnt = 2; cnt < arr.length; cnt++) arr[cnt] = arr[cnt-2].add(arr[cnt-1]); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String str = request.getParameter( “NUM ”); int num = Integer.parseInt(str); if (num > 100) num = 100; response.setContentType( “text/html;charset=euc-kr ”); PrintWriter out = response.getWriter(); out.println( “<HTML> ”); out.println( “<HEAD><TITLE>피보나치 수열</TITLE></HEAD> ”); for (int cnt = 0; cnt < num; cnt++) out.println(arr[cnt] + “ ”); out.println( “</BODY> ”); out.println( “</HTML> ”);

2. 서블릿 초기화 & 종료 (7) init() 메서드의 재작성 예 (2) 톰캣의 webapps 디렉터리 아래에 웹 애플리케이션 디렉터리를 만들고, 서블릿 클래 스를 컴파일한 결과를 설치하고 등록한다. ② WEB-INF/classes 서브디렉터리에 [예제 6-1] 의 컴파일 결과를 저장하세요 ③ WEB-INF 서브디렉터리에 다음과 같은 web.xml 파일을 만들어서 저장하세요 ① 톰캣의 webapps 디렉터리 아래에 brain06/WEB-INF/classes 서브디렉터리를 만드세요

[그림 6-6] 웹 컨테이너가 시작될 때 서블릿이 초기화되도록 만드는 엘리먼트 2. 서블릿 초기화 & 종료 (8) init() 메서드의 재작성 예 (3) [예제 6-1]을 호출하면서 출력할 항의 수를 URL 뒤에 쓰세요. [그림 6-5] 예제 6-1의 실행 결과 웹 컨테이너가 시작될 때 서블릿이 초기화되도록 만드는 엘리먼트 [그림 6-6] 웹 컨테이너가 시작될 때 서블릿이 초기화되도록 만드는 엘리먼트

2. 서블릿 초기화 & 종료 (9) destroy() 메서드의 작성 방법 destroy 메서드의 작성 방법은 init 메서드와 비슷함 파라미터가 없어야 하고, 리턴 타입은 void여야 하고, public 메서드로 선언해야 한 다. 하지만 init 메서드와 달리 throws 절을 쓸 수 없다. public void destroy() { } 우리가 작성할 코드가 들어가는 부분

[그림 6-7] 인사말을 출력하는 웹 애플리케이션의 화면 설계 2. 서블릿 초기화 & 종료 (10) destroy() 메서드의 재작성 예 (1) 로그 파일 생성 및 로그 작성 [그림 6-7] 인사말을 출력하는 웹 애플리케이션의 화면 설계 http://localhost:8080/brain06/YourName.html http://localhost:8080/brain06/greeting [그림 6-7]의 왼쪽 화면의 URL [그림 6-7]의 오른쪽 화면의 URL

2. 서블릿 초기화 & 종료 (11) destroy() 메서드의 재작성 예 (2) [예제6-2] 이름을 입력받는 HTML 문서 <HEAD> <META http-equiv= “Content-Type ” content= “text/html;charset=euc-kr ”> <TITLE>이름 입력</TITLE> </HEAD> <BODY> <H3>이름을 입력하십시오.</H3> <FORM ACTION=greeting> 이름: <INPUT TYPE=TEXT NAME=NAME> <INPUT TYPE=SUBMIT VALUE= ‘확인 ’> </FORM> </BODY> </HTML>

2. 서블릿 초기화 & 종료 (12) destroy() 메서드의 재작성 예 (3) [예제6-3] 인사말을 출력하는 서블릿 클래스 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; import java.util.*; public class GreetingServlet extends HttpServlet { private PrintWriter logFile; public void init() throws ServletException { try { logFile = new PrintWriter(new FileWriter(“c:\\data\\log.txt ”, true)); } catch (IOException e) { throw new ServletException(e); public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String name = request.getParameter( “NAME ”); String greeting = “안녕하세요, ” + name + “님. ”; if (logFile != null) { GregorianCalendar now = new GregorianCalendar(); logFile.printf( “%TF %TT - %s %n ”, now, now, name); response.setContentType( “text/html;charset=euc-kr ”); PrintWriter out = response.getWriter(); out.println( “<HEAD><TITLE>인사하기</TITLE></HEAD> ”); out.println( “<BODY> ”); out.println(greeting); out.println( “</BODY> ”); out.println( “</HTML> ”); } public void destroy() { if (logFile != null) logFile.close();

2. 서블릿 초기화 & 종료 (13) destroy() 메서드의 재작성 예 (4) ② [예제 6-3] 의 컴파일 결과를 classes 디렉터리에 저장하세요. ③ web.xml 파일을 열어서 다음과 같은 두 엘리먼트를 추가하세요 ① brain06 웹 애플리케이션 디렉터리의 WEB-INF 서브디렉터리로 가세요.

[그림 6-10] 예제 6-3이 만든 로그 파일의 내용 확인하기 2. 서블릿 초기화 & 종료 (14) destroy() 메서드의 재작성 예 (5) [그림 6-10] 예제 6-3이 만든 로그 파일의 내용 확인하기 출력 메시지

3. 클라이언트 요청 실행 (1) service() 메소드 실행 (1) 컨테이너의 클라이언트 요청 실행 과정 HttpServletRequest & HttpServletResponse 객체 생성 새로운 스레드 생성 또는 스레드 풀에서 가져오기 스레드에서 service(request, response)를 호출 & 실행 service(request, response) 반환 후에 스레드 제거 HttpServletRequest & HttpServletResponse 객체 제거

3. 클라이언트 요청 실행 (2) service() 메소드 실행 (2) service() 메소드는 매개변수 HttpServletRequest 객체에서 HTTP 요청 메소드 유 형을 읽어와 그에 대응하는 서블릿 메소드를 호출하여 요청을 처리한다. HTTP 요청 메소드 GET  doGet() 메소드 호출 HTTP 요청 메소드 POST  doPost() 메소드 호출 그 외 HTTP 요청 메소드 HEAD TRACE PUT DELETE OPTION CONNECT

3. 클라이언트 요청 실행 (3) service() 메소드 재정의 doGet()/doPost() 메소드 재정의 클라이언트 요청은 doGet()/doPost() 메소드에서 처리하기 때문에 service() 메소드 는 거의 재정의할 필요가 없음. doGet()/doPost() 메소드 재정의 클라이언트 요청을 적절히 처리하여 응답을 반환하기 위해 반드시 재정의하여야 함. HttpServletRequest 객체와 HttpServletResponse 객체를 매개변수를 전달받아 이 를 사용하여 요청을 처리하기 때문에 이들 객체에 대한 이해가 필수적.

3. 클라이언트 요청 실행 (4) HttpServletRequest 인터페이스 (1) HttpServletRequest 인터페이스 (1) 요청 유형, 쿠키, 세션 등 HTTP 요청에 대한 인 터페이스를 추상화한 것으로 HTTP 요청 접근 관 련 메소드 포함 HTTP 프로토콜에 관련된 메소드들이 추가 되어 있음

3. 클라이언트 요청 실행 (5) HttpServletRequest 인터페이스 (2) HTTP 요청 메시지 정보를 접근하는 인터페이스 제공 HTTP 요청 메소드 : GET & POST

3. 클라이언트 요청 실행 (6) HttpServletRequest 인터페이스 (3) HTTP 요청 메소드 : GET & POST

3. 클라이언트 요청 실행 (7) HttpServletRequest 인터페이스 (4) GET & POST 요청 메소드 차이 데이터의 형식 및 크기 보안 즐겨찾기 등록 사용 용도 멱등(Idempotent) 여부

3. 클라이언트 요청 실행 (8) HttpServletRequest 인터페이스 (5) 멱등(Idempotent) : 아무 부작용 없이 동일한 작업을 한번 이상 계속 할 수 있다는 것 을 의미

3. 클라이언트 요청 실행 (9) HttpServletRequest 인터페이스 (6) 멱등이 아닌 요청 예:

3. 클라이언트 요청 실행 (10) HttpServletRequest 인터페이스 (7) 멱등이 아닌 요청 예:

3. 클라이언트 요청 실행 (11) HttpServletRequest 인터페이스 (8) 멱등이 아닌 요청 예:

3. 클라이언트 요청 실행 (12) HttpServletRequest 인터페이스 (9) 멱등인 요청 : GET, HEAD / 멱등이 아닌 요청 : POST, DELETE GET 또는 POST 요청 메소드 요청 결정 방법 : <form >에 method 정의가 빠진 경우 GET으로 결정이 된다.

3. 클라이언트 요청 실행 (13) HttpServletRequest 인터페이스 (10) – 자주 사용하는 메소드 클라이언트 플랫폼 정보 및 브라우저 정보 String client = request.getHeader(“User-Agent”); Request에 관련된 쿠키 Cookie[] cookies = request.getCookies(); 클라이언트 세션 정보 HttpSession session = request.getSession(); Request의 HTTP 메소드 String theMethod = request.getMethod(); Request의 입력 스트림 InputStream input = request.getInputStream();

3. 클라이언트 요청 실행 (14) HttpServletRequest 인터페이스 (11) – 자주 사용하는 메소드 getInputStream()에 반환하는 입력 스트림은 언제 사용하는가? getHeader() & getIntHeader() 차이점? getRemotePort(), getServerPort(), getLocalPort() 차이점?

3. 클라이언트 요청 실행 (15) HttpServletResponse 인터페이스 (1) HTTP 응답 메시지에 대한 인터페이스를 추상화  서블릿에서 클라이언트에 응답 데이터를 보내 기 위해 HttpServletResponse 객체를 사용 HTTP에 관련된 오류, 쿠키, 헤더 정보에 대한 메 소드들이 추가되어 있음

3. 클라이언트 요청 실행 (16) HttpServletResponse 인터페이스 (2) – 자주 사용하는 메소드 응답 데이터의 데이터 타입 정의 response.setContentType(“text/html”); 출력 스트림 사용 : 가급적 JSP 사용 권장 Writer writer = response.getWriter(); // 문자 출력 OutputStream output = response.getOutputStream(); // 바이트 출력 헤더 정보 설정, 쿠키 추가 등 response.addCookie(); response.addHeader();

3. 클라이언트 요청 실행 (17) HttpServletResponse 인터페이스 (3) Response 객체의 I/O 사용 동적 HTML 페이지 출력  소모적인 작업  JSP로 대체 이진 데이터(pdf, jar 등) 전송  바이트 출력 스트림을 이용하여 전송

3. 클라이언트 요청 실행 (18) HttpServletResponse 인터페이스 (4) Response 객체의 I/O 사용 – 이진 데이터 전송 예

3. 클라이언트 요청 실행 (19) HttpServletResponse 인터페이스 (5) Response 객체의 I/O 사용 – 이진 데이터 전송 예

3. 클라이언트 요청 실행 (20) HttpServletResponse 인터페이스 (6) 컨텐트 타입(MIME 타입) 설정 setContentType() 메소드– response.setContentType(“text/html”); 응답 메시지의 데이터 타입을 설정 HTTP 응답 메시지 헤더 중에 하나

3. 클라이언트 요청 실행 (21) HttpServletResponse 인터페이스 (7) 컨텐트 타입(MIME 타입) 종류 text/html application/pdf video/quicktime image/jpeg application/octet-stream application/x-zip

4. HTTP 요청 리다이렉터 & 디스패치 (1) HTTP 요청 리다이렉트 & 디스패치 클라이언트 요청을 받은 서블릿(또는 JSP)가 직접 처리하지 않고 클라이언트 요청을 다른 사이트 또는 다른 컴포넌트에 넘길 수 있다. HTTP 요청 리다이렉트(Redirect) (1) 클라이언트 요청에 대해 완전히 다른 URL로 방향을 바꾸어 처리하는 동작 서블릿 리다이렉트는 웹 브라우저가 처리 : if (workForMe) { // 요청을 처리 } else { response.sendRedirect(“http:// www.example.com”); }

4. HTTP 요청 리다이렉터 & 디스패치 (2) HTTP 요청 리다이렉트(Redirect) (2)

4. HTTP 요청 리다이렉터 & 디스패치 (3) HTTP 요청 리다이렉트(Redirect) (3)

4. HTTP 요청 리다이렉터 & 디스패치 (4) HTTP 요청 리다이렉트(Redirect) (4) 주의할 사항 : Response 객체에 쓰기 작업을 한 뒤에는 sendRedirect()를 할 수 없다 sendRedirect() 메소드는 매개변수롤 URL 객체가 아닌 String 객체를 받는다 sendRedirect(new URL(http://www.example.com)) : error

4. HTTP 요청 리다이렉터 & 디스패치 (5) HTTP 요청 디스패치(Dispatch) (1) 클라이언트 요청을 웹 애플리케이션의 다른 컴포넌트(Servlet or JSP)에게 넘겨 처 리하도록 하는 동작  클라이언트 요청은 서버에서 처리됨.

4. HTTP 요청 리다이렉터 & 디스패치 (6) HTTP 요청 디스패치(Dispatch) (2)