뇌를 자극하는 jsp & servlet...

66
JSP & Servlet 속성 & 리스너

Upload: others

Post on 29-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

JSP & Servlet

속성 & 리스너

Page 2: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

2/39

Contents

학습목표

클라이언트 요청에 의해 서블릿이 실행될 때에 컨테이너에 의해 제공되

는 내장 객체의 종류와 역할, 그리고 접근 범위 특성 등을 알아본다.

웹 컴포넌트 사이의 데이터 전달을 위한 내장 객체에서의 속성 설정과

이에 따른 이벤트 처리 방법에 대해 알아본다.

내용

서블릿의 초기화 환경을 표현하는 ServletConfig 객체

웹 애플리케이션의 실행 환경을 표현하는 ServletContext 객체

세션 정보를 유지하는 HttpSession 객체

내장 객체에서의 속성 설정

내장 객체에서의 이벤트 처리

Page 3: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

3/38

서블릿 초기화 파라미터 - 개요

정의 : 서블릿의 초기화 작업에 필요한 데이터를 의미

사용 목적 :

• 유지 보수 관점에서 변경 가능한 파라미터를 DD(Deployment Descriptor)에 읽

어 들어 사용하도록 함 서블릿 소스 변경 부담을 줄임

• 예: 로그 파일명, DB 테이블명 & 사용자명 등

전달 방법 :

• 컨테이너가 서블릿 클래스를 로딩할 때에 DD 파일에서 초기화 파라미터를 읽어

ServletConfig 객체를 생성

• 서블릿 초기화 시에 매개변수로 전달

1. 서블릿 초기화 파라미터 (1)

Page 4: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

4/38

서블릿 초기화 파라미터 - 정의 및 접근 방법

1. 서블릿 초기화 파라미터 (2)

Page 5: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

5/38

서블릿 초기화 파라미터 – 로딩

서블릿 초기화할 때 단 한번만 서블릿 초기화 파라미터를 읽는다

1. 서블릿 초기화 파라미터 (3)

Page 6: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

6/38

서블릿 초기화 파라미터 – 로딩

1. 서블릿 초기화 파라미터 (4)

Page 7: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

7/38

서블릿 초기화 파라미터 – 서블릿에게로 전달

생성된 ServletConfig 객체를 서블릿의 init() 메소드 호출 시에 매개변수

로 제공

1. 서블릿 초기화 파라미터 (5)

Page 8: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

8/38

서블릿 초기화 파라미터 – ServletConfig 인터페이스

서블릿 초기화 파라미터 사용

컨텍스트 정보(서블릿 설정 정보) 접근

1. 서블릿 초기화 파라미터 (6)

Page 9: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

9/38

서블릿 초기화 파라미터 – 가져오기

서블릿에서 초기화 파라미터 가져오기

ServletConfig config = getServletConfig();

String email = config.getInitParameter(“admEmail”);

String email = getServletConfig().getInitParameter(“admEmail”);

String email = getInitParameter(“admEmail”);

(or String email = this.getInitParameter(“admEmail”); )

1. 서블릿 초기화 파라미터 (7)

HttpServletRequest메소드

Page 10: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

10/38

서블릿 초기화 파라미터 – 예제 (1)

1. 서블릿 초기화 파라미터 (8)

Page 11: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

11/38

서블릿 초기화 파라미터 – 예제 (2)

1. 서블릿 초기화 파라미터 (9)

Page 12: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

12/38

서블릿 초기화 파라미터 – 예제 (3)

1. 서블릿 초기화 파라미터 (10)

<servlet>

<servlet-name>agreement-servlet</servlet-name>

<servlet-class>AgreementServlet</servlet-class>

<init-param>

<param-name>FILE_NAME</param-name>

<param-value>agreement.txt</param-value>

</init-param>

</servlet>

파라미터의 이름

파마미터의 값

서블릿의 초기화 파라미터

Page 13: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

13/38

서블릿 초기화 파라미터 – 예제 (4)

1. 서블릿 초기화 파라미터 (11)

