웹 개발자를 위한 서블릿/jsp - niceilm.tistory.com · 웹개발자를위한서블릿 판...

19
웹 개발자를 위한 서블릿 최종명 /JSP - 2 E-mail: [email protected] -1- 와 서블릿 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), 받아들일 문서 포맷 등의 정보를 옵션으로 웹 서버에 전달한다 모든 헤더 정보들은 한 . 줄에 하나씩 기술되며 헤더 이름과 값으로 구성된다 헤더 정보의 끝에는 공백 라인을 , . 추가해서 헤더의 끝임을 알려준다.

Upload: others

Post on 29-Oct-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 1 -

와 서블릿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),

받아들일 문서 포맷 등의 정보를 옵션으로 웹 서버에 전달한다 모든 헤더 정보들은 한.

줄에 하나씩 기술되며 헤더 이름과 값으로 구성된다 헤더 정보의 끝에는 공백 라인을, .

추가해서 헤더의 끝임을 알려준다.

Page 2: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 2 -

예:

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 .

Page 3: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 3 -

예:

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, 09 Apr 2002 07:15:18 GMT

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 ......

Page 4: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 4 -

실습

텔넷을 이용해서 자카르타 톰캣에 연결하는 실습을 다음과 같이 수행하라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)이라고도 한다 쿼리 스.

트링은 문자 다음부터 이름 값 의 형태로 되어 있는데 이것이 여러 번 반복될 때는 구? “ = ” ,

별하기 위해서 문자를 사용한다& .

Page 5: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 5 -

예:

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

Page 6: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 6 -

태그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: . .∙

Page 7: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 7 -

클릭할 수 있는 버튼을 사용한다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 .∙

Page 8: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 8 -

다음은 많이 사용되는 태그의 사용법을 보여준다 태그는 속성에 따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>

Page 9: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 9 -

태그 사이에 있는 글은 기본 텍스트로 화면에 나타난다 는</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>

Page 10: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 10 -

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>

결과

Page 11: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 11 -

서블릿 폼 데이터 처리2.3 (FORM)

메소드2.3.1 GET

태그 형태1. FORM

의 데이터를 처리하기 위해서는 태그를 가지는 문서와 자료를HTML FORM FORM HTML

처리할 수 있는 나 서블릿 프로그램이 필요하다 의 태그는 다음과 같은CGI . HTML FORM

형태로 사용될 수 있다.

형태 을 모두 기술하는 경우: URL

<FORM ACTION=http://host:port/servlet/ServletName METHOD=GET>

<INPUT TYPE=TEXT ...>

........

........

</FORM>

형태 상대 을 기술하는 경우: URL

<FORM ACTION=/servlet/ServletName METHOD=GET>

<INPUT TYPE=TEXT ...>

........

........

</FORM>

부분에는 다음과 같은 값들이 올 수 있지만 대부분의 경우 과 만 사METHOD , GET POST

용된다 이것은 들 중에서 는 에서. METHOD PUT, DELETE, TRACE, OPTIONS HTTP/1.1

Page 12: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 12 -

새로이 지원되도록 만들어진 것으로 아직 많은 웹 서버들이 이 기능들을 지원하지 않고 있

기 때문이다.

가장 많이 사용되는 것으로 사이트 방문은 모두 방식을 사용한다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 .

이란 서블릿 이름 다음에 문자로 시작하는 문자열을 의미한다 쿼리 스트링은 이름 값? . " = "

의 쌍으로 구성되어 있으며 여러 개의 쌍이 나올 때는 문자를 이용해서 구별한다 쿼리, & .

Page 13: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 13 -

스트링에 들어가는 문자는 특수 문자 한글 빈칸 등 인 경우에 문자로 시작하는 진( , , % ) % 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

사용하는 이름이 동일해야 올바른 값을 얻을 수 있다 이 이름들은 대소문자를 구별한다. .

그림 2 과 서블릿. HTML

........

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");

........

최종명

서울시 동작구

전송 취소

이 름

주 소

name

addr

GetData.html

GetData.java

Page 14: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 14 -

다음 은 방식을 이용해서 사용자의 이름과 주소를 서블릿에 전달하는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

Page 15: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 15 -

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() .

결과

Page 16: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 16 -

의 에서 가 인 경우에는 웹 브라우저의 주소 부분에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 .

Page 17: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 17 -

데이터의 이름이나 값이 의 끝에 붙지 않는다 이러한 장점 때문에 게시판이나 방명록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>

결과

Page 18: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 18 -

다음 는 사용자가 입력한 이름과 주소를 출력하는 예제이다 방식이기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 }

설명

Page 19: 웹 개발자를 위한 서블릿/JSP - niceilm.tistory.com · 웹개발자를위한서블릿 판 최종명/JSP-2-1- E-mail:choijm@dreamwiz.com 2.HTTP와서블릿 2.1HTTP이해하기

웹 개발자를 위한 서블릿 판 최종명/JSP - 2

E-mail: [email protected] 19 -

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 .

결과