servlet http connection & tomcat...

34
Servlet HTTP Connection & Tomcat Server 숙명여자대학교 _멀티미디어과학과 2012여름학기 윤용익 | [email protected] | 2012 |

Upload: others

Post on 29-Oct-2019

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

Servlet HTTP Connection & Tomcat Server

숙명여자대학교 _멀티미디어과학과

2012년 여름학기

윤용익 | [email protected] | 2012 |

Page 2: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

Web Program Language

Web page 작성용 언어

Page 3: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

CGI와 서블릿

CGI(Common Gateway Interface)

웹 사이트에서 방명록, 게시판을 작성하기 위해서는 HTML문서와 함께 방명록이나 게시판을 위한 프로그램도 작성해야 하는데 이 프로그램은 C, C++, Perl 등

다양한 언어로 작성할 수 있으며 이러한 프로그램을 통틀어서 CGI 프로그램이라 한다

Perl 프로그래밍 언어가 가장 많이 사용되고 있음

CGI는 프로그래밍 언어가 아니라 웹서버와 연결 시켜주는 규약(Protocol)이다

CGI 프로그램은 게시판/방명록 작성, 설문조사, 인터넷쇼핑 등 동적인 홈페이지

작성 등 다양한 분야에서 널리 사용되며 웹 기반의 인터넷에서는 필수적인 것이다

Page 4: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

CGI 라이프사이클

CGI의 성능을 개선한 방법이 나왔으니며, 이것은 서블릿(Servlet)이라 부른다

하지만, CGI는 최악의 라이프사이클을 갖고 있다

서버가 CGI 프로그램의 접속 요청을 받으면, 서버는 CGI 프로그램 수행을 위해 새로운 프로세스를 생성해야하고, 응답 생성에 필요한 모든 정보를 환경 변수와 표준 입력을 통해 외부 프로그램에 전송해야 함

매 요청마다 프로세스를 생성하는 것은 시간과 막대한 서버의 리소스를 요구함으로써, 서버가 동시에 다룰 수 있는 요청의 개수를 제한하게 함

Page 5: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿(Servlet)

서블릿은 웹 서버의 자바 가상 머신 안에서 동작된다는 점을 제외하고는 교유의 서버 익스텐션과 유사하다

안전하고 이식성이 높다

서블릿은 서버의 도메인 안에서 단독으로 동작한다

애플릿과는 달리 웹 브라우저 안에서의 자바의 대한 자원을 필요로 하지 않다

독립적인 프로그램이나 요청을 처리하기 위해 다중 프로세스를 필요로 하는

CGI와 달리, 서블릿은 웹 서버 프로세스 안에서 독립적인 쓰레드에 의해 모든

작업이 처리된다

주요 웹 서버 대부분이 서블릿을 지원한다

Page 6: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 API

API 계층구조

사용자정의 Servlet

Page 7: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 예제

Page 8: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 실행방법(1)

실행환경

Servlet API 클래스 파일을 얻기 위해:

JDK(JSDK(Java Servlet Development Kit)) or Java EE 6 SDK

http://www.oracle.com/technetwork/java/archive-142520.html

서블릿을 사용하기 위해 이용 가능한 서블릿 엔진은:

Apache (Tomcat)

서블릿과 JSP를 실행시키기 위한 서블릿 컨테이너(Servlet Container)

Sun Microsystems와 Apache Software Foundation이 Jakarta 프로젝트를 통해 공동으로 개발한 서블릿 컨테이너

http://tomcat.apache.org/download-60.cgi

Page 9: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 실행방법(2)

TOMCAT 6.0 SERVLET 실행시키기 위한 설정

TOMCAT의 버전이 올라가면서 보안상의 이유로 기본적으로는 서블릿을 실생하지

못하도록 설정이 되어있음

TOMCAT 설치한 디렉터리의 CONF -> web.xml 파일을 수정함으로써 톰켓을 실행하는데 필요한 환경설정 정보를 변경할 수 있다

TOMCAT 환경설정 파일

%CATALINA_HOME%\conf\web.xml

Web.xml 파일에서 서블릿을 실행할 수 있도록 서블릭의 접근 방법을 지정해 줌으로써 서블릿 서비스를 제공할 수 있다

