19
서버 프로그래밍 2

웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

웹 서버 프로그래밍 2

Page 2: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

JSP 개요

Page 3: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

01 public class HelloWorldServlet extends HttpServlet {

02 public void doGet(HttpServletRequest request,

03 HttpServletResponse response)

04 throws ServletException, IOException {

05 response.setContentType("text/html; charset=EUC_KR");

06 PrintWrite out = response.getWriter();

07 out.println("<HTML><HEAD><TITLE>로그인

</TITLE></HEAD>");

08 out.println("<BODY><H2>Hello World : 헬로월드</H2>");

09 out.println("오늘의 날짜와 시간은 : "+new

10 java.util.Date());

11 out.println("</BODY></HTML>");

12 }

13 }

01. JSP 개요 (1)

서블릿(Servlet)과 JSP(Java Server Page)

서블릿은 자바를 이용한 서버 프로그래밍 기술

초기 웹 프로그래밍 기술인 CGI(Common Gateway Interface)를 대체하기 위해 개발되었으나, 느린 처리 속도, 많은 메모리 요구, 불편한 화면 제어 등의 한계로 PHP, ASP 등 서버 스크립트 언어 등장

JSP는 PHP와 유사한 형태로 HTML을 중심으로 자바 프로그램과의 유기적인 연결을 지원

01 <%@ page contentType="text/html;charset=utf-8" %>

02 <HTML>

03 <HEAD><TITLE>Hello World</TITLE></HEAD>

04 <BODY>

05 <H2>Hello World!</H2>

06 오늘의 날짜와 시간은 : <%= new java.util.Date() %>

07 </BODY>

08 </HTML>

3

Page 4: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

01. JSP 개요 (2)

JSP의 특징 자바의 모든 기능을 사용할 수 있음

서블릿으로 컴파일된 후 메모리에서 처리되기 때문에 많은 사용자의 접속도 원활하게 처리 가능

JSP 또는 다른 서블릿 간의 데이터를 쉽게 공유

빈즈(Beans)라고 하는 자바 컴포넌트를 사용 가능

커스텀 태그를 만들어 사용할 수 있으며, JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리를 이용 가능

스트러츠, 스프링 @MVC 등 다양한 프레임워크와 결합하여 개발 가능

4

Page 5: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

01. JSP 개요 (3)

요구되는 프로그래밍 기술 웹 프로그래밍 기술 HTML

JavaScript

CSS

Java 프로그래밍 기술 Java

JDBC

Servlet

추가 프로그래밍 기술 Database

XML

Mobile Programming

Framework

5

Page 6: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

01. JSP 개요 (4)

JSP 전체 동작 서버에서 실행한 결과를 웹 브라우저에 전달

Servlet Container 서블릿이 존재하면 바로 실행 서블릿은 자바 소스로 작성된 클래스 파일 구조

없는 경우 JSP를 서블릿 코드로 변환한 후 실행 컴파일된 클래스 파일은 소스 변경 전까지 메모리 상주하면서 서비스 제공

6

Web Browser

Web Server

Servlet Container

JSP 페이지 요청

HTML 페이지 응답

Page 7: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

01. JSP 개요 (5)

서블릿과 JSP 기술 변천

7

Page 8: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (1)

서블릿(Servlet)이란? 서블릿은 자바 플랫폼에서 컴포넌트를 기반으로 하는 웹 애플리케이션 개발의 핵심 기술

JSP 는 서블릿 기반의 웹 프로그래밍 기술로 내부적으로 JSP는 서블릿으로 변환되어 실행

서블릿의 장점 자바를 기반으로 하므로 자바 API를 모두 사용 가능

운영체제나 하드웨어에 영향을 받지 않으므로, 한 번 개발된 애플리케이션은 다양한 서버 환경에서도 실행 가능

웹 애플리케이션에서 효율적인 자료 공유 방법 제공

다양한 오픈 소스 라이브러리와 개발도구 활용 가능

8

Page 9: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (2)

웹 애플리케이션 개발에 서블릿 사용 시 이점 MVC 패턴을 쉽게 적용 가능하며, 컨테이너와 밀접한 서버 프로그램 구현 가능

MVC 패턴을 적용할 때 콘텐츠와 비즈니스 로직을 분리할 수 있으며 컨트롤러와 뷰가 역할을 분담함으로써, 웹 디자이너와 개발자 간 작업 원활

리스너, 필터 등 고급 프로그래밍 기법 활용 가능

스프링 등 오픈 소스 프레임워크의 기본 기술

9

Page 10: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (3)

서블릿 컨테이너 서블릿을 실행하기 위한 서버 소프트웨어

웹 서버와 서블릿 컨테이너

10

Page 11: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (4)

서블릿 개발과 실행 과정

11

Page 12: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (5)

서블릿 동작 과정

일반적인 애플리케이션처럼 버튼을 누르면 시작되고, 처리를 마치면 종료되는 구조가 아님

서버에서 컨테이너에 의해 실행되면서 생명주기를 가지며, 특정 이벤트와 상태가 존재하는

구조

서블릿 개발은 해당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와 같은 사용자 요청

처리 메소드를 구현하는 것

init()은 서블릿 실행시 한번만 실행되는 메소드

service() 는 사용자 요청시 매번 호출되는 메소드

destroy() 는 서블릿 종료 시 실행되는 메소드

12

Page 13: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (6)

서블릿 구조와 API 서블릿은 일반적인 자바 클래스 구조를 가짐

일반 자바 소스의 구조이므로 컴파일 과정 필요

서블릿은 컨테이너에 의해 실행되므로 개발자가 임의로 프로그램 하는 것이 아니라 특정 클래스를 상속 받아야만 구현할 수 있는 구조임

서블릿 프로그램을 위해 서블릿 클래스의 상관 관계나 API의 기본 구조를 이해해야 함

일반적으로 서블릿은 java.servlet.HttpServlet 클래스를 상속해서 구현함

13

Page 14: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

02. 서블릿 (7)

javax.servlet.http.HttpServlet 동작 구조

GenericServlet 에 비해 HTTP 프로토콜 지원이 포함되어 일반적인 웹 프로그램에 적합

HttpServlet 도 javax.servlet.GenericServlet을 상속받고 있음

사용자 요청에 따라 GET, POST 방식으로 구별해 처리하지만 경우에 따라서는 구분 없이 처리하기도 함

URL 요청은 HTTP 프로토콜에서는 GET /index.html 과 같이 서버에 전달됨

HTTP 프로토콜에는 GET, POST, PUT, HEAD, DELETE, OPTIONS, TRACE 와 같은 요청이 정의되어 있으며 서블릿에도 각각 doGet() , doPost()와 같은 대응 메소드가 존재함

14

Page 15: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

03. JSP 개발환경 개요

JSP 개발환경을 구축하려면 여러 개발 툴을 상호 연동하여 설치해야 함

JSP는 자바로 구현되므로 자바 개발환경필요 : JDK

http://www.oracle.com

작성한 코드를 웹 서버에서 실행하려면 JSP 운영환경 필요 : Apache Tomcat

http://tomcat.apache.org

자바를 이용한 편리한 개발을 위해 통합 개발환경 필요 : Eclipse

http://www.eclipse.org

15

Page 16: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

Spring

16

Page 17: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

POJO

Plain Old Java Object : 평범한 자바 객체 클래스 상속을 강제하지 않음

Servlet의 경우 HttpServlet 상속받아야 함

인터페이스 구현을 강제하지 않음

Annotation 사용을 강제하지 않음

17

public HelloServlet extends HttpServlet { … }

public HelloController { … }

Page 18: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

MVC (1)

MVC 개념

애플리케이션 코드를 역할 별로 Model, View, Controller로 나눈 패턴

이 패턴의 주 목적은 Business logic과 Presentation logic을 분리한 것

Model

애플리케이션으로 표현하려는 도메인 영역을 자바 클래스로 표현한 것

예: 온라인 서점 애플리케이션의 Book, BookShelf, Staff 등

View

사용자에게 제공할 화면(Presentation logic) 담당

예: 사용자에게 보이는 화면, 책의 위치를 보여주는 약도

Controller

사용자로부터 요청을 받아 해당 요청을 처리하는데 필요한 로직을 수행하고

그 결과에 해당하는 Model을 필요로 하는 View로 제공해주는 역할

예: 사용자의 요청을 받아 Book 객체 목록을 만들고 그 목록을 searchResult.jsp

뷰로 보여주라는 일 수행 18

Page 19: 웹 서버 프로그래밍 2 - lily.mmu.ac.krlily.mmu.ac.kr/lecture/14lab/lec10.pdf · 서블릿 개발은 당 생명주기 메소드를 오버라이딩하거나 doGet(), doPost()와

MVC (2)

Spring MVC

19

DispatcherServlet 요청 & 응답

HelloController Hello.jsp