자바(Java)/JAVA 2EE

POST 방식의 데이터 전송 과정

본클라쓰 2009. 11. 10. 10:01

POST 방식은 요청 바디에 데이터를 포함하여 전송합니다. 이 때 전송되는 방식은 applicatin/x-www-form-urlencoded 방식과 multipart/form-data 형식 두 가지로 구분됩니다.

 

 

1. application/x-www-form-urlencoded 방식

 

일반적인 파라미터만 전송할 수 있습니다. 폼 태그를 사용하여 전송합니다.

 

<form method="post" action="데이터를 전송할 페이지">

    이름 : <input type="text" name="name"/><br/>

    나이 : <input type="text" name="age"/><br/>

    <input type="submit" value="전송"/> 

</form>

 

위와 같은 폼 데이터를 전송받아 출력하는 서블릿 코드입니다.

 

InputStream inputStream = null;
System.out.println("[" + request.getContentType() + "]");
  
try {
    inputStream = request.getInputStream();
    int data = -1;
   
    while ( ( data = inputStream.read() )!= -1 ) {
        System.out.print((char)data);
    }
   
   

} finally {
    if ( inputStream != null ) try { inputStream.close(); } catch (Exception e) {}
}

 

이 서블릿 코드로 파라미터를 전송하면 다음과 같은 결과를 출력합니다.

 

[application/x-www-form-urlencoded]
name=%C5%D7%BD%BA%C6%AE&age=%C5%D7%BD%BA%C6%AE

 

폼 태그의 method 속성값을 "post"로 주고 파라미터를 전송하면 application/x-www-form-urlencoded 방식으로 변경되어 파라미터가 전송됩니다. 이 때 파라미터는 일반적인 데이터값만 전송가능합니다.

 

 

2. multipart/form-data 방식

 

multipart/form-data 방식을 일반 파라미터와 파일을 함께 전송할 수 있습니다.

 

<form enctype="mulitpart/form-data" method="POST" action="index.jsp">

    이름 :  <input type="text" name="name"/><br/>

    파일 : <input type='file" name="fileName"/><br/>

    <input type="submit" value="전송"/>

</form>


위의 폼 데이터를 application/x-www-form-urlencoded 에서 작성한 폼 데이터의 내용을 출력하는 서블릿으로 보냈을 경우의 결과입니다.

 

[multipart/form-data; boundary=---------------------------7da13831303fc]
-----------------------------7da13831303fc
Content-Disposition: form-data; name="name"

?×½ºÆ®
-----------------------------7da13831303fc
Content-Disposition: form-data; name="fileName"; filename="D:\temp\photo2.gif"
Content-Type: image/gif

GIF89a_  .... 파일의 내용 ...;

-----------------------------7da13831303fc-- 


multipart/form-data 방식으로 데이터를 전송하며 일반 파라미터 영역과 파일 데이터를 같이 전송합니다. 이렇게 전송된 데이터를 서버의 CGI프로그램이 분석하여 파일을 저장합니다. 즉, 클라이언트가 헤더에 보낸 데이터를 분석하여 서버에 파일을 저장할 수 있는 것입니다.