[예제6-4] 인사말을출력하는서블릿클래스 – 서블릿의초기화파라미터사용

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 {

String filename = getInitParameter( “FILE_NAME ”);

try {

logFile = new PrintWriter(new FileWriter(filename, 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();

}

}

Page 14: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

14/38

서블릿 초기화 파라미터

하나의 서블릿 클래스를 이용하여 두 개 이상의 서블릿으로 등록 가능

1. 서블릿 초기화 파라미터 (12)

[예제 6-4]를 등록하는 기존의엘리먼트

[예제 6-4]를 등록하는 새로운엘리먼트

Page 15: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

15/38

컨텍스트 초기화 파라미터 - 개요

정의 : 웝 애플리케이션의 실행 환경 및 초기화 파라미터 데이터를 의미

사용 목적 :

• 서블릿 초기화 파라미터와 사용 목적 및 방법은 동일

• 서블릿 초기화 파라미터는 해당 서블릿만 접근 가능

• 컨텍스트 초기화 파라미터는 웹 애플리케이션을 구성하는 모든 컴포턴트가 접근 가능

전달 방법 :

• 컨테이너가 웹 애플리케이션을 시작할 때에 DD 파일에서 컨텍스트 초기화 파라미터

를 읽어 ServletContext 객체를 생성

제일 먼저 생성되는 내장 객체

• 서블릿(또는 JSP) 초기화 시에 ServletConfig 객체에 ServletContext 객체의 접

근자가 등록되어 전달

2. 컨텍스트 초기화 파라미터 (1)

Page 16: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

16/38

컨텍스트 초기화 파라미터 – 정의 방법

DD 파일 내에 <context-param> 엘리먼트를 이용하여 정의

2. 컨텍스트 초기화 파라미터 (2)

Page 17: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

17/38

컨텍스트 초기화 파라미터 – 접근 방법

ServletContext 객체 접근자 및 메소드를 이용하여 접근

2. 컨텍스트 초기화 파라미터 (3)

Page 18: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

18/38

컨텍스트 초기화 파라미터 – 서블릿 초기화 파라미터와의 비교 (1)

2. 컨텍스트 초기화 파라미터 (4)

Page 19: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

19/38

컨텍스트 초기화 파라미터 – 서블릿 초기화 파라미터와의 비교 (2)

2. 컨텍스트 초기화 파라미터 (5)

Page 20: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

20/38

컨텍스트 초기화 파라미터 – 서블릿 초기화 파라미터와의 비교 (3)

2. 컨텍스트 초기화 파라미터 (6)

웹 애플리케이션은 오직 하나의ServletContext으로 전체 웹 애플리케이션에서정보를 공유

Page 21: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

21/38

컨텍스트 초기화 파라미터 – ServletContext 인터페이스

2. 컨텍스트 초기화 파라미터 (7)

Page 22: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

22/38

컨텍스트 초기화 파라미터 – ServletContext 객체 접근

서블릿에서의 ServletContext 객체 접근

• ServletContext context = getServletConfig().getServletContext();

• ServletContext context = this.getServletContext();

컨텍스트 초기화 파라미터 접근

• String param = context.getInitParameter(“init_param_name”);

서블릿 초기화 파라미터 접근 메소드 이름과 동일

반환되는 파라미터 값은 String 타입

2. 컨텍스트 초기화 파라미터 (8)

Page 23: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

23/38

컨텍스트 초기화 파라미터 – 서블릿 실행 환경 정보 접근 (1)

동작중인 웹 서버 정보 접근

서비스되는 서블릿 규격 버전 정보 접근

2. 컨텍스트 초기화 파라미터 (9)

String str = context.getServerInfo();

웹 서버의 종류를 리턴하는 메서드

int num1 = context.getMajorVersion();

서블릿의 메이저 버전을 가져오는 메서드

int num2 = context.getMinorVersion();

서블릿의 마이너 버전을 가져오는 메서드

Page 24: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

24/38

컨텍스트 초기화 파라미터 – 서블릿 실행 환경 정보 접근 (2)

웹 애플리케이션의 URL 경로명과 실제 배포 경로명 접근

2. 컨텍스트 초기화 파라미터 (10)

String appPath = context.getContextPath();

웹 애플리케이션의 URL 경로명을리턴하는 메서드

String absolutePath = context.getRealPath( “/sub1/Intro.html ”);

웹 애플리케이션 내에서의파일 경로명

Page 25: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

25/38

컨텍스트 초기화 파라미터 – 컨텍스 초기화 파라미터 설정 및 접근

JSP에서의 컨텍스트 초기화 파라미터 접근

2. 컨텍스트 초기화 파라미터 (11)

[예제 6-9] 웹애플리케이션의초기화파라미터를읽는 JSP 페이지

<%@page contentType= “text/html; charset=euc-kr ”%>

<HTML>

<HEAD><TITLE>웹 애플리케이션의 초기화 파라미터</TITLE></HEAD>

<BODY>

데이터베이스 이름: <%= application.getInitParameter(“DB_NAME ”) %> <BR>

</BODY>

</HTML>

[그림 6-22] 웹 애플리케이션의 초기화 파라미터 지정 방법 [그림 6-23] 예제 6-9의 실행 결과

Page 26: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

26/38

컨텍스트 초기화 파라미터 – log() 메소드 활용

ServletContext 인터페이스의 log() 메서드를 이용하면 로그 파일에 메시지를 기

록할 수 있다.

호출할 시에 파라미터로 로그 메시지를 넘겨주어야 한다.

톰캣의 설치 디렉터리 아래의 logs라는 이름의 서브디렉터리 안의

localhost.yyyy-mm-dd.log라는 이름의 파일에 로그 메시지를 기록한다.

2. 컨텍스트 초기화 파라미터 (12)

context.log( “인사하기 JSP 페이지가 호출되었습니다. ”);

로그 메시지

Page 27: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

27/38

컨테이너 제공 객체 (1)

서블릿 실행 시에 컨테이너가 제공하는 이미 만들어진(built-in) 객체들

서블릿 API 객체 – 서블릿 API를 이용하여 접근 가능한 객체

5개 종류의 객체

• ServletContext 객체

• ServletConfig 객체

• HttpSession 객체

• HttpServletRequest 객체

• HttpServletResponse 객체

3. 컨테이너 제공 객체 (1)

Page 28: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

28/38

컨테이너 제공 객체 (2)

3. 컨테이너 제공 객체 (2)

종 류 생성 시기 접근 범위(scope) 특 징

ServletContext웹 애플리케이션시작(배포) 시점

웹 애플리케이션의모든 컴포넌트

웹 애플리케이션 실행 환경 정보 및 초기화 파라미터 제공

ServletConfig 서블릿 클래스로딩 시점

해당 서블릿(또는 JSP) 만

서블릿 초기화 파라미터 제공

HttpSession연속된 클라이언트요청의 시작 시점

연속된 클라이언트요청에 의해 실행되

는 컴포넌트

서블릿 요청에 의해생성

HttpServletRequest클라이언트 요청

도착 시점

클라이언트 요청에의해 실행되는 서블

릿(또는 JSP)

클라이언트 요청 데이터 접근

HttpServletResponse클라이언트 요청

도착 시점

클라이언트 요청에의해 실행되는 서블

릿(또는 JSP)

클라이언트 응답 데이터 접근

Page 29: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

29/38

속 성(Attribute) - 개요

3 개의 서블릿 API 객체(ServletContext, HttpSession,

HttpServletRequest) 중 하나에 설정해놓은(바이딩-

binding) 객체

• “게시판의 게시물”과 비교 가능

“이름(String)/값(Object)”의 쌍으로 저장

속성의 생존 범위(Scope)에 유의

클라이언트 요청을 처리하는 컴포넌트 간 또는 웹 애플

리케이션을 구성하는 컴포넌트 간에 데이터 교환을 가

능하게 함.

4. 속 성(Attribute) (1)

Page 30: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

30/38

속 성(Attribute) – 파라미터와 비교

“속성은 파라미터가 아닙니다!...”

4. 속 성(Attribute) (2)

Page 31: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

31/38

속 성(Attribute) – 세 가지 생존범위(Scope)

Context, Session, Request Scopes

Context Scope :

4. 속 성(Attribute) (3)

Page 32: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

32/38

속 성(Attribute) – 세 가지 생존범위(Scope)

Session Scope :

4. 속 성(Attribute) (4)

Page 33: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

33/38

속 성(Attribute) – 세 가지 생존범위(Scope)

Request Scope :

4. 속 성(Attribute) (5)

Page 34: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

34/38

속 성(Attribute) – API

ServletContext, HttpSession HttpServletRequest 인터페이스에 속성 관련 메소

드를 제공

• Object getAttribute(String name)

• void setAttribute(String name, Object value)

• void removeAttribute(String name)

• Enumeration getAttributeNames()

4. 속 성(Attribute) (6)

Page 35: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

35/38

속 성(Attribute) – API

4. 속 성(Attribute) (7)

Page 36: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

36/38

속 성(Attribute) – 고려 사항 (1)

속성은 스레드-안전(thread-safe)하지 못한 경우가 있다.

Context 속성은 스레드 안전하지 못하다.

4. 속 성(Attribute) (8)

Page 37: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

37/38

속 성(Attribute) – 고려 사항 (2)

Context 생존 범위는 스레드 안전하지 못하다.

4. 속 성(Attribute) (9)

Page 38: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

38/38

속 성(Attribute) – 고려 사항 (3)

Context 생존 범위는 스레드 안전하지 못하다.

4. 속 성(Attribute) (10)

Page 39: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

39/38

속 성(Attribute) – 고려 사항 (4)

해결책 #1 : 서블릿 메소드의 동기화

4. 속 성(Attribute) (11)

Context 속성의 스레드-안전을 보장못함

Page 40: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

40/38

속 성(Attribute) – 고려 사항 (5)

해결책 #1 : 서블릿 메소드의 동기화

4. 속 성(Attribute) (12)

Page 41: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

41/38

속 성(Attribute) – 고려 사항 (6)

해결책 #2 : Context 객체 동기화(Context 에 Lock을 건다)

4. 속 성(Attribute) (13)

Context 속성의 스레드-안전을 보장함

Page 42: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

42/38

속 성(Attribute) – 고려 사항 (7)

Session 속성도 스레드 안전하지 못하다

• 동일 클라이언트가 동시에 하나 이상의 요청을 보내는 경우

4. 속 성(Attribute) (14)

Page 43: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

43/38

속 성(Attribute) – 고려 사항 (8)

해결책 : Session 객체의 동기화

4. 속 성(Attribute) (15)

HttpSession에 대한 동기화로 Session 속성의 스레드-안전을 보장할 수 있음

Page 44: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

44/38

속 성(Attribute) – 고려 사항 (9)

Request 속성은 스레드-안전하다

• 클라이언트 요청에 의해 생성된 스레드만이 request 속성을 접근할 수 있기 때문

4. 속 성(Attribute) (16)

Page 45: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

45/38

속 성(Attribute) – Request 디스패칭 (1)

서블릿에는 다른 컴포넌트에게 Request를 전달하기 위해

RequestDispatcher를 사용한다.

4. 속 성(Attribute) (17)

Page 46: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

46/38

속 성(Attribute) – Request 디스패칭 (2)

4. 속 성(Attribute) (18)

Page 47: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

47/38

속 성(Attribute) – Request 디스패칭 (3)

RequestDispatcher 획득 방법

4. 속 성(Attribute) (19)

Page 48: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

48/38

속 성(Attribute) – 정리

4. 속 성(Attribute) (20)

Page 49: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

49/38

리스너(Listener) – 개요

생존범위와 관련된 3개의 개체(ServletContext, HttpSession,

ServletRequest)에서 발생하는 이벤트를 처리하는 클래스

서블릿과 JSP와 별도의 클래스로 정의 DD 파일에 등록

• 컨테이너가 이벤트가 발생할 때에 리스너를 호출하여 실행.

관련 이벤트

• 생존 범위 관련 객체의 초기화 및 소멸

• 속성(Attribute) 등록, 수정, 제거

서블릿 실행과 관련하여 8 종류의 리스너가 존재

5. 리스너(Listener) (1)

Page 50: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

50/38

리스너(Listener) – 종류 (1)

5. 리스너(Listener) (2)

Page 51: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

51/38

리스너(Listener) – 종류 (2)

5. 리스너(Listener) (3)

Page 52: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

52/38

리스너(Listener) – ServletContextListener (1)

5. 리스너(Listener) (4)

웹 애플리케이션이 시작할 때에 DB Connection 객체를 생성하여 모든 컴포넌트가 공유할 수 있는

방법이 없을까?

Page 53: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

53/38

리스너(Listener) – ServletContextListener (2)

컨텍스트 리스너를 이용하여 해결

• 컨텍스트 초기화 시(애플리케이션 배포) 사용

ServletContext로부터 컨텍스트 초기화 파라미터 로딩

DB 연결을 위해 초기화 파라미터 검색명( lookup name ) 사용

DB Connection 객체를 속성(Attribute)에 저장

• 컨텍스트 종료 시(애플리케이션 서비스 종료) 사용

DB 연결 종료

5. 리스너(Listener) (5)

Page 54: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

54/38

리스너(Listener) – ServletContextListener (3)

컨텍스트 리스너를 이용하여 해결

5. 리스너(Listener) (6)

DD 파일에 등록하여 컨테이너가 이벤트발생 시에 호출할 수 있도록 함

Page 55: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

55/38

리스너 작성 튜토리얼 (1)

간단한 ServletContextListener를 작성하고 실행시키는 실습

• 리스너가 컨텍스트 초기화 파라미터에서 개의 품종을 읽어와 Dog 클래스의 객체를생성하고 ServletContext에서 속성으로 묶어 둠으로써 서블릿 등에서 Dog 객체를접근하여 사용하도록 함.

튜토리얼 전체 과정

5. 리스너(Listener) (7)

Page 56: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

56/38

리스너 작성 튜토리얼 (2)

3개의 클래스 작성

• 속성(Attribute) 클래스 – Dog 클래스 Dog.java

• 컨텍스트 리스너 클래스 – MyServletContextListener.java

• 테스트 서블릿 클래스 – ListenerTester.java

• DD 파일

DD 파일 등록

• 리스너 클래스와 서블릿 클래스를 DD 파일에 등록

배포 및 테스트

5. 리스너(Listener) (8)

Page 57: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

57/38

리스너 작성 튜토리얼 (3)

Dog 클래스 Dog.java

5. 리스너(Listener) (9)

Page 58: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

58/38

리스너 작성 튜토리얼 (4)

컨텍스트 리스너 클래스 MyServletContextListener.java

5. 리스너(Listener) (10)

Page 59: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

59/38

리스너 작성 튜토리얼 (5)

서블릿 클래스 ListenerTester.java

5. 리스너(Listener) (11)

Page 60: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

60/38

리스너 작성 튜토리얼 (6)

배포 기술자(DD 파일) 작성

5. 리스너(Listener) (12)

Page 61: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

61/38

리스너 작성 튜토리얼 (7)

컴파일, 배포, 테스트

5. 리스너(Listener) (13)

Page 62: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

62/38

리스너 작성 튜토리얼 (8)

컨텍스 리스너 실행 과정 이해

5. 리스너(Listener) (14)

Page 63: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

63/38

리스너 작성 튜토리얼 (9)

컨텍스 리스너 실행 과정 이해

5. 리스너(Listener) (15)

Page 64: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

64/38

리스너 작성 튜토리얼 (10)

컨텍스 리스너 실행 과정 이해

5. 리스너(Listener) (16)

Page 65: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

65/38

리스너 작성 튜토리얼 (11)

컨텍스 리스너 실행 과정 이해

5. 리스너(Listener) (17)

Page 66: 뇌를 자극하는 JSP & Servlet 슬라이드mclab.silla.ac.kr/lecture/201901/wp/wp-lecture-05.pdf · ServletConfig 서블릿클래스 로딩시점 해당서블릿 (또는JSP) 만

JSP & Servlet