Servlet
HTTP Connection & Tomcat Server
숙명여자대학교 _멀티미디어과학과
2012년 여름학기
윤용익 | [email protected] | 2012 |
Web Program Language
Web page 작성용 언어
CGI 와 서블릿
CGI(Common Gateway Interface)
웹 사이트에서 방명록, 게시판을 작성하기 위해서는 HTML문서와 함께 방명록 이나 게시판을 위한 프로그램도 작성해야 하는데 이 프로그램은 C, C++, Perl 등 다양한 언어로 작성할 수 있으며 이러한 프로그램을 통틀어서 CGI 프로그램이 라 한다
Perl 프로그래밍 언어가 가장 많이 사용되고 있음
CGI는 프로그래밍 언어가 아니라 웹서버와 연결 시켜주는 규약(Protocol)이다
CGI 프로그램은 게시판/방명록 작성, 설문조사, 인터넷쇼핑 등 동적인 홈페이지
작성 등 다양한 분야에서 널리 사용되며 웹 기반의 인터넷에서는 필수적인 것 이다
CGI 라이프사이클
CGI의 성능을 개선한 방법이 나왔으니며, 이것은 서블릿(Servlet)이라 부른다
하지만, CGI는 최악의 라이프사이클을 갖고 있다
서버가 CGI 프로그램의 접속 요청을 받으면, 서버는 CGI 프로그램 수행을 위해 새로 운 프로세스를 생성해야하고, 응답 생성에 필요한 모든 정보를 환경 변수와 표준 입 력을 통해 외부 프로그램에 전송해야 함
매 요청마다 프로세스를 생성하는 것은 시간과 막대한 서버의 리소스를 요구함으로 써, 서버가 동시에 다룰 수 있는 요청의 개수를 제한하게 함
서블릿 (Servlet)
서블릿은 웹 서버의 자바 가상 머신 안에서 동작된다는 점을 제외하고는 교유 의 서버 익스텐션과 유사하다
안전하고 이식성이 높다
서블릿은 서버의 도메인 안에서 단독으로 동작한다
애플릿과는 달리 웹 브라우저 안에서의 자바의 대한 자원을 필요로 하지 않다
독립적인 프로그램이나 요청을 처리하기 위해 다중 프로세스를 필요로 하는
CGI와 달리, 서블릿은 웹 서버 프로세스 안에서 독립적인 쓰레드에 의해 모든
작업이 처리된다 주요 웹 서버 대부분이 서블릿을 지원한다
서블릿 API
API 계층구조
사용자정의 Servlet
서블릿 예제
서블릿 실행방법 (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
서블릿 실행방법 (2)
TOMCAT 6.0 SERVLET 실행시키기 위한 설정
TOMCAT의 버전이 올라가면서 보안상의 이유로 기본적으로는 서블릿을 실생하지
못하도록 설정이 되어있음
TOMCAT 설치한 디렉터리의 CONF -> web.xml 파일을 수정함으로써 톰켓을 실행하
는데 필요한 환경설정 정보를 변경할 수 있다
TOMCAT 환경설정 파일
%CATALINA_HOME%\conf\web.xml
Web.xml 파일에서 서블릿을 실행할 수 있도록 서블릭의 접근 방법을 지정해 줌으로써 서블릿 서비스를 제공
할 수 있다
서블릿 실행방법 (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>
서블릿 실행방법 (4)
◇ 348번째 ~ 351(or 385 – 391)번째 줄 주석 해제
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
서블릿 실행방법 (5)
Tomcat 설치 디렉터리의 conf/context.xml 파일을 열고, <Context> 태그 를 다음과 같이 수정:
<Context reloadable="true" privileged="true">
참고 :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에서 복사한
서블릿 프로그램의 상속관계
서블릿 라이프사이클 (Generic Servlet)
서블릿 라이프사이클 (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의요청방식에따라결정
GET 과 POST 의 차이
GET 방식
‘정보’를 처리하는 것(정보:문서, 차트, 질의어 처리에 따른 결과)
GET 방식은 프로그램이 환경변수를 사용하여 데이터를 서버에 전달하므로 전달
된환경변수의 정의에 의한 한계를 가지게 된다
따라서, 사용자의 입력 양이 많은 프로그램에서는 큰 데이터를 모두 저장할 수 없기 때문에 사용되지 않고 소량의 데이터를 전송할 때 사용
예) 검색 사이트
POST 방식
POST 빙식은 데이터를 표준 입력 처리한 후 서블릿 프로그램의 매개변수로 처리
하기 때문에 GET 방식과는 반대로 사용자가 입력한 큰 데이터를 서버에 전달하 는 프로그램에서 사용한다.
예)차트 데이터나 데이터베이스에 등록될 자료들과 같은 수 메가 바이트의 전송을 필요로 할떼
POST는 길이에 제한이 없기 때문에 HTTP 요청의 일부분으로서 소켓을 통하므로
클라이언트에게는 보여지지 않고 데이터를 전송한다
예)게시판에서 자료를 게시하는 것
doPOST() 방식 처리
doPOST(…)
POAT 방식으로 요청한 CLIENT에 응답 SERVICE를 제공하는 방법
<form method=“post” 이렇게 요청하면 doPOST()호출
doGET() 방식
doGET(…)
GET 방식으로 요청한 CLIENT에 응답 SERVICE를 제공하는 방법
<form method=“get” 이렇게 요청하면 doGET()호출
FORM 태그의 메소드
FORM의 액션 형태
HTML의 FORM 데이터를 처리하기 위해서는 FORM 태그를 가지는 HTML 문서
와 자료를 처리할 수 있는 서블릿 프로그램이 필요
GET 방식 처리
GET 방식을 사용하여 값을 전달할 때에는 URL의 끝 부분에 쿼리 스트림으로
전달하고자 하는 변수의 이름과 값이 추가된다
GET 메소드를 사용하는 경우에 웹 클라이언트가 웹 서버에 전달하는 내용은
URL의 끝 부분에 쿼리 스트림의 형태로 전달된다
쿼리 스트림이란 서블릿 이름 다음에 ? 문자로 시작하는 문자열을 의미
쿼리 스트림은 “이름=값’의 쌍으로 구성되어 있으며, 여러 개의 쌍이 나올 때 는 & 문자를 이용하여 구별한다
쿼리 스트링에 들어가는 문자가 특수문자(한글, 빈칸, % 등)인 경우에는 % 문 자로 시작하는 16진수 값으로 변환하여 전달된다
HTML의 FORM 태그에서 GET 메소드를 사용하기 위해서는 METHOD 속성을
GET으로 값을 설정한다
GET 방식 프로그램 _1
GET 방식 프로그램 _2
GET 테스트 실행 방법 및 결과 _1
GET 테스트 실행 방법 및 결과 1
- ServletTest02.class 파일은
<Tomcat>\webapps\ROOT\WEB-INF\classes 폴더에저장 - GetTest.html 파일은
<Tomcat>\webapps\ROOT 폴더에저장한후웹사이트방문.
GET 테스트 실행 방법 및 결과 _2
POST 방식 처리
서블릿에서 POST를 사용하는 경우에는 doPOST() 메소드를 작성해야 한다
웹 서버에 데이터가 전달될때 POST 방식인 경우에는 데이터의 길이에 제한을 받지 않는다
전달되는 이름이나 값이 URL의 끝에 붙지 않는다
이러한 장점 때문에 게시판이나 방면록은 대부분운 POST 방식을 사용한다
POST 방식 프로그램 _1
POST 방식 프로그램 _2
POST 테스트 실행 방법 및 결과
HTTP 서블릿을 활용한 파일 업로드 서블릿 작성
1. 파일 업로드를 위한 HTML 페이지부터 설계
2. HTML 페이지를 이용하여 호출된 HTTP 서블릿을 설계
계속 ..
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”로지정해 주어야 함
이는 웹 브라우저가 파일을 선택할 수 있는 버튼을 자동으로 제공하도록 함으로써, 사용자가 보내고자 하는 파일을 선택할 수 있도록 하는 것임
2. 호출되는 HTTP서블릿은 파일을 업로드할 때, 내부적으로 어떻게 데이터가
전달되는지를 알아보기 위해 웹 클라이언트로부터 전달되어 온 데이터를
그대로 출력하도록 하는 서블릿을 작성
2. 결과
실제로 파일을 업로드 했을 경우:
내부적으로 전달되는 데이터를 그대로 출력하는 결과 HTML 페이지이다
이는 바이너리 파일을 업로드 했고, 그 내용이 HTTP 서블릿에게 전달되고, HTTP 서블릿은 이를 그대로 여과없이 결과 HTML 페이지에 출력했기 때문에, 결과인 HTML 페이지는 이상 한 문자들이 찍혀 있다