------------------------------------------------------------------------------------------------
출처: http://mainia.tistory.com/569
------------------------------------------------------------------------------------------------
개발환경 : JDK 1.5, window XP |
여기에서 설명할 HttpClient 는 안드로이드 API 에 포함된 org.apache.http.client.HttpClient
가 아니다. org.apache.commons.httpclient.HttpClient 를 사용한다. 흔히 웹어플리케이션에서
가장 많이 쓰이며 Http 프로토콜을 사용해 네트워크로 데이터 전송하고 받는 역할을 한다.
HTTP 관련 아파치 사이트는 다음과 같다. http://hc.apache.org/httpclient-3.x/tutorial.html
HttpClient 의 주요 기능은 다음과 같다.
@ HTTP 버전 1.0, 1.1 을 사용한다.
@ HTTP 에서 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE 등 모든 것이 사용 가능하다.
@ 커뮤니케이션시 HTTPS 와 HTTP 프록시를 통해 데이터를 주고 받을수 있다.
@ 쿠키의 제어가 가능하다.
(1) POST 로 전송하는 간단한 예제 |
이 예제는 POST 로 데이터를 전송하는 간단한 내용이다.
파라미터로 데이터를 넘기며 리턴받은 데이터를 BufferedReader 로 한줄씩 읽어 들인다.
그리고 마지막에는 releaseConncetion() 호출하여 연결을 끊어준다 .
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PostMethodExample {
public static void main(String args[]) {
HttpClient client = new HttpClient();
client.getParams().setParameter("http.useragent", "Test Client");
BufferedReader br = null;
PostMethod method = new PostMethod("http://search.yahoo.com/search");
method.addParameter("p", "\"java2s\"");
try{
int returnCode = client.executeMethod(method);
if(returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
System.err.println("The Post method is not implemented by this URI");
// still consume the response body
method.getResponseBodyAsString();
} else {
br = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));
String readLine;
while(((readLine = br.readLine()) != null)) {
System.err.println(readLine);
}
}
} catch (Exception e) {
System.err.println(e);
} finally {
method.releaseConnection();
if(br != null) try { br.close(); } catch (Exception fe) {}
}
}
}
(2) GET 메소드를 사용해 가장 일반적인 HTTP 데이터 전송 |
이 예제는 GET 메소드를 사용해 데이터를 보내고 요청하는 예제이다.
이것을 통해 HTTP 프로토콜에서 request 와 response 를 얼마나 쉽게 사용할수 있는지
알 수 있다. HTTPClient 는 유명한 웹 단위테스트 프레임웍인 HTMLUnit 에서도 사용되고 있다.
그리고 상세한 메뉴얼은 자카르타 홈페이지에서 참고 하도록 한다.
HttpClient 에서는 프로그램에서 어떻게 쿠키를 효과적으로 관리할수 있을지에 대한 방법을 제공한다. 아래 예제는 쿠키정보를 requst 로 서버에 보내고 있으며 JSP 페이지에서 쿠키 세부정보에 대해 리스트를 보여준다.
참고로 HttpClient 에서는 org.apache.commons.httpclient.Cookie 클래스를 쓰며
JSP 나 Servlet 에서는 javax.servlet.http.Cookie 클래스를 사용한다.
(4) 파일 업로드를 위한 HttpClient 사용 |
이번에는 2가지 파일 업로드 예제이다. 첫번째는 일반적인 HTML form 에서 파일컨트롤을 이용해
업로드 하는 방법이며 HttpClient 를 사용하지 않았다. 2번쨰는 HttpClient 를 이용해 업로드 하는
java application 이다. 두 방법 모두 ProcessFileUpload.jsp를 이용한다
(1) 일반적인 HTML 폼을 이용한 파일 업로드
UploadFiles.html
<HTML> <HEAD></HEAD> |
ProcessFileUpload.jsp
<%@ page contentType="text/html;charset=windows-1252"%> <%@ page import="org.apache.commons.fileupload.DiskFileUpload"%> <%@ page import="org.apache.commons.fileupload.FileItem"%> <%@ page import="java.util.List"%> <%@ page import="java.util.Iterator"%> <%@ page import="java.io.File"%> <% System.out.println("Content Type ="+request.getContentType()); DiskFileUpload fu = new DiskFileUpload(); // If file size exceeds, a FileUploadException will be thrown fu.setSizeMax(1000000); List fileItems = fu.parseRequest(request); Iterator itr = fileItems.iterator(); while(itr.hasNext()) { FileItem fi = (FileItem)itr.next(); //Check if not form field so as to only handle the file inputs //else condition handles the submit button input if(!fi.isFormField()) { System.out.println("nNAME: "+fi.getName()); System.out.println("SIZE: "+fi.getSize()); //System.out.println(fi.getOutputStream().toString()); File fNew= new File(application.getRealPath("/"), fi.getName()); System.out.println(fNew.getAbsolutePath()); fi.write(fNew); } else { System.out.println("Field ="+fi.getFieldName()); } } %> <HTML> |
HTML 이 아닌 java application 에서 파일을 다중으로 업로드 할 때 사용되는 방식이다.
파일을 다중으로 올릴수 있도록 제공해주는 클래스는 org.apache.commons.httpclient.
methods.MultipartPostMethod 이다. 그리고 HttpClient 를 이용해 멀티폼 전송을 할 때
주로 참조하는 클래스들은 org.apache.commons.httpclient.methods.multipart 패키지에
존재한다.
위의 예제를 통해 HttpClient 와 FileUpload 컴퍼넌트를 어떻게 사용하는지 알았을 것이다. HttpClient 는 HTTP 프로토콜을 사용해 커뮤니케이션을 하고자 하는 어떤 프로그램에서도
손쉽게 사용할수 있다는 걸 알 수 있다.
좀더 세밀한 제어는 자카르타 홈페이지에 들어 매뉴얼을 참고하고 앞으로 진행할 프로젝트 등에
유용하게 사용하기 바란다
'IT_Programming > JSP · Servlet' 카테고리의 다른 글
Java Open Source HttpClient and FileUpload (0) | 2011.11.27 |
---|---|
[펌] Tomcat 5.5 에서 JNDI Datasource 사용하기 (0) | 2009.04.28 |
[펌] 서블렛 + JDBC 연동시 코딩 고려사항 2 (0) | 2009.01.30 |
[펌] 서블릿+JDBC 사용시 주의 사항 1 (0) | 2009.01.30 |
[펌] JSP 에서 Referer 처리 (0) | 2009.01.30 |