웹 개발자를 위한 서블릿/JSP

Similar documents
PowerPoint Template

2009년 상반기 사업계획

14-Servlet

2장 변수와 프로시저 작성하기

0. 들어가기 전

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Javascript

TCP/IP Model

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 03-TCP Programming.ppt

Data Provisioning Services for mobile clients

쉽게 풀어쓴 C 프로그래밍

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

PHP & ASP

본 강의에 들어가기 전

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

뇌를 자극하는 JSP & Servlet 슬라이드

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Secure Programming Lecture1 : Introduction

JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른

PowerPoint 프레젠테이션

SK Telecom Platform NATE

뇌를 자극하는 JSP & Servlet 슬라이드

<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E >

Microsoft PowerPoint 웹 연동 기술.pptx

게시판 스팸 실시간 차단 시스템

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

JavaGeneralProgramming.PDF

Microsoft PowerPoint Python-WebDB

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PHP & ASP

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - aj-lecture4.ppt [호환 모드]

뇌를 자극하는 JSP & Servlet 슬라이드

<4D F736F F F696E74202D203130C0E52EBFA1B7AF20C3B3B8AE205BC8A3C8AF20B8F0B5E55D>

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet

PowerPoint 프레젠테이션

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

쉽게 풀어쓴 C 프로그래밍

중간고사

Microsoft PowerPoint Python-Web.pptx

PowerPoint 프레젠테이션

Data Provisioning Services for mobile clients

rmi_박준용_final.PDF

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

