°­ÁÂ

 ·Î±×ÀÎ  È¸¿ø°¡ÀÔ Category : Category

[À¥¼­¹ö¿ÍÀÇ ¸¸³² #6] SAX¸¦ ÀÌ¿ëÇØ¼­ XML µ¥ÀÌÅ͸¦ RecordSet À¸·Î ¹Þ±â
vidkid  2004-04-27 18:01:05, Á¶È¸ : 2,369, Ãßõ : 372
- Download #1 : sax2.zip (3.7 KB), Download : 65

[À¥¼­¹ö¿ÍÀÇ ¸¸³² #6] XML µ¥ÀÌÅ͸¦ RecordSet À¸·Î ¹Þ±â

¾È³çÇϼ¼¿ä.
vidkidÀÔ´Ï´Ù.

À̹ø °­Á´ ¼­¹ö¿¡¼­ µ¥ÀÌÅ͸¦ , ·Î ºÐ¸®Çؼ­ º¸³»´Â°Ô ¾Æ´Ï¶ó XML ÇüÅ·Πµ¥ÀÌÅ͸¦ º¸³»¸é
±×°ÍÀ» RecordSet À¸·Î ³Ö¾î º¸°Ú½À´Ï´Ù.
±âÁ¸¿¡ ÇÏ´ø ¹æ½Ä°ú ¹Ù·Î Àü °­Á¸¦ º¸¸é ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×·±µ¥ SAX ¿¡ ´ëÇØ¼­ Çì±ò¸®½Å ºÐµéÀÌ ÀÖÀ¸½Ç Å×´Ï..
¶Ç ÇϳªÀÇ SAX ¿¹Á¦°â ÇØ¼­.. ¸¸µé¾î º¸°Ú½À´Ï´Ù.

¿©±â¼­ ÇѰ¡Áö ¾Ë¾ÆµÎ½Ç °Å´Â XML ÆÄ¼­¸¦ ¼öÇàÇÒ¶§ ÆÄÀÏÀÌ ¾Æ´Ñ ¹®ÀÚ¿­À» ³Ö¾î Áشٴ °ÍÀÔ´Ï´Ù.

{xl.parse ...}

ÇÔ¼ö¿¡¼­ ¹Ù·Î Àü °­Á´ ÆÄÀÏÀÇ url À» ³Ö¾îÁá´Ù´Â ¾ê±âÁö¿ä..

ÀÚ¼¼ÇÑ ³»¿ëÀº °­Á¸¦ º¸¸é¼­ ¼³¸íÇϱâ·Î ÇϰڽÀ´Ï´Ù.


- µ¥ÀÌÅÍ ±¸Á¶ Á¤ÀÇ

action.do ÆÄÀÏ
-----------------------------------------------------------------------
<?xml version="1.0" encoding="euc-kr"?>
<RecordSet>
  <Fields>
    <Field name="mid" domain="String" />
    <Field name="mname" domain="String" />
    <Field name="mcodes" domain="String" />
  </Fields>

  <Record mid="hong1234" mname="È«±æµ¿" mcodes="123456-1234351" />
  <Record mid="cham1234" mname="Âü±â¸§" mcodes="222222-1234351" />
  <Record mid="ggae1234" mname="±ú¼Ò±Ý" mcodes="452312-1234351" />
  <Record mid="hongdukke" mname="È«µÎ±ú" mcodes="000000-1234351" />
</RecordSet>
-----------------------------------------------------------------------

¼­¹ö´Â À§¿Í °°Àº Çü½ÄÀÇ µ¥ÀÌÅ͸¦ Ŭ¶óÀÌ¾ðÆ®·Î º¸³À´Ï´Ù.
¿©±â¼­´Â ÆÄÀϷΠó¸®ÇßÀ¸¸ç À̸§Àº action.do ·Î Çß½À´Ï´Ù. ÀÚ¹Ù »ç¿ëÀÚ´Â Àͼ÷ÇϰÚÁÒ?

<RecordSet></RecordSet>

Àüü ·¹ÄÚµå¼ÂÀº À§ÀÇ RecordSet ű׿¡ ¾È¿¡ ÀÖ½À´Ï´Ù.

±×¸®°í Çʵå Á¤ÀÇ´Â <Fields></Fields> ÅÂ±× ¾È¿¡ Á¤ÀÇ µÇ¾îÀÖ°í
°¢ Çʵå´Â <Field /> ¸¦ ½á¼­ Á¤ÀÇ Çß½À´Ï´Ù.

¸¶Áö¸·À¸·Î  °¢ ·¹ÄÚµå´Â <Record /> ű׸¦ »ç¿ëÇß½À´Ï´Ù.
<Record> ÅÂ±× ¾È¿¡´Â Çʵå¸í=Çʵ尪 ÇüÅ·Π, ¾øÀÌ Çʵ带 ³ª¿­ÇÕ´Ï´Ù.

- ÄÃ ÀÛ¾÷..

ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ» ´Ù¿î¹Þ¾Æ º¸½Ã¸é 2°³ÀÇ scurl ÆÄÀÏÀ» include Çß½À´Ï´Ù.

httplib.scurl ÆÄÀÏÀº ¾ÕÂÊÀÇ °­Á¿¡¼­ ¾ð±ÞÇÑ ³»¿ëÀ¸·Î GET / POST ¸Þ¼Òµå ÇÔ¼ö°¡ µé¾îÀÖ½À´Ï´Ù.
¿©±â¼­´Â {gfGetMethod} ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
GET ¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ °¡Á® ¿À´Â ÇÔ¼öÀÔ´Ï´Ù.

MySaxApp.scurl Àº ¾Æ·¡ °­ÁÂÀÇ DefaultHandler ¿¡¼­ »ó¼Ó¹Þ¾Æ Çڵ鷯¸¦ ÀÛ¼ºÇÑ Å¬·¡½º·Î
³»¿ëÀº Á¶±Ý ÈÄ¿¡ »ìÆìº¸°Ú½À´Ï´Ù.

¿ì¼± start.curl ÆÄÀÏÀº º¸°Ú½À´Ï´Ù.

start.curl ÆÄÀÏ
-----------------------------------------------------------------------
{curl 3.0 applet}
{curl-file-attributes character-encoding = "euc-kr"}
{applet manifest = "manifest.mcurl"}

{import * from CURL.XML.SAX.PARSER}

{include "httplib.scurl"}
{include "MySaxApp.scurl"}


||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|| XML ½ºÆ®¸µÀ¸·ÎºÎÅÍ ·¹ÄÚµå¼ÂÀ» ¸®ÅÏÇÑ´Ù.
{define-proc public {gfXML2RecordSet xml : String} : #RecordSet    
    let rs : #RecordSet = null
    let xr:XMLReader = {SAXParser}
    let handler:MySaxApp = {MySaxApp}
    
    {xr.set-content-handler handler}
    {xr.set-error-handler handler}
    
    {try        
        {xr.parse {InputSource character-stream = {{StringBuf xml}.to-InputStream}}}
        set rs = {handler.get-recordset}        
     catch file-exception:IOException do
        {popup-message {value file-exception}}
     catch parse-exception:SAXParseException do
        {popup-message {gfGetErrorMessage parse-exception}}
    }
    {return rs}
}


{let command:CommandButton =
    {CommandButton
        label = "´­·¯ÁÖ¼¼¿ä",
        {on Action do
            let (xml : String, error?:bool) =
                {gfGetMethod
                    {url "action.do"},
                    {get-character-encoding-by-name "euc-kr"}
                }
            ||{popup-message xml}
            let rs : #RecordSet = {gfXML2RecordSet xml}
            {popup-message
                {RecordGrid record-source=rs}
            }
                
            
        }
    }
}

{VBox width=600px,
    command
}

-----------------------------------------------------------------------

È­¸é¿¡´Â CommandButton Çϳª°¡ Ãâ·ÂµÇ°í ¹öưÀ» ´©¸£¸é À̺¥Æ®°¡ È£ÃâµË´Ï´Ù.
¹öư À̺¥Æ®ÀÇ ³»¿ëÀ» º¸¸é ¿ì¼±..

{gfGetMethod } ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ action.do ÆÄÀÏÀ» Àоî¿É´Ï´Ù.

±×¸®°í

let rs : #RecordSet = {gfXML2RecordSet xml}

{gfXML2RecordSet} ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ ¹Þ¾Æ¿Â xml String ÀÇ ³»¿ëÀ» argument ÁÖ°í
RecordSet À» ¸®ÅÏ ¹Þ½À´Ï´Ù.

¸¶Áö¸·À¸·Î RecordGrid ¸¦ ÀÌ¿ëÇØ¼­ È­¸é¿¡ Ç¥½ÃÇÕ´Ï´Ù.

´ëºÎºÐÀÌ gfXML2RecordSet ÇÔ¼ö¿¡ ±¸ÇöµÇ¾î ÀÖÀ¸´Ï ÇÔ¼ö ³»¿ëÀ» Çϳª¾¿ È®ÀÎÇØ º¸ÁÒ.

-----------------------------------------------------------------------
    let xr:XMLReader = {SAXParser}
    let handler:MySaxApp = {MySaxApp}
    
    {xr.set-content-handler handler}
    {xr.set-error-handler handler}
-----------------------------------------------------------------------

ÀÌ ºÎºÐÀº ¹Ù·Î Àü °­Á¿¡¼­µµ ³ª¿Â SAX ÆÄ¼­¸¦ »ç¿ëÇϱâ À§ÇÑ Áغñ ÀÛ¾÷ÀÔ´Ï´Ù.

-----------------------------------------------------------------------
    {try        
        {xr.parse {InputSource character-stream = {{StringBuf xml}.to-InputStream}}}
        set rs = {handler.get-recordset}  
       ...
    }
-----------------------------------------------------------------------

±×¸®°í

{xr.parse {InputSource character-stream = {{StringBuf xml}.to-InputStream}}}

{xr.parse} ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼­ ÆÄ½Ì ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù.
¿©±â¼­ ´Ù¸¥Á¡Àº ÀÌÀü °­Á¿¡¼­´Â {InputSource } °¡ url  À̾ú´Âµ¥ À̹ø¿¡´Â stream À̶õ °ÍÀÔ´Ï´Ù.
±× ´ÙÀ½ ÁÙ·Î ÆÄ½ÌÀÌ ³¡³ª¸é {handler.get-recordset} ¸¦ ÀÌ¿ëÇØ¼­ ·¹ÄÚµå¼ÂÀ» ¹Þ½À´Ï´Ù.

set rs = {handler.get-recordset}  

¹°·Ð, ¿ì¸®°¡ Á¤ÀÇÇÑ Çڵ鷯¿¡ {handler.get-recordset} ¸Þ¼Òµå°¡ Á¸ÀçÇØ¾ß ÇÕ´Ï´Ù.

ÀÌÁ¨ Çڵ鷯¸¦ ¾î¶»°Ô ¸¸µé¾ú´ÂÁö¸¸ º¸¸é µÇ°Ú±º¿ä..^^


MySaxApp.scurl ÆÄÀÏ
-----------------------------------------------------------------------

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|| TSaxApp
{define-class public MySaxApp {inherits DefaultHandler}

  field public rs : #RecordSet
  field public rf : #RecordFields
  field public rfs : {Array-of RecordField} = {{Array-of RecordField}}
  
  {constructor public {default}
    {construct-super}
  }
  
  {method public {get-recordset}:#RecordSet
    {return self.rs}
  }
  
  {method public {start-document}:void}
  {method public {end-document}:void}
  
  {method public {start-element
                     uri:String,
                     name:String,
                     qname:String,
                     atts:Attributes
                 }:void
    
    {if name == "Fields" then  
        {self.rfs.clear}
       
     elseif name == "Field" then
        let sname : #String = {atts.get-value {atts.get-index-by-qname "name"}}
        let sdomain : #String = {atts.get-value {atts.get-index-by-qname "domain"}}
              
        let dm : Domain = {Domain.from-type String}
        {if sdomain == "int" then
            set dm = {Domain.from-type int}
         elseif sdomain == "double" then
            set dm = {Domain.from-type double}
        }
            
        {self.rfs.append
            {RecordField
                sname asa String,
                domain = dm
            }
        }    
     elseif name == "Record" then
        let r : #RecordData = {RecordData}
        {for i:int=0 below {atts.get-length} do
            let lname : #String = {atts.get-local-name i}
            let lvalue : #String = {atts.get-value i}
            {if lname != null and lvalue != null then                
                set r[lname asa String] = lvalue
            }
        }
        {self.rs.append r}
    }    
  
  }

  {method public {end-element
                     uri:String,
                     name:String,
                     qname:String
                 }:void

    {if name == "Fields" then        
        set self.rf = {RecordFields {splice self.rfs}}
        set self.rs = {RecordSet self.rf asa RecordFields}
    }
  }

  {method public {error exception:SAXParseException}:void
    ||{throw exception}
  }

  {method public {fatal-error exception:SAXParseException}:void
    {throw exception}
  }

  {method public {warning exception:SAXParseException}:void
    ||{throw exception}
  }
  
}
-----------------------------------------------------------------------

À½ ¼Ò½º°¡ ¹«Ã´ ±é´Ï´Ù.
ÇÏÁö¸¸ ³»¿ëÀ» »ìÆìº¸¸é ¿ª½Ã ¾Æ¹«°Íµµ ¾Æ´ÏÁÒ.

¿©±â¼­ Áß¿äÇÑ°Ç µé¾î¿À´Â ÅÂ±× Á¤º¸¿¡ µû¶ó Á÷Á¢ RecordSet À» »ý¼ºÇÑ´Ù °ÍÀÔ´Ï´Ù.

ÀÚ ±×·³ Çϳª¾¿ È®ÀÎÇØ º¼±î¿ä..

-----------------------------------------------------------------------
  field public rs : #RecordSet
  field public rf : #RecordFields
  field public rfs : {Array-of RecordField} = {{Array-of RecordField}}
-----------------------------------------------------------------------

rs ´Â »ý¼ºÇÒ RecordSetÀ̱¸¿ä.. rf ´Â RecordFields ÀÔ´Ï´Ù.
rfs ´Â RecordField ¸¦ ±¸¼ºÇÒ ¹è¿­ÀÔ´Ï´Ù.

-----------------------------------------------------------------------
  {method public {get-recordset}:#RecordSet
    {return self.rs}
  }  
-----------------------------------------------------------------------

constructor, start-document, end-document ´Â º°·Î ÇÏ´ÂÀÏ ¾ø½À´Ï´Ù.
get-recordset Àº ¸¸µé¾îÁø RecordSet À» ¸®ÅÏÇÕ´Ï´Ù.

±×·³ º»°ÝÀûÀ¸·Î .. ÇÊµå ¸¸µå´Â ºÎºÐÀ» º¸°Ú½À´Ï´Ù.
¿©±â¼­ ÇÊµå ¸¸µå´Â ¹æ¹ýÀº

start-element ÀÇ Å±װ¡ Fields À̸é Çʵå Á¤Àǰ¡ ÀÌÁ¦ ºÎÅÍ ³ª¿À¹Ç·Î
{self.rfs.clear} ¸¦ È£ÃâÇØ¼­ ÇÊµå ¹è¿­À» ºñ¿öµÓ´Ï´Ù.

±×¸®°í Field űװ¡ ³ªÅ¸³ª¸é °¢ attributes °ªµéÁß¿¡¼­ name, domain ¸¸ °¡Á®´Ù°¡
Çʵ带 ±¸¼ºÇÑÈÄ rfs ¿¡ Ãß°¡ÇÕ´Ï´Ù.

±×¸®°í Field ±¸¼ºÀÌ ´Ù ³¡³ª¸é

end-element ¿¡¼­ űװ¡ Fields °¡ ³ª¿À°Ô µË´Ï´Ù.
À̶§´Â ÇÊµå ±¸¼ºÀÌ ¿ÏÀüÈ÷ ³¡³­ °ÍÀ̹ǷÎ

-----------------------------------------------------------------------
  {method public {end-element
                     uri:String,
                     name:String,
                     qname:String
                 }:void

    {if name == "Fields" then        
        set self.rf = {RecordFields {splice self.rfs}}
        set self.rs = {RecordSet self.rf asa RecordFields}
    }
  }
-----------------------------------------------------------------------

·¹ÄÚµå¼ÂÀ» »ý¼ºÇÕ´Ï´Ù.
**ÄÃÀÇ RecordSet Àº Çʵ尡 ¾øÀ¸¸é »ý¼ºÀÌ ¾ÈµÇ¹Ç·Î ÇÊµå ±¸¼ºÀÌ ¿ÏÀüÈ÷ ³¡³­ÈÄ¿¡ »ý¼ºÇÕ´Ï´Ù.

±×¸®°í °¢ Record ¸¦ ±¸¼ºÇÕ´Ï´Ù.
¿ª½Ã start-element ¿¡¼­ ű׸íÀÌ Record ÀΰÍÀ» °ñ¶ó³»¸é µÇ°ÚÁÒ..

À̹ø¿£ ÀÛ¾÷À» ½±°ÔÇϱâÀ§Çؼ­

<Record mid="hong1234" mname="È«±æµ¿" mcodes="123456-1234351" />

À§ ó·³ ·¹Äڵ带 ±¸¼ºÇß½À´Ï´Ù. ¸ðµÎ start-element ¿¡¼­ attributes ¸¸ ÀÐÀ¸¸é ÇÑ ·¹Äڵ带 ±¸¼ºÇÒ
¼ö ÀÖ½À´Ï´Ù. end-element ¸¦ ÂüÁ¶ÇÒ Çʿ䰡 ¾ø´Â °ÍÀÌÁÒ..

-----------------------------------------------------------------------
        let r : #RecordData = {RecordData}
        {for i:int=0 below {atts.get-length} do
            let lname : #String = {atts.get-local-name i}
            let lvalue : #String = {atts.get-value i}
            {if lname != null and lvalue != null then                
                set r[lname asa String] = lvalue
            }
        }
        {self.rs.append r}
-----------------------------------------------------------------------

À§¿Í °°Àº ÀÛ¾÷À¸·Î Record ¸¦ Ãß°¡Çß½À´Ï´Ù.
¾î·ÆÁö ¾ÊÀº ³»¿ëÀÌ´Ï ¼³¸íÀº »ý·«ÇÕ´Ï´Ù.

ÀßÀÌÇØ°¡ ¾ÈµÇ½Ã¸é ¾ÕÂÊÀÇ °­Á¸¦ Àо¼¼¿ä..

¸¶Áö¸·À¸·Î ¿¹¿Ü ó¸®Àä..

-----------------------------------------------------------------------
  {method public {error exception:SAXParseException}:void
    ||{throw exception}
  }

  {method public {fatal-error exception:SAXParseException}:void
    {throw exception}
  }

  {method public {warning exception:SAXParseException}:void
    ||{throw exception}
  }
-----------------------------------------------------------------------

À§¿Í °°ÀÌ fatal-error ¿¡·¯°¡ ¾Æ´Ñ°æ¿ì´Â ³Ñ¾î°¡°Ô Çß½À´Ï´Ù.
µÕ±Û°Ô »ì¾Æ¾ßÁÒ.. ³Ê¹« ºýºýÇϸé Èûµå´Ï±ñ¿ä ^^;;

¼Ò½º¿¡ ´ëÇØ ÀÚ¼¼È÷´Â ¼³¸íÀº ¾ÈÇßÁö¸¸ ¾î·ÆÁö ¾ÊÀ¸´Ï Çѹø¾¿ ½ÇÇàÇØ º¸¸é ½±°Ô ÀÌÇØ°¡½Ç °ÍÀÔ´Ï´Ù.

À̹ø °­Á¸¦ ¸¶Áö¸·À¸·Î ÁøÂ¥·Î À¥¼­¹ö¿ÍÀÇ ¸¸³²À» ¸¶Ä¡°Ú½À´Ï´Ù.
±×·³~~



  ÃßõÇÏ±â   ¸ñ·Ïº¸±â

¹øÈ£ ºÐ·ù Á¦¸ñ ÀÛ¼ºÀÚ ÀÛ¼ºÀÏ   Ãßõ Á¶È¸
65 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #15] °Ô½ÃÆÇ ¸¸µé±â #4    5th 2004/06/08 503 3007
64 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #14] °Ô½ÃÆÇ ¸¸µé±â #3    5th 2004/06/08 386 2553
63 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #13] °Ô½ÃÆÇ ¸¸µé±â #2    5th 2004/06/08 276 3085
62 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #12] °Ô½ÃÆÇ ¸¸µé±â #1  [1]  5th 2004/06/08 390 3627
61 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #11] ¹æ¸í·Ï ¸¸µé±â #3  [15]  5th 2004/05/17 318 2660
60 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #10] ¹æ¸í·Ï ¸¸µé±â #2  [3]  5th 2004/05/17 297 2834
59 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #9] ¹æ¸í·Ï ¸¸µé±â #1  [3]  5th 2004/05/17 279 2654
58 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #8] RecordSet class¸¦ ÀÌ¿ëÇÑ µ¥ÀÌÅÍ ´Ù·ç±â #3    5th 2004/05/11 347 2212
57 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #7] RecordSet class¸¦ ÀÌ¿ëÇÑ µ¥ÀÌÅÍ ´Ù·ç±â #2  [19]  5th 2004/05/11 348 2300
56 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #6] RecordSet class¸¦ ÀÌ¿ëÇÑ µ¥ÀÌÅÍ ´Ù·ç±â #1  [1]  5th 2004/05/11 280 2538
55 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #5] ¸Þ´º ¸¸µé±â #2    5th 2004/04/30 344 2238
54 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #4] ¸Þ´º ¸¸µé±â #1    5th 2004/04/30 295 2411
53 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #3] ¸Þ´º ¸¸µé±â – ½ÃÀÛ  [1]  5th 2004/04/30 314 2217
52 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #2] Æ®¸®±¸Á¶ ¸¸µé±â #2    5th 2004/04/27 280 2702
51 ÃʱÞÀÀ¿ë  [±âÃʰ­Á #1] Æ®¸®±¸Á¶ ¸¸µé±â #1  [1]  5th 2004/04/27 318 2794
ÃÊ±Þ  [À¥¼­¹ö¿ÍÀÇ ¸¸³² #6] SAX¸¦ ÀÌ¿ëÇØ¼­ XML µ¥ÀÌÅ͸¦ RecordSet À¸·Î ¹Þ±â    vidkid 2004/04/27 372 2369
49 ÃÊ±Þ  [À¥¼­¹ö¿ÍÀÇ ¸¸³² #5] SAX ÆÄ¼­¸¦ ÀÌ¿ëÇÑ XML µ¥ÀÌÅÍ ºÐ¼®  [10]  vidkid 2004/04/27 571 10342
48 ÃÊ±Þ  [À¥¼­¹ö¿ÍÀÇ ¸¸³² #4] µ¥ÀÌÅ͸¦ RecordSet À¸·Î ¹Þ±â - ·¹ÄÚµå¼Â¿¡ ³Ö±â  [13]  vidkid 2004/04/22 324 2642
47 ÃÊ±Þ  [À¥¼­¹ö¿ÍÀÇ ¸¸³² #3] µ¥ÀÌÅ͸¦ RecordSet À¸·Î ¹Þ±â - ÇÁ·Î½ÃÀú ¸¸µé±â  [3]  vidkid 2004/04/21 492 4015
46 ÃÊ±Þ  [À¥¼­¹ö¿ÍÀÇ ¸¸³² #2] GET / POST ¸Þ¼Òµå  [15]  vidkid 2004/04/21 534 6630

    ¸ñ·Ïº¸±â   ÀÌÀüÆäÀÌÁö   ´ÙÀ½ÆäÀÌÁö [1] 2 [3][4][5]
       

Copyright 1999-2010 Zeroboard / skin by zero