10장 URLConnection 클래스 홍창범 시스템 소프트웨어 연구실 System Software Lab.

Slides:



Advertisements
Similar presentations
HTTPS Packet Capture Tutorial
Advertisements

박승제 웹 애플리케이션 기술 박승제
Chap15 네트워킹 Section 1 : 네트워킹의 개요와 java.net 패키지 Section 2 : 인터넷 주소와 URL
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
자바네트워크 제2주 바이트 입출력 스트림, 필터 입출력 스트림 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원
네트워크 프로그래밍 및 실습.
CHAP 22. 블루투스.
제 22 장 HTTP 22.1 HTTP 트랜잭션 22.2 요청 메시지 22.3 응답 메시지 22.4 헤더 22.5 예제
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
10장 예외 Lab 10-1.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
자바 서버 API와 서블릿 데이타베이스 실험실 이찬섭, 박용문.
5 익셉션 처리.
PHP입문 Izayoi 김조흔.
Chap11 네트워킹 11.1 네트워킹의 개요와 java.net 패키지 11.2 인터넷 주소와 URL 11.3 TCP 소켓
웹 서버 동작 HTTP 클라이언트가 서버와 대화하는 방법과 데이터를 서버에서 클라이언트로 전송 하는 방법을 정의한 프로토콜
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
웹 프로토콜과 로그의 이해 ★ 웹 프로토콜 ★ 통신 절차 ★ HTTP Request ★ HTTP Response.
Chapter 02 웹의 이해.
Lesson 5. 레퍼런스 데이터형.
forms 객체 입력상자 체크상자, 라디오 버튼 목록상자
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
명품 JAVA Programming 제 16 장 네트워크.
명품 JAVA Programming 제 16 장 네트워크.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
TCP/IP Socket Programming…
Network Programming(1)
제 01 장 인터넷 프로그래밍 개요 학기 인터넷비즈니스과 강 환수 교수.
12. 컨텐트 핸들러 임정목 국중옥 컴퓨터 네트워크 실험실.
8장 서버 소켓 프로그래밍 언어 실험실 석사 3학기 김성중.
15장 네트워킹 15.1 네트워킹의 개요와 java.net 패키지 15.2 인터넷 주소와 URL 15.3 TCP 소켓
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
C#.
JDBC (Java Database Connectivity)
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
Method & library.
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
24장. 파일 입출력.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
MAIL CLIENT 김창우 윤성훈 이경재.
자바 5.0 프로그래밍.
Power Java 제11장 상속.
12장 쿠키와 세션 이장에서 배울 내용 : 쿠키와 세션은 웹 페이지 간에 정보를 유지할 때 사용된다. 쿠키와 세션은 사용되는 형태가 비슷하나, 쿠키는 웹 브라우저(클라이언트) 쪽에 저장되고, 세션은 웹 서버 쪽에 저장된다. 이 번장에서는 이들에 대해 학습한다.
JA A V W. 06.
8장 네트워크.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
웹(WWW).
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
Introduction to JSP & Servlet
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
JSP Programming with a Workbook
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
MIDP 네트워크 프로그래밍 ps lab 김윤경.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
JSP Programming with a Workbook
20 XMLHttpRequest.
Presentation transcript:

10장 URLConnection 클래스 홍창범 시스템 소프트웨어 연구실 System Software Lab.

URLConnection 클래스 - URLConnection열기 System Software Lab. 목 차 URLConnection 클래스 - URLConnection열기 - 서버로부터 데이터를 가져오는 메소드 - 헤더의 구문 분석 - 필드와 관련 메소드 유용한 프로그램 - HTTP 연결을 통한 이진 데이터 다운로드하기 - 폼 데이터를 POST 방식으로 전송하기

URLConnection 클래스 URLConnection 클래스 - URL보다 서버와의 대화에 대해서 더 많이 제어. System Software Lab. URLConnection 클래스 URLConnection 클래스 URL에 의하여 지정되는 자원에 대한 활성화된 연결을 나타내는 추상클래스 - URL보다 서버와의 대화에 대해서 더 많이 제어. - URLStreamHandler 클래스를 포함하는 프로토콜 핸들러 메커니즘의 일부

System Software Lab. URLConnection 열기 Public URLConnection openConnection() throws IOException 로컬 호스트와 원격 호스트간 데이터가 이동할수있는 실질적 연결 생성 >> 예제 URL u; URLConnection uc; try { URL u = new URL("http://www.ora.com"); URLConnection uc = u.openConnection(); }

