Servlet HTTP Connection & Tomcat Server 숙명여자대학교 _ 멀티미디어과학과 2012 년여름학기 윤용익 yiyoon@sm.ac.kr 2012
Web Program Language Web page 작성용언어
CGI 와서블릿 CGI(Common Gateway Interface) 웹사이트에서방명록, 게시판을작성하기위해서는 HTML 문서와함께방명록이나게시판을위한프로그램도작성해야하는데이프로그램은 C, C++, Perl 등다양한언어로작성할수있으며이러한프로그램을통틀어서 CGI 프로그램이라한다 Perl 프로그래밍언어가가장많이사용되고있음 CGI 는프로그래밍언어가아니라웹서버와연결시켜주는규약 (Protocol) 이다 CGI 프로그램은게시판 / 방명록작성, 설문조사, 인터넷쇼핑등동적인홈페이지작성등다양한분야에서널리사용되며웹기반의인터넷에서는필수적인것이다
CGI 라이프사이클 하지만, CGI 는최악의라이프사이클을갖고있다 서버가 CGI 프로그램의접속요청을받으면, 서버는 CGI 프로그램수행을위해새로운프로세스를생성해야하고, 응답생성에필요한모든정보를환경변수와표준입력을통해외부프로그램에전송해야함 매요청마다프로세스를생성하는것은시간과막대한서버의리소스를요구함으로써, 서버가동시에다룰수있는요청의개수를제한하게함 CGI 의성능을개선한방법이나왔으니며, 이것은서블릿 (Servlet) 이라부른다
서블릿 (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 페이지는이상한문자들이찍혀있다