Page 10: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 실행방법(3)

서블릿을 실행하기 위한 환경설정 파일을 수정

web.xml 파일의 변경

◇ 99번째 ~ 109번째 줄 주석 해제 (or 126 – 138page)

<servlet>

<servlet-name>invoker</servlet-name>

<servlet-class>

org.apache.catalina.servlets.InvokerServlet

</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

Page 11: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 실행방법(4)

◇ 348번째 ~ 351(or 385 – 391)번째 줄 주석 해제

<servlet-mapping>

<servlet-name>invoker</servlet-name>

<url-pattern>/servlet/*</url-pattern>

</servlet-mapping>

Page 12: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 실행방법(5)

Tomcat 설치 디렉터리의 conf/context.xml 파일을 열고, <Context> 태그를 다음과 같이 수정:

<Context reloadable="true" privileged="true">

Page 13: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

참고:TOMCAT 6.0 컨텍스트 설정

1. 도메인으로 분류하는 방법

TOMCAT_HOME\conf\server.xml 을 열면 기본적으로 하나의 Service 엘리먼트가 있고

그 하위에 Engine 엘리먼트가, 또 그 하위에 아래와 같은 하나의 Host 엘리먼트가 있다

Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

</Host>

아래와 같이 추가하려는 도메인으로 Host 엘리먼트를 하나 더 추가한다

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

</Host>

<Host name="www.testdomain.com" appBase="C:\testdomain"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

</Host>

WEB-INF의 web.xml등은 TOMCAT_HOME\webapps\ROOT\WEB-INF에서 복사한

Page 14: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을
Page 15: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 프로그램의 상속관계

Page 16: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 라이프사이클(Generic Servlet)

Page 17: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

서블릿 라이프사이클(HTTP Servlet)

실제적인service()의method(응답시스템)

구체화된실제method doXXX() method

(xxx : client의요청방식) doGet() , doPost()가가장많이사용

doDelete(),doput():CGI,doTrace(),doOptions() doGet(),doPost():html

//get방식이나,post방식으로요청한client에대한응답 service를제공하는method

*method의선택

:실행되는method는client의요청방식에따라결정

Page 18: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 과 POST의 차이

GET 방식

‘정보’를 처리하는 것(정보:문서, 차트, 질의어 처리에 따른 결과)

GET 방식은 프로그램이 환경변수를 사용하여 데이터를 서버에 전달하므로 전달된환경변수의 정의에 의한 한계를 가지게 된다

따라서, 사용자의 입력 양이 많은 프로그램에서는 큰 데이터를 모두 저장할 수

없기 때문에 사용되지 않고 소량의 데이터를 전송할 때 사용

예) 검색 사이트

POST 방식

POST 빙식은 데이터를 표준 입력 처리한 후 서블릿 프로그램의 매개변수로 처리

하기 때문에 GET 방식과는 반대로 사용자가 입력한 큰 데이터를 서버에 전달하는 프로그램에서 사용한다.

예)차트 데이터나 데이터베이스에 등록될 자료들과 같은 수 메가 바이트의 전송을 필요로 할떼

POST는 길이에 제한이 없기 때문에 HTTP 요청의 일부분으로서 소켓을 통하므로

클라이언트에게는 보여지지 않고 데이터를 전송한다

예)게시판에서 자료를 게시하는 것

Page 19: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

doPOST() 방식 처리

doPOST(…)

POAT 방식으로 요청한 CLIENT에 응답 SERVICE를 제공하는 방법

<form method=“post” 이렇게 요청하면 doPOST()호출

Page 20: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

doGET() 방식

doGET(…)

GET 방식으로 요청한 CLIENT에 응답 SERVICE를 제공하는 방법

<form method=“get” 이렇게 요청하면 doGET()호출

Page 21: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

FORM 태그의 메소드

FORM의 액션 형태

HTML의 FORM 데이터를 처리하기 위해서는 FORM 태그를 가지는 HTML 문서와 자료를 처리할 수 있는 서블릿 프로그램이 필요

Page 22: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 방식 처리 GET 방식을 사용하여 값을 전달할 때에는 URL의 끝 부분에 쿼리 스트림으로

전달하고자 하는 변수의 이름과 값이 추가된다

GET 메소드를 사용하는 경우에 웹 클라이언트가 웹 서버에 전달하는 내용은 URL의 끝 부분에 쿼리 스트림의 형태로 전달된다

쿼리 스트림이란 서블릿 이름 다음에 ? 문자로 시작하는 문자열을 의미

쿼리 스트림은 “이름=값’의 쌍으로 구성되어 있으며, 여러 개의 쌍이 나올 때는 & 문자를 이용하여 구별한다

쿼리 스트링에 들어가는 문자가 특수문자(한글, 빈칸, % 등)인 경우에는 % 문자로 시작하는 16진수 값으로 변환하여 전달된다

HTML의 FORM 태그에서 GET 메소드를 사용하기 위해서는 METHOD 속성을 GET으로 값을 설정한다

Page 23: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 방식 프로그램_1

Page 24: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 방식 프로그램_2

Page 25: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 테스트 실행 방법 및 결과_1

GET 테스트 실행 방법 및 결과 1

- ServletTest02.class 파일은

<Tomcat>\webapps\ROOT\WEB-INF\classes 폴더에저장

- GetTest.html 파일은

<Tomcat>\webapps\ROOT 폴더에저장한후웹사이트방문.

Page 26: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

GET 테스트 실행 방법 및 결과_2

Page 27: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

POST 방식 처리

서블릿에서 POST를 사용하는 경우에는 doPOST() 메소드를 작성해야 한다

웹 서버에 데이터가 전달될때 POST 방식인 경우에는 데이터의 길이에 제한을

받지 않는다

전달되는 이름이나 값이 URL의 끝에 붙지 않는다

이러한 장점 때문에 게시판이나 방면록은 대부분운 POST 방식을 사용한다

Page 28: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

POST 방식 프로그램 _1

Page 29: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

POST 방식 프로그램 _2

Page 30: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

POST 테스트 실행 방법 및 결과

Page 31: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

HTTP 서블릿을 활용한 파일 업로드 서블릿 작성

1. 파일 업로드를 위한 HTML 페이지부터 설계

2. HTML 페이지를 이용하여 호출된 HTTP 서블릿을 설계

Page 32: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

계속..

FORM 속성

method="POST"

메소드를 POST 방식으로 설정

왜냐하면, GET 방식으로 전달할 경우 환경변수에 내용이 저장되므로 그 크기에 한계가 있음

또한, 파일의 경우 대부분 바이너리 형식으므로 POST 방식으로 전달하는 것이 안전

action=http://park.konkuk.ac.kr:8080/servlet/FileUploadEchoServlet

물론 파일 업로드를 위한 서블릿을 지정해 주어야 함

enctype=multipart/form-data

파일 업로드를 위해서 중요한 속성

업로드 할 파일의 형식을 지정한는 것으로서, 항상 “multipart/form-data”와 같이 해 주어야 함

파일: <input type="file" name="binary">

파일을 업로드하기 위해 input 의 형식을 “file”로지정해 주어야 함

이는 웹 브라우저가 파일을 선택할 수 있는 버튼을 자동으로 제공하도록 함으로써, 사용자가

보내고자 하는 파일을 선택할 수 있도록 하는 것임

Page 33: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

2. 호출되는 HTTP서블릿은 파일을 업로드할 때, 내부적으로 어떻게 데이터가

전달되는지를 알아보기 위해 웹 클라이언트로부터 전달되어 온 데이터를

그대로 출력하도록 하는 서블릿을 작성

Page 34: Servlet HTTP Connection & Tomcat Servermm.sookmyung.ac.kr/~yiyoon/Lecture/MMN/Part_5(Servlet).pdf · CGI와 서블릿 CGI(Common Gateway Interface) 웹 사이트에서 방명 , 게시판을

2. 결과

실제로 파일을 업로드 했을 경우:

내부적으로 전달되는 데이터를 그대로 출력하는 결과 HTML 페이지이다

이는 바이너리 파일을 업로드 했고, 그 내용이 HTTP 서블릿에게 전달되고, HTTP 서블릿은

이를 그대로 여과없이 결과 HTML 페이지에 출력했기 때문에, 결과인 HTML 페이지는 이상한 문자들이 찍혀 있다