EDB 분석보고서 (04.06) ~ Exploit-DB( 에공개된별로분류한정보입니다. Directory Traversal users-x.php 4.0 -support-x.php 4.0 time-

Javascript

<4D F736F F F696E74202D2031C0E52E4A535020B9D C6574C0BB20C8B0BFEBC7D120B5BFC0FB20C0A520C7C1B7CEB1D7B7A1B9D620BCD2B0B32

INDEX 들어가기 고민하기 HTML(TABLE/FORM) CSS JS

PowerPoint 프레젠테이션

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

HTML5

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

PowerPoint Template

PowerPoint Presentation

Windows 8에서 BioStar 1 설치하기

뇌를 자극하는 JSP & Servlet 슬라이드

뇌를 자극하는 JSP & Servlet 슬라이드

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

04장

3장

Microsoft PowerPoint - 4강.pptx

EDB 분석보고서 (04.03) ~ Exploit-DB( 에공개된별로분류한정보입니다. ** 5개이상발생한주요소프트웨어별상세 EDB 번호 종류 공격난이도 공격위험도 이름 소프트웨어이름 3037 SQL Inj

Spring Boot

Data Provisioning Services for mobile clients


Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

자바-11장N'1-502

PowerPoint 프레젠테이션

J2EE Concepts

Data Provisioning Services for mobile clients

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

C H A P T E R 2

쉽게 풀어쓴 C 프로그래밊

SBR-100S User Manual

PowerPoint Presentation

Microsoft PowerPoint - 10Àå.ppt

PowerPoint Presentation

<3033B0AD D4C5F584D4C5FC0CEC5CDB3DDBAB8C3E6C7D0BDC0C0DAB7E12E687770>

(Microsoft PowerPoint - 9\300\345.ppt [\310\243\310\257 \270\360\265\345])

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드]

미쓰리 파워포인트

쉽게 풀어쓴 C 프로그래밍

WAS 의동작과 WEB, Servlet, JSP 엑셈컨설팅본부 /APM 박종현 웹어플리케이션서버란? 웹어플리케이션서버방식은웹서버가직접어플리케이션프로그램을처리하는것이아니라웹어플리케이션서버에게처리를넘겨주고어플리케이션서버가어플리케이션프로그램을처리한다. 여러명의사용자가동일한페

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

Microsoft PowerPoint - aj-lecture7.ppt [호환 모드]

게임 기획서 표준양식 연구보고서

Microsoft PowerPoint - Java7.pptx

오버라이딩 (Overriding)

Transcription:

2. HTTP 와서블릿 2.1 HTTP 이해하기 2.1.1 HTTP 동작방식 HTTP(Hypertext Transfer Protocol) 는웹서버와웹클라이언트웹브라우저간에통신하 ( ) 기위한프로토콜( 약속) 이다. CGI나서블릿프로그래밍을하기위해서는 HTTP 프로토콜을어느정도이해할필요성이있다. 이곳에서는간단하게 HTTP 프로토콜에대해알아보자. 웹브라우저는 HTTP 프로토콜에맞게요청(request) 을웹서버에전송하고, 웹서버는이에따라응답(reply) 을 HTTP 프로토콜에맞게웹브라우저에전송한다. 요청과응답은모두크게세부분으로구성되어있다. 첫번째는요청/ 응답라인, 두번째는헤더부분, 셋째는엔티티바디(entity body) 부분이다. 웹브라우저와웹서버의통신은웹브라우저의요청으로부터시작된다. 용되는 HTTP 포맷이다. 다음은요청에사 형태:HTTP 요청 웹브라우저가웹서버에요청을전달하는작업은다음과같은절차를거쳐서진행된다. 1. 웹클라이언트( 웹브라우저) 는미리알려진포트( 보통 80 번) 로연결을시도한다. 연결이 이루어진다음에웹클라이언트는 HTTP 명령어, 문서주소, HTTP 버전정보를웹서 버에전달한다. 다음예는 index.html 문서를요청하기위해서 GET 메소드를사용하는 것을보여준다. GET /index.html HTTP/1.0 2. 요청라인다음줄에웹클라이언트는헤더정보, 구성정보(configuration information), 받아들일문서포맷등의정보를옵션으로웹서버에전달한다. 모든헤더정보들은한줄에하나씩기술되며, 헤더이름과값으로구성된다. 헤더정보의끝에는공백라인을추가해서헤더의끝임을알려준다. -1-

User-Agent: Mozilla/2.03Gold(WinNT: I) Accept: text/html, img/gif 3. 요청과헤더정보를보낸다음에웹클라이언트는추가적인정보를웹서버에보낼수있다. 보통이데이터는 CGI에서 POST 방법으로웹서버에전달하기위해서사용된다. 웹클라이언트로부터요청을받은웹서버는요청에맞는적당한작업을수행하고, 응답을 웹클라이언트에전달한다. 웹브라우저의요청에응답하는서버의 HTTP 포맷은다음과 같은형태를취한다. 형태:HTTP 응답 웹서버는클라이언트의요청에대해다음과같은절차에따라응답한다. 1. 서버의응답은 HTTP 버전, 상태코드, 설명으로구성된상태라인을이용해서응답한다. HTTP 버전은웹서버가사용하는 HTTP 버전을의미한다. 상태코드는클라이언트의요청에따른서버의결과를표현하기위한것으로세자리숫자로표현된다. 다음은각상태코드의의미이다. 1xx: 정보 - 요청이받아들여졌고, 처리중임. 2xx: 성공 - 클라이언트의요청이성공적으로처리되었음. 3xx: 경로변경 - 요청이완전히처리하기위해추가적인액션이수행되어야함. 4xx: 클라이언트에러 - 클라이언트의요청문법이틀렸거나, 요청이처리될수 없음. 5xx: 서버에러 - 정당한요청을서버가처리하지못함. 설명부분은상태코드를사람이읽을수있는간단한단어로표시한것이다. 상태코드 200 은클라이언트의요청이성공적으로수행되었음을의미한다. 다음예의 -2-

HTTP/1.0 200 OK 2. 상태라인이후에웹서버는자신과요청된문서에대한정보를헤더정보를통해서클라이언트에전달한다. 헤더의끝은빈라인으로표시한다. Date: Tue, 28 Mar 2000 06:18:26 GMT Server: Apache/1.3.9 (Unix) tomcat/1.0 PHP/3.0.12 Last-Modified: Tue, 21 Sep 1999 02:35:00 GMT 3. 클라이언트의요청이성공적으로수행되었다면, 요청된자료가전송된다. 전송되는자료는파일내용이거나,CGI 프로그램의응답일수있다. 다음은명령어창에서텔넷(telnet) 프로그램을이용해서간단하게 HTTP 프로토콜이수행되는것을테스트한예이다. 굵은글씨는사용자가입력한내용이다. 테스트를하기전에자카르타를먼저실행시켜야한다. 예:telnet을이용한테스트 C: > telnet localhost 8080 Trying 127.0.0.1... Connected to simple.ssu.ac.kr. Escape character is '^]'. GET /index.html HTTP/1.0 Accept: text/html User-Agent: CHOI HTTP/1.1 200 OK Content-Type: text/html Content-Length: 6827 Connection: close Date:Tue,09Apr200207:15:18GMT ETag: "6827-1015022890000" Server: Apache Tomcat/4.0.3 (HTTP/1.1 Connector) Last-Modified: Fri, 01 Mar 2002 22:48:10 GMT <!doctype html public "-//w3c//dtd html 4.0 transitiona... -3-

실습 1. 텔넷을이용해서자카르타톰캣에연결하는실습을다음과같이수행하라. GET /servlet/helloservlet HTTP/1.0 참고 : HTTP method 웹클라이언트( 예: 웹브라우저) 의요청에서 HTTP 명령어(GET, POST 등) 는 method라고불리운다. method 는클래스의함수와혼동될수있다. 책에서는분명하게구별할수있는경우에는 " 메소드" 라는단어를사용하고, 클래스함수와혼동될수있는경우에는 "method" 라는단어를사용하기로한다. 앞에서텔넷을이용해서테스트할때사용한 GET이바로 HTTP 의메소드이다. 이메소드의종류로는 GET, POST, HEAD 가많이사용된다. 이외에 LINK, UNLINK, PUT, DELETE, OPTIONS, TRACE 가정의되어있지만, 웹서버에따라구현되어있는경우도있고아직구현되지않은부분도있다. 2.1.2 GET 메소드 GET 메소드는서버의 URI 에기술된위치에있는정보를요청하는명령어이다. 우리가웹브라우저에 URL을기술해서어떤사이트를방문하는것은모두 GET 메소드를사용하는것이다. GET 메소드를사용하면클라이언트의요청에서엔티티바디(entity body) 부분은항상비어있는상태로서버에전달된다. 웹클라이언트가 GET 메소드를이용하면서버는상태라인, 헤더, 요청된데이터로구성된응답을보내준다. 웹브라우저에서 URL을기술해서사이트를방문하는것은모두 GET 메소드방식으로작동한다. 따라서다음과같은 URL은 GET 메소드를사용한다. http://java.sun.com/ GET 메소드는웹서버에데이터를요청하는데주로사용되지만, 어떤경우에는데이터를웹서버에전송하기위해서도사용된다. 이것은 HTML에서 FORM의 METHOD에 GET을기술하는경우에웹서버에데이터를전달하기위해서사용될수있다. 그러나, GET을이용해서데이터를전송하는경우에는전달되는데이터의길이에한계가있고, 전달되는데이터가정확하게전달되어있는지체크하는기능이없다. 따라서, 웹서버에큰데이터를보내기위해서는 POST 메소드를사용한다. GET을이용해서데이터를전송하기위해서는이름과값의쌍으로전달된다. 다음예에서 month=august&date=24는웹서버에전달되는이름과값의쌍이다. 이것을다른말로는쿼리스트링 (query string) 이라고도한다. 쿼리스트링은? 문자다음부터 이름= 값 의형태로되어있는데, 이것이여러번반복될때는구별하기위해서 & 문자를사용한다. -4-

GET /cgi-bin/birthday.cgi?month=august&date=24 HTTP/1.0 2.1.3 HEAD 메소드 HEAD 메소드는 GET 메소드와유사한데차이점은 HEAD 메소드에는응답에요청된데이터의내용을웹클라이언트에전달하지않는다는것이다. 예: 클라이언트요청 HEAD /index.html HTTP/1.0 User-Agent: Mozilla/2.02Gold (WinNT; I) Host: www.ora.com Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* 예: 서버응답 HTTP/1.0 200 OK Date: Fri, 20 Sep 1996 08:17:58 GMT Server: NCSA/1.5.2 Last-modified: Mon, 17 Jun 1996 21:53:08 GMT Content-type: text/html Content-length: 2482 2.1.4 POST 메소드 POST 메소드는클라이언트의데이터를웹서버에전달하기위해서사용된다. 전달될데이터는클라이언트요청의엔티티바디부분에포함되어웹서버로전달된다. POST 메소드는 HTML의 FORM에서 METHOD를 POST 로지정하는경우에사용된다. 다음은 POST를사용하는클라이언트요청의예이다. 예: 클라이언트요청 POST /cgi-bin/birthday.pl HTTP/1.0 User-Agent: Mozilla/2.02Gold (WinNT; I) Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* Host: www.ora.com Content-type: application/x-www-form-urlencoded Content-length: 20 month=august&date=24-5-

2.2 FORM 태그 2.2.1 FORM 태그형태 FORM 태그는 HTML 에서사용자가값을입력할수있도록하기위해서제공된다. <FORM> 태그와 </FORM> 태그사이에는다른여러종류의태그들이올수있다. 이중에서도사용자입력을위해서사용되는태그로는 INPUT, SELECT, TEXTAREA 가존재한다. FORM 태그는 action, method, enctype, target 속성을가지고있다. action: FORM의내용이웹서버에전달되어처리될 CGI 로그램의 URL 이나이름을기술한다. 프로그램이나서블릿프 method: HTTP 명령어를기술한다. 보통 GET과 POST 중에서하나를사용한다. enctype: 인코팅타입을기술한다. target: CGI 프로그램이나서블릿프로그램이데이터를처리한후결과를보여줄프레임이나창이름을기술한다. 예:FORM태그형태 <FORM... > <INPUT... > <SELECT... > <OPTION... > </SELECT> <TEXTAREA>... </TEXTAREA> </FORM> 2.2.2 INPUT 태그 INPUT 태그는 name, type, value, checked, size, maxlength 속성을가진다. INPUT 태그는 type 속성을이용해서다양한형태의타입을기술할수있는데, 다음은 type 속성에기술할수있는값들이다. type: 입력형태를기술한다. 이것은다음과같은값들을가질수있다. -6-

ꋻtype="button" - 클릭할수있는버튼을사용한다. ꋻtype="text" - 문장한줄을입력할수있다. ꋻtype="password" - 암호를입력할때사용된다. ꋻtype="checkbox" - 체크박스형태로값을선택할수있다. ꋻtype="radio" - 다. 동일한이름을가진것들중에서하나만선택할수있 ꋻtype="submit" - FORM 에서기술한내용을웹서버로전송한다. ꋻtype="reset" - FORM 에기술한내용들을초기값으로변경한다. ꋻtype="hidden" - 다. 화면에안보이는값을웹서버에전달할때사용된 ꋻtype="image" - 이미지맵을이용하는경우에이미지에서마우스가클릭된곳의위치를리턴한다. name: 현재 input 태그의이름을기술한다. value: input 태그의값을기술한다. 값은형태에따라다른의미로사용된다. ꋻtype이 text, password 인경우: value에기술된값은 text와 password 의디폴트문자열이된다. password인경우에는화면에문자열대신에 "*" 가보이게된다. ꋻtype이 checkbox, radio 인경우: value에기술된값은체크박스나라디오버튼이선택된경우에웹서버에전달될값을의미한다. ꋻtype이 reset, button, submit 인경우: value에기술된값은버튼의라벨이된다. checked: type이 checkbox나 radio 인경우디폴트로선택됨을의미한다. checked 속성이기술되어있지않으면디폴트로선택되지않는다. size: type이 text나 password 인경우에화면에보여질문자의수를의미한다. maxlength: - text와 password 에입력할수있는문자의최대수를의미한다. -7-

다음은많이사용되는 INPUT 태그의사용법을보여준다. INPUT 태그는 TYPE 속성에따라다른형태를가지게된다. <form method=post action=/servlet/abc> 이름 <input type=text name=name> <br> 암호 <input type=password name=passwd> <br> <input type=submit value=" 전송 > <input type=reset value=" 취소 > </form> 2.2.3 SELECT 태그 SELECT 태그는드랍-다운형태의메뉴에서하나혹은여러개의아이템을선택하기위해서사용된다. 아이템들을표현하기위해서는 OPTION 태그를사용한다. SELECT 태그는 name, size, multitple 속성을가지고있다. name: 현재 select 태그의이름을의미한다. size: 한번에보여질<option> 태그아이템의수를의미한다. multitple: 한번에여러개를선택할수있는지여부를기술한다. multiple이선언되어있으면한번에여러개의아이템을선택할수있다. 다음은 select 태그를사용하는예를보여준다. <form method=post action=/servlet/abc> <select name="name" size=2 multiple> <option> 사과 <option selected> 배 <option> 딸기 <option> 오렌지 </select> </form> 2.2.4 TEXTAREA 태그 TEXTAREA 는여러줄에걸쳐글을입력할때사용된다. <TEXTAREA> 와 -8-

</TEXTAREA> 태그사이에있는글은기본텍스트로화면에나타난다. textarea는 name, rows, cols 속성을가지고있다. name: 현재 textarea 태그의이름을의미한다. rows: 세로축으로화면에보여질라인수를의미한다. cols: 가로축으로화면에보여질문자의수를의미한다. <form method=post action=/servlet/abc> <textarea rows=5 cols=30> 디폴트메시지 </textarea> </form> 다음 form.html은 FORM 태그에서사용할수있는다양한형태의태그사용법을보여준다. 서블릿을하기위해서는 HTML 태그를어느정도익혀두어야한다. 예제 : form.html 1 <html><head><title>form</title></head> 2 <body> 3 <center><h2>html FORM 테스트</h2></center> 4 5 <form method=post action=/servlet/formtest> 6 7 <table width="100%" border=1><tr><td> 8 이름 <input type=text name=name><br> 9 암호 <input type=password name=passwd><br><br> 10 11 <input type=button value=" 버튼"><br> 12 13 </td><td> 14 성별<br> 15 <input type=radio name=sex value=male> 남자 16 <input type=radio name=sex value=female> 여자<br> 17 18 <br> 사용중인 JDK 는?<br> 19 <input type=checkbox name="jdk1.1" value="jdk1.1"> JDK 1.1.x <br> 20 <input type=checkbox name="jdk1.2" value="jdk1.2"> JDK 1.2.x <br> -9-

21 22 </td></tr> 23 24 <tr><td> 25 <input type=hidden name="state" value="ready"> 26 27 사용중인운영체제는? <br> 28 <select name=os size=3 multiple> 29 <option value="win32"> 윈도우즈 30 <option value="linux"> 리눅스 31 <option value="solaris"> 솔라리스 32 <option value="misc"> 기타 33 </select> 34 35 <br><br> 사용중인컴퓨터하드웨어는? <br> 36 <select name=hw> 37 <option value="pentium"> 펜티엄 38 <option value="misc"> 기타 39 </select> 40 41 </td><td> 42 <br> 기타건의사항<br> 43 <textarea rows=10 cols=40> 44 45 </textarea> 46 </td></tr> 47 <tr><td colspan=2><center> 48 <input type=submit value=" 전송"> 49 <input type=reset value=" 취소"></center> 50 </td></tr></table> 51 </form> 52 53 </body> 54 </html> 결과 -10-

2.3 서블릿폼(FORM) 데이터처리 2.3.1 GET 메소드 1. FORM 태그형태 HTML의 FORM 데이터를처리하기위해서는 FORM 태그를가지는 HTML 문서와자료를처리할수있는 CGI 나서블릿프로그램이필요하다. HTML의 FORM 태그는다음과같은형태로사용될수있다. 형태:URL을모두기술하는경우 <FORM ACTION=http://host:port/servlet/ServletName <INPUT TYPE=TEXT...>...... </FORM> METHOD=GET> 형태: 상대 URL을기술하는경우 <FORM ACTION=/servlet/ServletName <INPUT TYPE=TEXT...>...... </FORM> METHOD=GET> METHOD 부분에는다음과같은값들이올수있지만, 대부분의경우 GET과 POST만사 용된다. 이것은 METHOD들중에서 PUT, DELETE, TRACE, OPTIONS는 HTTP/1.1에서 -11-

새로이지원되도록만들어진것으로아직많은웹서버들이이기능들을지원하지않고있기때문이다. GET - 가장많이사용되는것으로, 사이트방문은모두 GET 방식을사용한다. 웹브라우저에서웹서버에간단한데이터를전송할때도사용된다. HEAD - GET 과유사하지만, HEAD를이용하는경우웹브라우저는웹서버로부터내용은받지않고 HTTP 헤더정보만받는다. POST - 웹브라우저에서웹서버에데이터를전송할때많이사용된다. PUT - PUT 은파일을업로드할때사용된다. 그러나, 현재많이사용되는파일업로드는 POST 방식을사용하고있고, PUT 은아직많이사용되지않는다. DELETE - 웹브라우저에서웹서버에어떤자원을삭제하도록하는기능으로, 아직많이사용되지는않는다. TRACE - 웹브라우저의요청이웹서버에게어떻게전달되는지를알아보기위해사용된다. OPTIONS - 웹서버에서지원되는프로토콜을알아보기위해서사용된다. 2. GET 방식에서사용자입력데이터처리 GET 방식을이용해서사용자가웹브라우저에서입력한데이터를서블릿에서처리하는예제를살펴보자. GET 방식은주소웹서버가가지고있는자원을웹브라우저가얻기위해서사용되는명령어이지만, 간단한데이터를서버에전달하기위해서도사용될수있다. GET 방식을사용해서값을전달하는경우를알아보자. GET 방식을사용해서값을전달할때는 URL 의끝부분에쿼리스트링으로전달하고자하는변수의이름과값이추가된다. 즉, 다음예와같은형태로전달된다. http://<host>/servlet/getdata?name=%c0%cc%b8%a7&addr=seoul 예에서 name 부분에 " 이름" 이라는값이전달되고, addr 부분에 "seoul" 이라는값이전달되는것을보여준다. 예에서볼수있듯이 GET 메소드를사용하는경우에웹클라이언트가웹서버에전달하는내용은 URL 의끝부분에쿼리스트링의형태로전달된다. 쿼리스트링이란서블릿이름다음에? 문자로시작하는문자열을의미한다. 쿼리스트링은 " 이름= 값" 의쌍으로구성되어있으며, 여러개의쌍이나올때는 & 문자를이용해서구별한다. 쿼리 -12-

스트링에들어가는문자는특수문자( 한글, 빈칸, % 등) 인경우에 % 문자로시작하는 16진 수값으로변환되어전달된다. 이렇게특수문자가 % 의 16진수로변환되는것을 URL 인코 딩(encoding) 이라고한다. HTML의 FORM 태그에서 GET 메소드를사용하기위해서는 method 속성을 GET으로값을설정한다. 즉, 다음과같은형태로사용할수있다. <form method=get action=/servlet/getdata> <input type=text name="name">... </form> HTML의 FORM에서전달된값은서블릿에서 HttpServletRequest 인터페이스의 getparameter() 메소드를이용해서값을얻을수있다. 다음예에서 req 변수는 HttpServletRequest 타입이다. String n = req.getparameter("name"); 다음에다룰예제프로그램에서데이터를입력하기위한 HTML 페이지는 GetData.html이고, 이것을처리하는서블릿은 GetData.java 이다. GetData.html은 GET 방식을이용해서사용자의이름과주소를서블릿에전달하고, 서블릿은입력된값을받는다. 이때 HTML과서블릿은다음그림과같은관계를가지고있다. HTML의 FORM 태그에서사용된각태그의이름을이용해서서블릿에서는입력된값을얻을수있다. 따라서 HTML과서블릿에서사용하는이름이동일해야올바른값을얻을수있다. 이이름들은대소문자를구별한다. GetData.java GetData.html 이름주소 최종명서울시동작구 name addr... public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException {... res.setcontenttype("text/html"); 전송 취소 PrintWriter out = new PrintWriter(...); String name = req.getparameter("name"); String address = req.getparameter("addr");... 그림 2.HTML과서블릿 -13-

다음 GetData.html은 GET 방식을이용해서사용자의이름과주소를서블릿에전달하는 HTML 예제이다. 메소드는 GET 으로설정하고, action 은 /servlet/getdata 로설정한다. 예제 : GetData.html 1 <html><head><title>get TEST</title></head> 2 <body> 3 <center><h2>get 테스트</h2></center> 4 5 <form method=get action=/servlet/getdata> 6 7 이름 <input type=text name=name><br> 8 주소 <input type=text name=addr> <br><br> 9 10 <input type=submit value= 전송> 11 <input type=reset value= 취소> 12 </form> 13 </body> 14 </html> 결과웹브라우저에서 http://localhost:8080/getdata.html 사이트를방문한다. 다음은 GetData.html에서사용자가입력한데이터를받아서처리하는 GetData 서블릿코 드이다. HttpServletRequest의 getparameter() 메소드를이용해서사용자가입력한값을 얻을수있다. 예제 : GetData.java 1 import java.io.*; 2 import javax.servlet.*; 3 import javax.servlet.http.*; 4-14-

5 public class GetData extends HttpServlet { 6 7 public void doget(httpservletrequest req, HttpServletResponse res) 8 throws ServletException, IOException { 9 10 res.setcontenttype("text/html;charset=ksc5601"); 11 PrintWriter out = res.getwriter(); 12 req.setcharacterencoding("ksc5601"); 13 14 String name = req.getparameter("name"); 15 String address = req.getparameter("addr"); 16 out.println("<html>"); 17 out.println("<head><title>get DATA</title></head>"); 18 out.println("<body>"); 19 out.println("<center><h2>get 테스트입니다</h2></center>"); 20 out.println("<li> 이름 :" + name); 21 out.println("<li> 주소 :" + address); 22 out.println("<br><br><a href=/getdata.html> 뒤로</a>"); 23 out.println("</body>"); 24 out.println("</html>"); 25 } 26 } 설명 12 req.setcharacterencoding("ksc5601"); 웹브라우저에서입력한데이터가한글인경우에 setcharacterencoding() 서한글인코딩인KSC5601 을지정한다. 메소드를이용해 14 String name = req.getparameter("name"); 15 String address = req.getparameter("addr"); HTML에서 input 태그의 name 속성이 name과 addr인부분에서입력한값을얻기위해서 getparameter() 메소드를이용한다. 결과 -15-

HTML의 FORM에서 METHOD가 GET인 경우에는 웹 브라우저의 주소 부분에 http://localhost:8080/servlet/getdata 다음에? 문자와함께데이터들이붙어서전달되는 것을확인할수있다. 이렇게전달되는경우에는특수문자( 한글, %, 공백등) 는 URL 인코 딩방법에의해서 16 진수로변환되어서전달된다. 웹브라우저에서웹서버로데이터가전달될때자동적으로 URL 인코딩을사용하는방법이외에자바클래스를이용해서도 URL 인코딩을사용할수있다. URL 인코딩으로변경하고, 디코딩하는클래스와메소드가 java.net 패키지에제공된다. 인코딩하기위해서사용되는클래스는 URLEncoder 이고, 디코딩하기위해서사용되는클래스는 URLDecoder 이다. 각클래스는다음과같은방법으로사용될수있다. String en_name = URLEncoder.encode(name); String de_name = URLDecoder.decode(en_name); 2.3.2 POST 메소드 다음은 POST 방식을이용해서데이터를전달하는방법을알아보자. POST 방식으로데이 터를전달하기위해서는 HTML에서메소드를 POST 로지정한다. 즉, 다음과같은형태로 사용할수있다. <form method=post action=/servlet/postdata>... </form> POST를사용하는경우에서블릿에서는 dopost() 메소드를작성해야한다. POST 방식일때는서블릿에서 doget() 메소드는수행되지않고, dopost() 메소드가수행된다. 데이터가 전달될때에서 POST 방식인경우에는데이터의길이에제한받지않는다. 또한전달되는 -16-

데이터의이름이나값이 URL 의끝에붙지않는다. 이러한장점때문에게시판이나방명록은대부분은 POST 방식을많이사용한다. 참고:GET과 POST차이 GET 은주로웹브라우저가웹서버에데이터를요청할때사용되고, POST는웹브라우저에서웹서버에데이터를전달하기위해서사용된다. 그러나, GET도웹브라우저에서웹서버에데이터를전달할수있기때문에서로의차이점에약간혼동될수도있다. GET을사용하면웹브라우저에서웹서버로전달되는데이터가인코딩되어 URL에붙는 다. 반면에 POST 방식은전달되는데이터가보이지않는다. 프로그래밍에서 GET 방식을 사용하는경우에는전달되는데이터가 255 개의문자를초과하면문제가발생할수있다. HTTP/1.1 명세에는 GET 을통해전달되는데이터양에제한이없지만, 이전명세를지원 하는서버나프록시서버, 혹은웹브라우저에서 255문자를초과하는 URL을지원하지않을 수있다. GetData 예제와유사하게이름과주소를서블릿에전달하는서블릿프로그램을작성해보자. PostData.html은사용자입력을위한 HTML 페이지이다. 예제 : PostData.html 1 <html><head><title>post TEST</title></head> 2 <body> 3 <center><h2>post 테스트</h2></center> 4 5 <form method=post action=/servlet/postdata> 6 7 이름 <input type=text name=name><br> 8 주소 <input type=text name=addr> <br><br> 9 10 <input type=submit value= 전송> 11 <input type=reset value= 취소> 12 </form> 13 </body> 14 </html> 결과 -17-

다음 PostData.java 는사용자가입력한이름과주소를출력하는예제이다. POST 방식이기때문에 dopost() 메소드를사용하는것이외에는 GetData.java 예제와거의유사하다. 예제 : PostData.java 1 import java.io.*; 2 import javax.servlet.*; 3 import javax.servlet.http.*; 4 5 public class PostData extends HttpServlet { 6 7 public void dopost(httpservletrequest req, HttpServletResponse res) 8 throws ServletException, IOException { 9 10 res.setcontenttype("text/html;charset=ksc5601"); 11 PrintWriter out = res.getwriter(); 12 req.setcharacterencoding("ksc5601"); 13 String name = req.getparameter("name"); 14 String address = req.getparameter("addr"); 15 out.println("<html>"); 16 out.println("<head><title>post DATA</TITLE></HEAD>"); 17 out.println("<body>"); 18 out.println("<center><h3>post 테스트입니다</H3></CENTER>"); 19 out.println("<li> 이름 :" + name); 20 out.println("<li> 주소 :" + address); 21 out.println("<br><br><a href=/postdata.html> 뒤로</a>"); 22 out.println("</body>"); 23 out.println("</html>"); 24 } 25 } 설명 -18-

7 public void dopost(httpservletrequest req, HttpServletResponse res) 8 throws ServletException, IOException { POST 방식인경우에는 dopost() 메소드를사용한다. 12 req.setcharacterencoding("ksc5601"); 13 String name = req.getparameter("name"); GetData.java 예제와동일한방법으로웹브라우저에서입력한데이터를얻을수있다. 결과 -19-