서버로부터 데이터를 가져오는 메소드들 Public abstract void connect() throws IOException System Software Lab. 서버로부터 데이터를 가져오는 메소드들 Public abstract void connect() throws IOException 서버에 대해 연결을 해주는 추상 메소드 서버의 이름은 URLConnection의 생성자에게 인자로 넘겨진 후 이 클래스의 필드에 저장되어 있는 URL로부터 추출

서버로부터 데이터를 가져오는 메소드들 (계속) System Software Lab. 서버로부터 데이터를 가져오는 메소드들 (계속) Public Object getContent() throws IOException URL이 가리키는 데이터를 가져옴. 특정한 객체의 유형으로 변환(ASCII,HTML-inputStream/gif/jpg-imageProduce) MIME헤더의 content-type을 이용. 현재 이해되는 유형 text/html, image/gif, image/jpeg 가 있다.

서버로부터 데이터를 가져오는 메소드들(계속) System Software Lab. 서버로부터 데이터를 가져오는 메소드들(계속) FileInputStream LineNumberInputStream PipedInputStream DataInputStream FilterInputStream BufferInnputStream InputStream ByteArrayInputStream PushbackInputStream SequenceInputStream StringBufferInputStream ObjectInputStream FileOutputStream PipeOutputStream DataOutputStream OutputStream FilterOutputStream BufferedOutputStream ByteArrayOutputStream PushbackOutputStream ObjectOutputStream [Java.io 패키지의 입출력 스트림클래스들의 계층구조]

