서블릿이나 기타 서버사이드 언어와 데이터를 주고 받을 때 실행할 메서드나 변수와 값을 클라이언트에서 넘겨주어야 하는 경우가 자주 발생한다. 역시 이러한 때에도 URLRequest()와 URLVariables() , URLLoader() 클래스를 이용한다.

데이터를 보내고 싶을 때는 URLVariables를 이용한다. URLVariables에 필요한 변수와 메소드를 설정한 다음
URLRequest의 data로 설정하여 URLLoader를 통해 load()를 실행한다.

[ 접근할 서버 경로 설정 ]
var request:URLRequest = new URLRequest("서버 사이드 url")

[ 서버에서 필요한 정보설정 ]
var variables:URLVariables = new URLVariables();
variables.method = "정의된 메소드 ex) checkID , saveData..";
variables.userId = "ID" //서버쪽에서 필요한 정보
variables.age = "30" //서버쪽에서 필요한 정보

[ URLRequest 객체에 데이터 설정 ]
request.data = variables;

[ 서버로 접근 ]
loader.load( request );
Posted by 버터백통
바이너리 등의 데이터를 받는 즉시 활용하고 싶다. 가령 ASZip과 같이 받은 양만큼 압축을 풀어서 데이터를 활용하거나 큰 이미지를 받는데 일부를 받는 즉시 화면에 과정을 그리고 싶다면 URLLoader() 클래스 보다는 URLStream()클래스를 사용해야 한다.

URLStream 클래스는 URL 다운로드에 대한 Low Level의 데이터 접근을 제공한다. 이러한 데이터는 다운로드 즉시 사용이 가능하며 URLLoader()에서 처럼 전부를 다운받을 때 까지 기다릴 필요가 없다. 또한 다운로드중에 스트림을 닫을 수 있어 사용자의 거부가 발생하면 즉시 처리할 수 있다.


[ 속성 ]

bytesAvailable : uint

[read-only] 입력 버퍼에서 읽을 수 있는 데이터 바이트 수를 반환합니다.

connected : Boolean

[read-only] URLStream 객체가 현재 연결된 상태인지 여부를 나타냅니다.

endian : String

데이터의 바이트 순서를 나타내며, BIG_ENDIAN 또는 LITTLE_ENDIAN 값을 가질 수 있습니다.

objectEncoding : uint

객체를 쓰거나 읽을 때 사용되는 AMF의 버전을 제어합니다.



[ 메서드 ]

close():void

스트림을 즉시 닫고 다운로드 작업을 취소합니다.

load(request:URLRequest):void

요청 매개 변수에 정의된 URL을 다운로드하기 시작합니다.

readBoolean():Boolean

스트림에서 부울 값을 읽습니다.

readByte():int

스트림에서 부호 있는 바이트를 읽습니다.

readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

스트림에서 길이 바이트의 데이터를 읽습니다.

readDouble():Number

스트림에서 IEEE 754 배정밀도 부동 소수점 숫자를 읽습니다.

readFloat():Number

스트림에서 IEEE 754 단정밀도 부동 소수점 숫자를 읽습니다.

readInt():int

스트림에서 부호 있는 32비트 정수를 읽습니다.

readMultiByte(length:uint, charSet:String):String

지정된 문자 세트를 사용하여 바이트 스트림에서 지정된 길이의 멀티바이트 문자열을 읽습니다.

readObject():*

소켓에서 AMF로 인코딩된 객체를 읽습니다.

readShort():int

스트림에서 부호 있는 16비트 정수를 읽습니다.

readUnsignedByte():uint

스트림에서 부호 없는 바이트를 읽습니다.

readUnsignedInt():uint

스트림에서 부호 없는 32비트 정수를 읽습니다.

readUnsignedShort():uint

스트림에서 부호 없는 16비트 정수를 읽습니다.

readUTF():String

스트림으로부터 UTF-8 문자열을 읽습니다.

readUTFBytes(length:uint):String

스트림에서 길이 UTF-8 바이트 시퀀스를 읽고 문자열을 반환합니다.


[ 이벤트 ]

complete

데이터가 성공적으로 로드되면 전달됩니다.

httpStatus

URLStream.load() 호출로 HTTP를 통해 데이터 액세스를 시도하고 현재의 Flash Player에서 이 요청에 대한 상태 코드를 감지 및 반환할 수 있을 때 전달됩니다.

ioError

로드 작업을 실패하게 만드는 입력/출력 오류가 발생할 때 전달됩니다.

open

로드 작업이 시작될 때 전달됩니다.

progress

다운로드 작업이 진행되어 데이터가 수신될 때 전달됩니다.

securityError

URLStream.load() 호출로 보안 샌드박스 외부의 서버에서 데이터 로드를 시도할 때 전달됩니다.


방법은 URLLoader()와 같다. URLRequest()를 통하여 접근할 데이터 url을 설정하고 URLStream.load() 메서드를 통해 데이터를 수신받으며 이벤트는 ProgressEvent이벤트를 사용한다.

Posted by 버터백통
데이터 원본의 텍스트블럭을 가져오기를 원한다면 사실 방법은 쉽다.
URLLoader의 데이터 포맷을 TEXT로 설정하면 된다.(사실 기본값이므로 아무 설정하지 않으면 블럭단위로 들어오게 된다.) 과거 onLoad나 onData와 달리 URLLoader는 데이터의 형식에 구애 받지 않는다. 단지 Event를 통해 도착이 완료되었다 정도만 알려주고 데이터를 어떻게 활용할지를 dataFormat를 사용하여 설정하게 된다.
URLLoader.dataFormat = URLLoaderDataFormat.TEXT