서버로부터 데이터를 가져오는 메소드들 (계속) Public InputStream getInputStream() - URLConnection 객체를 생성하고 그 객체에 대한 입력 스트림을 구한다. >>예제 uc = u.openConnection(); DataInputStream theHTML = new DataInputStream(uc.getInputStream()); Try{ while ((thisLine = theHTML.readLine()) != null) { System.out.println(thisLine); } URLConnection객체생성 생성된 객체에 대한 입력스트림을 구한다. >> 실행결과 %java viewsource2 http://www.hannam.ac.kr <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <title>한남대학교</title> ~ </html> System Software Lab.

서버로부터 데이터를 가져오는 메소드들 (계속) Public OutputStream getOutputStream() - URLConnection 객체를 생성하고 그 객체에 대한 출력스트림(Output Stream:서버에 전 송할 데이터를 쓸 수 있는)을 구한다. - URLConnection은 기본적으로 출력을 지원하지 않느다. - 출력스트림을 요청하기 전에 setDoOutput()을 호출해야 한다. >>예제 try { URL u = new URL( http://www.somehost.com/cgi-bin/acgi); URLConnection uc = u.openConnection(); uc.setDoOutput(true); DataOutputStream dos = new DataOutputStream(uc.getOutputStream()); dos.writeBytes(“Here is some data”); dos.close(); } catch ( Exception e) { System.out.println(e); 생성된 객체에 대한 출력스트림을 구한다. System Software Lab.

헤더의 구문 분석 [Server] [Client] [Server 와 Client와의 통신] System Software Lab. 헤더의 구문 분석 [Server] [Client] 수신한 Request 메세지 분석 Web 페이지를 요구하는 HTTP Request 메세지 요구된 Web 페이지를 포함하는 HTTP Response 메시지 생성 Request-Line General-Header Request-Header Entity-Header CRLF Entity-Body Status-Line General-Header Response-Header Entity-Header CRLF Entity-Body 전달된 페이지의 디스플레이 [Server 와 Client와의 통신] System Software Lab.

헤더의 구문 분석 (계속) System Software Lab. 일반 HTTP 헤더(General HTTP Header) Pragma 응답혹은 요청 연결선상의 수신인에게 적용되는 일종의 명령포함(no-cache) Date 응답 혹은 요청이 만들어진 날짜 시간 엔티티 HTTP 헤더(Entity HTTP Header) Content-Encoding 인코딩 방법 Content-Length 크기 Content-Type MIME타입 요청 HTTP 헤더(Request HTTP Header) From 전자우편주소 Accept 브라우저가 처리할수 있는 MIME타입목록 Accept-Encoding 인코팅방법 Accept-Language 언어 User_agent S/W이름 버전 Referer 요청 직전 보고 있던 웹페이지 Authorization 인증정보 If-Modified-Since 지정된 시각 이후 요청된 자원이 변경된 적이 없으면 에러 응답 HTTP 헤더(Response HTTP Header) Location URL이 가리켰던 위치 Server 서버정보 WWW-Authenticate 인증 방법

헤더의 구문 분석 (계속) [Response Header 의 예] System Software Lab. public String getContentType() Server Microsoft-IIS/5.0 syssw Made By Hong_chang_bum Cache-Control max-age=602938 Expires Thu, 25 May 2000 15:00:00 GMT Connection keep-alive Content-Location http://syssw/index.htm Date Thu, 18 May 2000 15:31:01 GMT Content-Type text/html Accept-Ranges bytes Last-Modified Wed, 17 May 2000 04:22:46 GMT ETag "1685808db7bfbf1:b47" Content-Length 213 public String getContentLength() public String getContentEncoding() public long getDate() public long getExpiration() public long LastModified()

헤더의 구문 분석 (계속) public String getContentType() System Software Lab. 헤더의 구문 분석 (계속) 1 public String getContentType() 데이터의 컨텐트 유형 반환 컨텐트 유형의 정보가 없을경우 null 반환 예) text/plain, image/gif, image/jpega (67Page 참고) 2 public String getContentLength() 컨텐트가 몇 바이트로 이루져 있는지를 알려준다. 헤더에 정보가 없을경우 –1을 반환 3 public String getContentEncoding() 컨텐트가 코드화된 방법을 반환 컨텐트가 코드화되지 않은 상태로 전송 되었다면 null 반환 코드화 방법 Base-64, quoted-printable

헤더의 구문 분석 (계속) public long getDate() public long getExpiration() System Software Lab. 헤더의 구문 분석 (계속) 4 public long getDate() 문서의 전송 날짜를 반환 public long getExpiration() 5 문서만기일을 반환 6 public long getLastModified() 문서의 최종 수정된 날짜를 반환

헤더의 구문 분석 (계속) >> 예제 for (int i=0; i < args.length; i++) { System Software Lab. 헤더의 구문 분석 (계속) >> 예제 for (int i=0; i < args.length; i++) { try { URL u = new URL(args[0]); URLConnection uc = u.openConnection(); System.out.println("Content-type: " + uc.getContentType()); System.out.println("Content-encoding: " + uc.getContentEncoding()); System.out.println("Date: " + new java.util.Date(uc.getDate())); System.out.println("Last modified: " + new java.util.Date(uc.getLastModified())); System.out.println("Expiration date: " + new java.util.Date(uc.getExpiration())); System.out.println("Content-length: " + uc.getContentLength()); } // end try

헤더의 구문 분석 (계속) >> 실행결과 System Software Lab. 헤더의 구문 분석 (계속) >> 실행결과 %java getMIMEHeader http://ce.hannam.ac.kr Content-type: text/html Content-encoding: null Date: Sat May 20 18:57:31 GMT+09:00 2000 Last modified: Thu Jan 01 09:00:00 GMT+09:00 1970 Expiration date: Thu Jan 01 09:00:00 GMT+09:00 1970 Content-length: -1

임의의 MIME 헤더 필드 값을 가져오기 인자로 넘겨진 name이라는 헤더 필드값을 반환 System Software Lab. 임의의 MIME 헤더 필드 값을 가져오기 public String getHeaderField(String name) 인자로 넘겨진 name이라는 헤더 필드값을 반환 uc.getHeaderField(“content-type”); uc.getHeadField(“content-encoding”); uc.getHeadField(“date”); uc.getHeadField(“expires”);

임의의 MIME 헤더 필드 값을 가져오기 public String getHeaderFieldKey(int n) System Software Lab. 임의의 MIME 헤더 필드 값을 가져오기 public String getHeaderFieldKey(int n) n번째 헤더의 필드키를 반환 String header5 = uc.getHeaderFieldKey(5);

System Software Lab. 임의의 MIME 헤더 필드 값을 가져오기 public long getHeaderFieldDate(String name, long default) name이 가리키는 헤더 필드값을 가져와서 문자열로된 값을 long으로 변환 uc.getHeaderFieldData(“expires” , -1); uc.getHeaderFieldData(“last-modification”, -1); uc.getHeaderFieldData(“date”, -1);

System Software Lab. 임의의 MIME 헤더 필드 값을 가져오기 public String getHeaderFieldInt(String name, int default) name의 헤더 필드의 값을 가져와 int로 변환 후 반환 int cl = uc.getHeaderFieldInt(“content-length”, -1);

임의의 MIME 헤더 필드 값을 가져오기 (계속) System Software Lab. 임의의 MIME 헤더 필드 값을 가져오기 (계속) >>예제 for (int i=0; i < args.length; i++) { try { u = new URL(args[i]); uc = u.openConnection(); for (int j = 1; ; j++) { header = uc.getHeaderField(j); if (header == null) break; System.out.println(uc.getHeaderFieldKey(j) + " " + header); } // end for } // end try >>결과 %java printMIMEHeader http://ce.hannam.ac.kr Date Thu, 01 Jun 2000 02:25:58 GMT Server Apache/1.3.9 (Unix) PHP/3.0.12 Connection close Content-Type text/html

MIME 유형 알아내기 URL에서 파일이름 부분의 확장자를 기초로 하여 컨텐트 유형을 추측해낸다. System Software Lab. MIME 유형 알아내기 protected static String guessContentTypeFromName(String name) URL에서 파일이름 부분의 확장자를 기초로 하여 컨텐트 유형을 추측해낸다. 확장자는 대소문자를 구별한다. 예) .dvi application/x-dvi .zip application/zip .tar application/x-tar .gif image/gif

MIME 유형 알아내기 (계속) Inputstream의 최초 6바이트를 읽어 컨텐트 유형을 추측한다. 예) System Software Lab. MIME 유형 알아내기 (계속) static protected String guessContentTypeFromStream(InputStream is) Inputstream의 최초 6바이트를 읽어 컨텐트 유형을 추측한다. 예) GIF8 image/gif #def image/x-bitmap <! text/html <html> text/html

System Software Lab. RequestProperty 메소드들 URLConnection에서는 아무런 일도 하지 않고, 해시테이블 조회 클래스 구현시 치환하게 된다. public String getRequestProperty(String property_name) 치환하게되면, 주어진 속성의 값을 문자열로 반환 public static void setDefaultRequestProperty(String property_name, String property_value) 치환하게되면, 주어진 속성에 대해 기본값을 설정 public static void setRequestProperty(String property_name, String property_value) 치환하게되면, 주어진 속성의 값을 설정 public static void getDefaultRequestProperty(String property_name) 치환하게되면, 할당된 초기값을 문자열로서 주어진 속성으로 반환되어야 한다.

필드와 관련 메소드들 try { u = new URL("http://www.ora.com/"); System Software Lab. 필드와 관련 메소드들 protected URL url public URL getURL() URLConnection이 연결하고자 하는 URL을 가리킨다. try { u = new URL("http://www.ora.com/"); uc = u.openConnection(); System.out.println(uc.getURL()); } catch (IOException e) { System.err.println(e); >>결과 %java printURLConnection http://www.ora.com

필드와 관련 메소드들 (계속) protected boolean connected System Software Lab. 필드와 관련 메소드들 (계속) protected boolean connected 연결이 열려 있으면 true, 닫혀 있으면 false. URLConnection은 생성되어도 연결되어 있지 않은 상태이므로 기본적으로 false이다.

필드와 관련 메소드들 (계속) protected boolean allowUserInteraction System Software Lab. 필드와 관련 메소드들 (계속) protected boolean allowUserInteraction public void setAllowUserInteraction(boolean allowuserinteraction) public boolen getAllowUserInteraction() 사용자와의 대화가 가능한지를 지정한다. try { u = new URL("http://www.ora.com"); handler = new myHttpHandler(); uc = handler.openConnection(u); if (!uc.getAllowUserInteraction()) { uc.setAllowUserInteraction(true); } catch (MalformedURLException e) { System.err.println(e);

필드와 관련 메소드들 (계속) private static boolean defaultAllowUserInteraction System Software Lab. 필드와 관련 메소드들 (계속) private static boolean defaultAllowUserInteraction public static void setDefaultAllowUserInteraction (boolean defaultAllowUserInteraction) public static boolean getDefaultAllowUserInteraction() 기본적으로 사용자와의 대화가 가능한지를 지정한다. public static void main(String[ ] args) { if (!URLConnection.getDefaultAllowUserInteraction()) { URLConnection.getDefaultAllowUserInteraction(true) ; }

필드와 관련 메소드들 (계속) protected boolean doInput System Software Lab. 필드와 관련 메소드들 (계속) protected boolean doInput public void setDoInput(boolean doinput) public boolean getDoInput() try { u = new URL("http://www.ora.com"); uc = u.openConnection(); if (!uc.getDoInput()) { uc.setDoInput(true); } catch (IOException e) { System.err.println(e); 클라이언트 프로그램으로의 데이터 입력이 가능한지 체크후 능하도록 설정

필드와 관련 메소드들 (계속) protected boolean doOutput System Software Lab. 필드와 관련 메소드들 (계속) protected boolean doOutput public void setDoInput(boolean dooutput) public boolean getDoOutput() try { u = new URL("http://www.ora.com"); uc = u.openConnection(); if (!uc.getDoOutput()) { uc.setDoOutput(true); } catch (IOException e) { System.err.println(e); 서버로 부터 출력작업이 가능한지 체크후 가능하도록 설정

필드와 관련 메소드들 (계속) protected long IfModifiedSince System Software Lab. 필드와 관련 메소드들 (계속) protected long IfModifiedSince public void setIfModifiedSince(long ifmodifiedsince) public long getIfModifiedSince() try { u = new URL("http://www.ora.com"); uc = u.openConnection(); System.out.println("Will retrieve file if it's been modified since " + new Date(uc.getIfModifiedSince()).toLocaleString()); uc.setIfModifiedSince(Date.UTC(today.getYear(), today.getMonth(), today.getDate() - 1, today.getHours(), today.getMinutes(), today.getSeconds())); } >>결과 %java last24 Will retrieve file if it's been modified since 1970-01-01 오전 9:00:00 Will retrieve file if it's been modified since 2000-05-28 오전 10:53:13 %date 2000-05-29

필드와 관련 메소드들 (계속) pritected static boolean userCaches System Software Lab. 필드와 관련 메소드들 (계속) pritected static boolean userCaches public static void setUseCaches(boolean usecaches) public static boolean getUseCaches() 로컬 캐시의 사용 여부 결정 try { u = new URL("http://www.ora.com"); uc = u.openConnection(); if (uc.getUseCaches()) { uc.setUseCaches(false); } 캐시기능의 정지

필드와 관련 메소드들 (계속) pritected static boolean defalutUserCaches System Software Lab. 필드와 관련 메소드들 (계속) pritected static boolean defalutUserCaches public static void setDefaultUseCaches(boolean defaultusecaches) public static boolean getDefaultUseCaches() 기본적으로 캐시 기능의 사용여부 선택 try { URL u = new URL("http://www.ora.com/"); URLConnection uc = u.openConnection(); if (uc.getDefaultUseCaches()) { uc.setDefaultUseCaches(false); } catch (IOException e) { System.err.println(e); 기본적으로 캐시기능 정지

필드와 관련 메소드들 (계속) static ContentHandlerFactory factory System Software Lab. 필드와 관련 메소드들 (계속) static ContentHandlerFactory factory public static synchronized void setContentHandlerFactory(ContentHandlerFactory fac) : 특정한 MIME 유형에 적합한 컨텐트 핸들러의 인스턴스 생성 text/html , image/gif파일등을 처리할 수 있는 컨텐트 핸들러를 찾을 수 있도록 알려준다.

유용한 프로그램들 (HTTP 연결을 통해 이진 데이터를 다운로드하기) System Software Lab. 유용한 프로그램들 (HTTP 연결을 통해 이진 데이터를 다운로드하기) public static void saveBinaryFile(URL u) { int bfr = 128; try { URLConnection uc = u.openConnection(); String ct = uc.getContentType(); int cl = uc.getContentLength(); if (ct.startsWith("text/") || cl == -1 ) { System.err.println("This is not a binary file."); return; } InputStream theImage = uc.getInputStream(); byte[] b = new byte[cl]; int bytesread = 0; int offset = 0; while (bytesread >= 0) { bytesread = theImage.read(b, offset, bfr); if (bytesread == -1) break; offset += bytesread; if (offset != cl) { System.err.println("Error: Only read " + offset + " bytes"); System.err.println("Expected " + cl + " bytes"); String theFile = u.getFile(); theFile = theFile.substring(theFile.lastIndexOf('/') + 1); FileOutputStream fout = new FileOutputStream(theFile); fout.write(b); } // end try catch (Exception e) { System.err.println(e); 연결확보 입력스트림을 구한다. 배열을 읽어들인다. 출력스트림을 구한다. 파일로 쓰여진다.

유용한 프로그램들 (폼 데이터를 POST 방식으로 전송하기) System Software Lab. 유용한 프로그램들 (폼 데이터를 POST 방식으로 전송하기) void submitData() { String query = "name=" + URLEncoder.encode("Elliotte Rusty Harold"); query += "&"; query += "email=" + URLEncoder.encode("elharo@sunsite.unc.edu"); int cl = query.length(); try { URLConnection uc = u.openConnection(); uc.setDoOutput(true); uc.setDoInput(true); uc.setAllowUserInteraction(false); DataOutputStream dos = new DataOutputStream(uc.getOutputStream()); dos.writeBytes(query); dos.close(); DataInputStream dis = new DataInputStream(uc.getInputStream()); String nextline; while((nextline = dis.readLine()) != null) { System.out.println(nextline); 연결확보 생성된 객체에 대한 출력스트림을 구한다. 데이터를 전송한다. 생성된 객체에 대한 입력스트림을 구한다. 서버로 부터 응답을 읽는다. 출력된다.