dataFormat이 TEXT로 설정하면 html의 모든 태그나 xml또는 TEXT문서 등 URL-encoded에 관계없이 TEXT로 인식한다.
Posted by 버터백통
Loader나 URLLoader는 혼자서 서버에 접근할 수 없다. 따라서 서버에 문을 두드리기(요청) 위해서는 요청 전문 객체인 URLRequest를 사용하여 접근할 서버URL이나 파라미터를 설정한다.

URLRequest에는 url이라는 속성이 있다. 이곳에 접근할 서버주소를 설정하고
URLLoader의 load()메서드를 통해 서버에 접근하게 된다.
URLRequest.url = "server url"
URLLoader.load( URLRequest Delegate Variable )



가져올 데이터에 따라 URLLoaderDataFormat을 설정한다. 기본은 Text로 설정되어있지만 URL - encoded 된 데이터는 변수그룹으로 되어있는 것이 대부분이기에
URLLoader.dataFormat = URLLoaderDataFormat.VARIABLES
로 설정하면 사용하기 편하다.

가져온 데이터의 접근은 비교적 쉽다. 대부분의 접근방식으로 가져다 사용할 수 있기 때문이다.
trace( "URLLoader( e.target ).data :" , URLLoader( e.target ).data );
trace( "urlLoad.data                    :" , urlLoad.data );
trace( "urlLoad.data['someText']   :" , urlLoad.data["someText"] );
trace( "urlLoad.data.someNumber   :" , urlLoad.data.someNumber );


또는 아래처럼 연관배열 형태로 값을 가져올 수 있다.
 for( var property:String in urlLoad.data ){
    trace( "for in : " ,  property + " >> " + urlLoad.data[property] )
}
단 위처럼 가져오기 위해서는 URL - encoded의 규칙을 엄격하게 지켜야 한다.

만약 URLLoaderDataFormat.VARIABLES로 설정하지 않았다면 URLVariables를 통해 받은 데이터를
변수로 설정할 수 있다.
var vars:URLVariables = new URLVariables( URLLoader.data );
이후 필요한 데이터를 참조해서 사용하면 된다.
trace("vars : " , vars);
trace("someText : " , vars.someText);
trace("someNumber : " , vars.someNumber);






Posted by 버터백통
AS3 에서 Data통신은 URLLoader()를 사용한다. 텍스트 , 바이너리 데이터 , URL-encoded 등의 데이터를 처리할 수 있다.(이미지 데이터 는 Loader를 사용)

URLLoader는 URLRequestURLVariables 또는 URLStream등과 함께 사용하며, 굉장히 유연하면서도 강력한 기능을 발휘 한다.

[ 속성 ]

bytesLoaded : uint = 0

로드 작업 중 지금까지 로드한 바이트 수를 나타냅니다.

bytesTotal : uint = 0

다운로드한 데이터의 총 바이트 수를 나타냅니다.

data : *

로드 작업으로 수신된 데이터입니다.

dataFormat : String = "text"

다운로드하는 데이터를 텍스트(URLLoaderDataFormat.TEXT), 원시 이진 데이터(URLLoaderDataFormat.BINARY) 또는 URL 인코딩된 변수(URLLoaderDataFormat.VARIABLES) 중 어떤 형식으로 수신할 것인지 제어합니다.

 

 

 [ 메서드 ]

URLLoader(request:URLRequest = null)

URLLoader 객체를 만듭니다.

close():void

진행 중인 로드 작업을 닫습니다.

load(request:URLRequest):void

지정된 URL에서 데이터를 보내거나 로드합니다.

 
[ 이벤트 ]
 

complete

수신된 모든 데이터가 디코딩된 후 URLLoader 객체의 data 속성에 배치되면 전달됩니다.

httpStatus

URLLoader.load() 호출로 HTTP를 통해 데이터 액세스를 시도하고 현재의 Flash Player 환경에서 이 요청에 대한 상태 코드를 감지 및 반환할 수 있을 때 전달됩니다.

ioError

URLLoader.load() 호출로 치명적인 오류가 발생하여 다운로드가 중단되면 전달됩니다.

open

URLLoader.load() 메서드 호출에 이어 다운로드 작업이 시작될 때 전달됩니다.

progress

다운로드 작업이 진행되어 데이터가 수신될 때 전달됩니다.

securityError

URLLoader.load() 호출로 보안 샌드박스 외부의 서버로부터 데이터 로드를 시도할 때 전달됩니다.

 
* 참고 )
만약 받고자 하는 데이터가 URL-encoded데이터인 경우 다음과 같은 규칙을 지켜야 한다.
- 각 변수와 값은 공백없이 연결되어야 한다.
- 불러온 문자열은 언제나 문자열로 취급한다. 따라서 ""를 붙일 필요가 없다.
- 하나 이상의 변수와 값이 있으면 & 를 사용하여 묶어야 한다.
- 값사이 공백은 %20이 아닌 +로 연결한다.(보다 안정적이다.)
- 16진수 이스케이프 문자를 사용해야 한다. (L's book -> L%27s+book)







Posted by 버터백통