Enterprise Java Technologies Tech Tip¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù
Enterprise Java Technologies
Å×Å©ÆÁ
2006³â 1¿ù 18ÀÏÀÚ
  À̹ø È£¿¡¼­´Â,

» JAX-WS¸¦ ÀÌ¿ëÇÑ À¥ ¼­ºñ½º °³¹ß
» ºê¶ó¿ìÀú¿¡¼­ µ¥ÀÌÅͺ£À̽º·Î ¹®ÀÚ¼¼Æ® º¯È¯Çϱâ

¿¡ ´ëÇØ ´Ù·ì´Ï´Ù.

ÀÌ Å×Å©ÆÁÀº Java EE 5ÀÇ ¿ÀǼҽº ·¹ÆÛ·±½º(ÇÁ·ÎÁ§Æ®¸í: GlassFish)¸¦ ±¸ÇöÇÏ¿© °³¹ßµÇ¾ú½À´Ï´Ù.GlassFish´Â https://glassfish.dev.java.net/ ¿¡¼­ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù.

-»ùÇà ¾ÆÄ«ÀÌºê ¹Þ±â-
JAX-WS¸¦ ÀÌ¿ëÇÑ À¥ ¼­ºñ½º °³¹ß

PDF ÆÄÀϹޱ⠠  

JAX-WS¸¦ ÀÌ¿ëÇÑ À¥ ¼­ºñ½º °³¹ß
 

ÀúÀÚ Manisha Umbarje

JAX-RPC(Java API for XML-based RPC) 1.1ÀÇ ÈÄ¼Ó ¸±¸®ÁîÀÎ Java API for XML Web Services (JAX-WS) 2.0, JSR 224´Â Java EE 5 Ç÷§Æû¿¡ À־ ¸Å¿ì Áß¿äÇÑ ºÎºÐÀ¸·Î¼­ ÀÚ¹Ù ±â¼úÀ» ÀÌ¿ëÇÑ À¥ ¼­ºñ½º °³¹ß ÀÛ¾÷À» °£¼ÒÈ­½ÃÄÑÁØ´Ù. JAX-WS´Â SOAP 1.1, SOAP 1.2, XMLÀ» ºñ·ÔÇÑ º¹¼öÀÇ ÇÁ·ÎÅäÄÝÀ» Áö¿øÇϰí HTML µîÀÇ Ãß°¡ ÇÁ·ÎÅäÄÝ Áö¿øÀ» À§ÇÑ ±â´ÉÀ» Á¦°øÇÔÀ¸·Î½á JAX-RPC 1.1ÀÇ ¸î °¡Áö ¹®Á¦¸¦ ÇØ°áÇϰí ÀÖ´Ù. JAX-WS´Â µ¥ÀÌÅÍ ¹ÙÀεù¿¡ JAXB 2.0À» »ç¿ëÇÏ¸ç »ý¼ºµÈ ¼­ºñ½º ¿£µåÆ÷ÀÎÆ® ÀÎÅÍÆäÀ̽º¸¦ °ü¸®Çϱâ À§ÇÑ Ä¿½ºÅ͸¶ÀÌÁ¦À̼ÇÀ» Áö¿øÇÑ´Ù. JAX-WS´Â ¶ÇÇÑ ÁÖ¼®(annotation)À» Áö¿øÇÏ¿© À¥ ¼­ºñ½º °³¹ßÀ» °£¼ÒÈ­ÇÏ°í ·±Å¸ÀÓ Jar ÆÄÀÏÀÇ »çÀÌÁ ÁÙ¿©Áֱ⵵ ÇÑ´Ù.

º» Å×Å©ÆÁ¿¡´Â ¿¹Á¦ ÆÐŰÁö°¡ Æ÷ÇԵǾî ÀÖÀ¸¸ç, ÆÐŰÁö´Â µ¶¸³Çü Àڹ٠Ŭ¶óÀÌ¾ðÆ® »ó¿¡¼­ JAX-WS 2.0¸¦ ÅëÇØ ¾×¼¼½ºµÇ´Â °£´ÜÇÑ À¥ ¼­ºñ½º¸¦ ¿¹½ÃÇÑ´Ù. ÀÌ ¿¹Á¦´Â GlassFish¶ó ºÒ¸®´Â Java EE 5 SDKÀÇ ¿ÀÇ ¼Ò½º ±¸Çö¿¡ ±â¹ÝÀ» µÎ°í ÀÖÀ¸¸ç, ¿¹Á¦ ÆÐŰÁö¿¡´Â ¿¹Á¦¸¦ À§ÇÑ ¼Ò½º ÄÚµå, ºôµå ½ºÅ©¸³Æ®, ºôµå ÆÄÀÏ µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù.

Ãʱ⠼¾÷ ÀÛ¾÷ ºÎºÐºÎÅÍ ½ÃÀÛÇØ º¸±â·Î ÇÏÀÚ. ¸ÕÀú ´Ù¿î·Îµå ÆäÀÌÁö¿¡¼­ GlassFish¸¦ ´Ù¿î·ÎµåÇÑ´Ù. (º» ÆÁÀº GlassFishÀÇ Build 29·Î Å×½ºÆ®¸¦ °ÅÃÆÀ½.) ±×¸®°í ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.

  • GLASSFISH_HOME. GlssFish ¼³Ä¡ Àå¼Ò°¡ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù(¿¹: C:\Sun\AppServer)

  • ANT_HOME. Ant ¼³Ä¡ Àå¼Ò°¡ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù. Ant´Â ´Ù¿î·ÎµåÇÑ GlassFish ¹øµé¿¡ Æ÷ÇԵǾî ÀÖÀ¸¸ç(WindowsÀÇ °æ¿ì¿¡´Â lib\ant ¼­ºêµð·ºÅ͸®¿¡ ÀÖÀ½), Apache Ant Project ÆäÀÌÁö¿¡¼­µµ Ant¸¦ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù. ¿¹Á¦¿¡¼­´Â Apache ant 1.6.5¸¦ »ç¿ëÇÑ´Ù.

  • JAVA_HOME. »ç¿ëÀÚ ½Ã½ºÅÛÀÇ JDK 5.0 À§Ä¡°¡ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù.

Also, add the ant location to your PATH environment variable. ¾Æ¿ï·¯, °¢ÀÚÀÇ PATH ȯ°æ º¯¼ö¿¡ ant À§Ä¡¸¦ Ãß°¡ÇÑ´Ù.

À̾ ¿¹Á¦ ÆÐŰÁö¸¦ ´Ù¿î·ÎµåÇÏ°í ¾ÐÃàÀ» ÇØÁ¦ÇÑ´Ù. º» ÆÁÀÇ ¸ÞÀÎ µð·ºÅ͸®´Â jaxws-techtipÀÌ´Ù.

À¥ ¼­ºñ½º ±¸ÃàÇϱâ

Ãʱ⠼¾÷ÀÌ ¿Ï·áµÈ ´ÙÀ½¿¡´Â À¥ ¼­ºñ½º¸¦ ±¸ÃàÇÒ Â÷·Ê´Ù. º» ¿¹Á¦ÀÇ °æ¿ì, Java Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© À¥ ¼­ºñ½º¸¦ °³¹ßÇÑ´Ù. À¥ ¼­ºñ½º¸¦ ±¸ÃàÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ ¼öÇàÇÑ´Ù.

  1. ¿£µåÆ÷ÀÎÆ® ±¸Çö Ŭ·¡½º¸¦ ÀÛ¼ºÇÑ´Ù.
  2. ¿£µåÆ÷ÀÎÆ® ±¸Çö Ŭ·¡½º¸¦ ÄÄÆÄÀÏÇÑ´Ù.
  3. ¿É¼Ç¿¡ µû¶ó À¥ ¼­ºñ½º ½ÇÇà¿¡ ÇÊ¿äÇÑ portable artifact¸¦ »ý¼ºÇÑ´Ù.
  4. À¥ ¼­ºñ½º¸¦ WAR ÆÄÀÏ·Î ÆÐŰ¡ÇÏ¿© ¹èÄ¡ÇÑ´Ù.

¿£µåÆ÷ÀÎÆ® ±¸Çö Ŭ·¡½º ÀÛ¼º

<Sample_install_dir>\jaxws-techtip µð·ºÅ͸® ±¸Á¶¸¦ ÈÈ¾î ³»·Á°¡¸é ¿£µåÆ÷ÀÎÆ® µð·ºÅ͸®¸¦ ãÀ» ¼ö Àִµ¥, ÀÌ µð·ºÅ͸®¿¡ Calculator¶ó´Â À̸§ÀÇ Å¬·¡½º°¡ ÀÖ´Ù. ÀÌ Å¬·¡½º´Â 2°³ÀÇ Á¤¼ö¸¦ Ãß°¡ÇÏ´Â ´Ü¼ø ¼­ºñ½º ¿£µåÆ÷ÀÎÆ® ±¸ÇöÀÌ´Ù.

   package endpoint;
   
   import javax.jws.WebService;
   import javax.jws.WebMethod;
   
   @WebService(
       name="Calculator",
       serviceName="CalculatorService",
       targetNamespace="http://techtip.com/jaxws/sample"
   )
   public class Calculator {
           public Calculator() {}
           
           @WebMethod(operationName="add", action="urn:Add")
           public int add(int i, int j) {
                   int k = i +j ;
                   System.out.println(i + "+" + j +" = " + k);
                   
                   return k;
           }
   }

JAX-WS 2.0ÀÇ °æ¿ì, A Metadata Facility for the Java Programming Language(JSR 175) ¹× Web Services Metadata for the Java Platform(JSR 181)¿¡ ¸í½ÃµÈ ÁÖ¼®°ú JAX-WS 2.0 ½ºÆå¿¡ Á¤ÀÇµÈ Ãß°¡ ÁÖ¼®À» ÁÖ·Î »ç¿ëÇÑ´Ù.

Calculator Ŭ·¡½ºÀÇ @WebService ¹× @WebMethodÀÇ 2°³ ÁÖ¼®¿¡ À¯ÀÇÇÒ °Í. À¯È¿ÇÑ ¿£µåÆ÷ÀÎÆ® ±¸Çö Ŭ·¡½º¿¡´Â ¹Ýµå½Ã @WebService ÁÖ¼®ÀÌ Æ÷ÇԵǾî¾ß Çϸç, ÁÖ¼®Àº Ŭ·¡½º¸¦ À¥ ¼­ºñ½º·Î Ç¥½ÃÇÑ´Ù. @WebService ÁÖ¼®ÀÇ À̸§ ¼Ó¼º°ªÀº WSDL(Web Service Description Language) portType(ÀÌ °æ¿ì´Â "Calculator")À» ³ªÅ¸³»¸ç, serviceName ("CalculatorService")´Â WSDL ¼­ºñ½ºÀÌ´Ù. TargetNamespace´ÂWSDL¿¡ »ç¿ëµÇ´Â XML ³×ÀÓ½ºÆäÀ̽º¸¦ ÁöÁ¤ÇÑ´Ù. ¸ðµç ¼Ó¼ºÀº ¿É¼Ç»çÇ×ÀÌ´Ù. ÀÌµé ¼Ó¼ºÀÇ ±âº»°ª¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é Web Services Metadata for the Java Platform ¸í¼¼¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

@WebMethod ÁÖ¼®Àº ¸Þ¼Òµå¸¦ À¥ ¼­ºñ½º ¸Þ¼Òµå ¹æ½ÄÀ¸·Î Ç¥½ÃÇÑ´Ù. Calculator Ŭ·¡½ºÀÇ ÁÖ¼®¿¡ ÀÖ´Â operationName ¼Ó¼º°ªÀº WSDL ¿¬»ê(ÀÌ °æ¿ì¿¡´Â add)À» ³ªÅ¸³»¸ç ¾×¼Ç ¼Ó¼º°ª("urn:Add")Àº WSDLÀ» À§ÇÑ XML ³×ÀÓ½ºÆäÀ̽º¿Í ÀÌ À¥ ¼­ºñ½º ¿¬»ê¿¡¼­ »ý¼ºµÈ ÀϺΠ¿ä¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. µÎ °¡Áö ¼Ó¼º ¸ðµÎ ¿É¼Ç»çÇ×Àε¥, À̵éÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ» °æ¿ì WSDL ¿¬»ê°ªÀº µðÆúÆ®°ªÀº ¸Þ¼Òµå À̸§À̰í, ¾×¼Ç °ªÀÇ µðÆúÆ®°ªÀº ¼­ºñ½ºÀÇ targetNamespaceÀÌ´Ù.

±¸Çö Ŭ·¡½º ÄÄÆÄÀÏ

±¸Çö Ŭ·¡½º¸¦ ÄÚµùÇÑ ÈÄ¿¡´Â ÄÄÆÄÀÏÀ» ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÏ¿© GlassFish¸¦ ½ÃÀÛÇÑ´Ù.

  <GF_install_dir>\bin\asadmin start-domain domain1

ÀÌ ¶§, <GF_install_dir>Àº GlassFish¸¦ ¼³Ä¡ÇÑ µð·ºÅ͸®ÀÌ´Ù. À̾ <Sample_install_dir>\jaxws µð·ºÅ͸® ±¸Á¶ÀÇ jaxws-techtip Æú´õ·Î À̵¿ÇÏ¿© ´ÙÀ½ÀÇ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù.

   ant compile 

ÀÌ ¸í·É¾î¸¦ ½ÇÇàÇÏ´Â °ÍÀº ´ÙÀ½ javac¸í·É¾î(½ÇÁ¦´Â ÇÑ ÁÙ·Î ÀÔ·Â)¸¦ ½ÇÇàÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.

  javac -classpath $GLASSFISH_HOME/lib/javaee.jar -d 
  ./build/classes/service/ endpoint/Calculator.java

À¥ ¼­ºñ½º ½ÇÇàÀ» À§ÇÑ portable artifact »ý¼º

ÀÌ ´Ü°è´Â ¿É¼Ç»çÇ×À¸·Î, À¥ ¼­ºñ½º ¹èÄ¡ °úÁ¤¿¡¼­ GlassFishÀÇ ¹èÄ¡ Åø¿¡ ¹èÄ¡ °¡´ÉÇÑ ¼­ºñ½º À¯´ÖÀÌ ¹øµé·Î Æ÷ÇÔµÇÁö ¾ÊÀº °æ¿ì¿¡´Â ÀÚµ¿ÀûÀ¸·Î artifacts¸¦ »ý¼ºÇÑ´Ù. ÇÏÁö¸¸, ÀÌ artifacts¸¦ ¼öµ¿À¸·Î »ý¼ºÇϱ⸦ ¿øÇÒ °æ¿ì¿¡´Â ´ÙÀ½ÀÇ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù.

   ant generate-runtime-artifacts

ÀÌ °æ¿ì, jaxws-techtip ¹Ø¿¡ build/generated µð·ºÅ͸®¸¦ »ý¼ºÇÏ°í ´ÙÀ½ wsgen ¸í·É¾î(½ÇÁ¦´Â ÇÑ ÁÙ·Î ÀÔ·Â)¸¦ ½ÇÇàÇÑ´Ù.

   $GLASSFISH_HOME/bin/wsgen -cp ./build/classes/service 
   -keep -d ./build/classes/service 
   -r ./build/generated -wsdl endpoint.Calculator

build/generated µð·ºÅ͸®¿¡ CalculatorService.wsdl ½ºÅ°¸¶¸¦ Á¤ÀÇÇÏ´Â ½ºÅ°¸¶ ÆÄÀÏ(CalculatorService_schema1.xsd)°ú ÇÔ²² WSDL ÆÄÀÏ(CalculatorService.wsdl)ÀÌ »ý¼ºµÈ´Ù.

JavaBean ±â¼ú ÄÄÆ÷³ÍÆ®(JavaBeans)´Â ¸Þ¼Òµå È£Ãâ, ÀÀ´ä, ¹× ¼­ºñ½ºº° ¿¹¿ÜÀÇ Á¤·ÄÀ» µµ¿ÍÁִµ¥, ÀÌ Å¬·¡½º´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡¼­ À¥ ¼­ºñ½º¸¦ ½ÇÇàÇÏ´Â °úÁ¤¿¡¼­ »ç¿ëµÈ´Ù. JavaBean Ŭ·¡½º´Â jaxws-techtip ¹ØÀÇ /build/classes/service/endpoint/jaxws µð·ºÅ͸®¿¡ »ý¼ºµÇ¸ç, Ŭ·¡½º´Â ´ÙÀ½°ú °°´Ù.

   Add.java  
   Add.class 
   AddResponse.java
   AddResponse.class 

WAR ÆÄÀÏ ÆÐŰ¡ ¹× ¹èÄ¡

À̾ ¼­ºñ½º¸¦ ÆÐŰ¡ÇÏ°í ¹èÄ¡ÇØ¾ß Çϴµ¥, À̸¦ À§Çؼ­´Â ¹èÄ¡ ¼­¼úÀÚ(deployment descriptor)¿¡ ¼­ºñ½º¿¡ °üÇÑ ¼¼ºÎ»çÇ×À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. À¥ ¼­ºñ½º´Â ¼­ºí¸´ ¶Ç´Â stateless ¼¼¼Ç ºóÀ¸·Î ¹øµé¸µµÉ ¼ö ÀÖÀ¸¸ç, ¼­ºí¸´À¸·Î ¹øµé¸µµÈ À¥ ¼­ºñ½º´Â Web Archive(WAR) ÆÄÀÏ¿¡ ÆÐŰ¡µÈ´Ù. ÇÑÆí, º» ÆÁ¿¡¼­´Â ¼­ºñ½º°¡ ¼­ºí¸´À¸·Î ¹øµé¸µµÈ´Ù.

¼­ºñ½º¸¦ WAR ÆÄÀÏ·Î ÆÐŰ¡ÇÏ·Á¸é jaxws-techtip Æú´õ·Î °¡¼­ ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù.

   ant pkg-war  

war ÆÄÀÏÀÇ ±¸Á¶¸¦ º¸·Á¸é build.xml ÆÄÀÏÀÇ pkg-war Ÿ±êÀ» »ìÆìº¸¸é µÈ´Ù.

´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÏ¿© »ý¼ºµÈ war ÆÄÀÏÀ» ¹èÄ¡ÇÒ ¼ö ÀÖ´Ù.

   ant deploy-app 

ÀÌ´Â ´ÙÀ½ asadmin ¹èÄ¡ ¸í·É¾î(ÇÑ ÁÙ·Î ÀÔ·Â)¸¦ ½ÇÇàÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.

   bash$GLASSFISH_HOME/bin/asadmin deploy --user admin 
   --password adminadmin --host localhost --port 4848 
   --contextroot jaxws-webservice --upload=true --target server

Ŭ¶óÀÌ¾ðÆ® ±¸Ãà

À¥ ¼­ºñ½º¸¦ ¹èÄ¡ÇÑ ÈÄ¿¡´Â Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼­ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Ŭ¶óÀÌ¾ðÆ® ±¸Ãà ´Ü°èÀÌ´Ù.

  1. Ŭ¶óÀÌ¾ðÆ®¸¦ ÀÛ¼ºÇÑ´Ù.
  2. Ŭ¶óÀÌ¾ðÆ®¸¦ ÄÄÆÄÀÏÇÏ´Â µ¥ ÇÊ¿äÇÑ portable artifact¸¦ »ý¼ºÇÑ´Ù.
  3. Ŭ¶óÀÌ¾ðÆ®¸¦ »ý¼ºÇÑ´Ù.
  4. Ŭ¶óÀÌ¾ðÆ®¸¦ ½ÇÇàÇÑ´Ù.

Ŭ¶óÀÌ¾ðÆ® ÀÛ¼º

´ÙÀ½ ÇÁ·Î±×·¥ JAXWSClient´Â º» ÆÁÀ» À§ÇÑ ¿¹Á¦ ÄÚµå¿Í ÇÔ²² Á¦°øµÇ´Â µ¶¸³Çü Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À¸·Î, ¹èÄ¡µÈ ¼­ºñ½º »ó¿¡¼­ code>add ¿¬»êÀ» 10ȸ È£ÃâÇÏ¿© 0~9ÀÇ ¼ö¿¡ 10À» Ãß°¡ÇÑ´Ù.

   package client;
   import javax.xml.ws.WebServiceRef;
   import com.techtip.jaxws.sample.CalculatorService;
   import com.techtip.jaxws.sample.Calculator;

   public class JAXWSClient {
      @WebServiceRef(wsdlLocation=
       "http://localhost:8080/jaxws-webservice/CalculatorService?WSDL")
       
       static CalculatorService service;
       
      public static void main(String[] args) {
         try {
           JAXWSClient client = new JAXWSClient();
           client.doTest(args);
         } catch(Exception e) {
           e.printStackTrace();
         }
      }
      
      public void doTest(String[] args) {
        try {
          System.out.println(
             " Retrieving port from the service " + service);
          Calculator port = service.getCalculatorPort();
          System.out.println(
             " Invoking add operation on the calculator port");
          for (int i=0;i>10;i++) {
            int ret = port.add(i, 10);
            if(ret != (i + 10)) {
              System.out.println("Unexpected greeting " + ret);
              return;
            }
            System.out.println(
               " Adding : " + i + " + 10 = "  + ret);
            }
        } catch(Exception e) {
          e.printStackTrace();
        }
      }
   }

À¥ ¼­ºñ½º¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¼±¾ðÇÏ´Â µ¥´Â JAXWSClientÀÇ @WebServiceRef ÁÖ¼®ÀÌ »ç¿ëµÈ´Ù. @WebServiceRef¿¡¼­ÀÇ wsdlLocation ¸Å°³º¯¼öÀÇ °ªÀº ÂüÁ¶µÇ´Â ¼­ºñ½º¸¦ À§ÇÑ WSDLÀÇ À§Ä¡¸¦ °¡¸®Å°´Â URLÀ̰í, @WebServiceRef ÁÖ¼®Àº JSR 224ÀÇ ¼½¼Ç 7.9¿¡ ¸í½ÃµÈ Ãß°¡ ¿É¼Ç ¼Ó¼ºÀ» Áö¿øÇÑ´Ù. Á¤Àû º¯¼ö ³×ÀÓµå ¼­ºñ½º´Â ¾ÖÇø®ÄÉÀÌ¼Ç Å¬¶óÀÌ¾ðÆ® ÄÁÅ×À̳ʿ¡ ÀÇÇØ ÀÎÁ§Æ®µÈ´Ù.

JAXWSClient ³»ÀÇ ÀÓÆ÷Æ® ¹®ÀÎ com.techtip.jaxws.sample.CalculatorService¿Í com.techtip.jaxws.sample.Calculator¿¡ À¯ÀÇÇÒ °Í. ÀÌ ÀÓÆ÷Æ®´Â ´ÙÀ½ ´Ü°è¿¡¼­ »ý¼ºµÉ portable artifactÀ̰í, CalculatorService´Â ¼­ºñ½º ±¸ÇöÀ» À§ÇÑ portable artifactÀÌ´Ù. Calculator´Â @WebServiceRefÀÇ wsdlLocation ¼Ó¼ºÀÌ ³ªÅ¸³»´Â WSDL¿¡¼­ »ý¼ºµÇ´Â ¼­ºñ½º ¿£µåÆ÷ÀÎÆ®¸¦ À§ÇÑ ÀÚ¹Ù ÀÎÅÍÆäÀ̽ºÀÌ´Ù.

Ŭ¶óÀÌ¾ðÆ®´Â getWebServiceRefNamePort ¸Þ¼Òµå(¿©±â¼­ WebServiceRefNameÀº @WebServiceRefÀÇ À̸§ ¼Ó¼º) ¶Ç´Â »ý¼ºµÈ WSDL ÆÄÀÏÀÇ WSDP Æ÷Æ® °ªÀ» ÅëÇØ CalculatorService¿¡¼­ ¿£µåÆ÷ÀÎÆ® Calculator¸¦ °Ë»öÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ¿£µåÆ÷ÀÎÆ®¸¦ °Ë»öÇÑ ÈÄ add ¿¬»êÀ» ¿ä±¸´ë·Î 10ȸ¿¡ °ÉÃÄ È£ÃâÇÑ´Ù.

Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ portable artifact »ý¼º

¾Õ¿¡¼­ ¾ð±ÞÇÑ °Íó·³ CalculatorService¿Í Calculator´Â portable artifactÀε¥, Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ ¸ðµç portable artifact¸¦ »ý¼ºÇÏ·Á¸é jaxws-techtip Æú´õ¿¡¼­ ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù.

   ant generate-client-artifacts 

ÀÌ´Â ´ÙÀ½ wsimport ¸í·É¾î(ÇÑ ÁÙ¿¡ ÀÔ·Â)¸¦ ½ÇÇàÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.

   $GLASSFISH_HOME/bin/wsimport -keep  -d ./build/classes/client 
   http://localhost:8080/jaxws-webservice/CalculatorService?WSDL 

ÀÌ °æ¿ì, jaxws-techtip ¹ØÀÇ build/classes/client/com/techtip/jaxws/sample µð·ºÅ͸®¿¡ artifact°¡ »ý¼ºµÈ´Ù. artifact´Â ´ÙÀ½°ú °°´Ù.

   Add.java
   Add.class 
   AddResponse.java
   AddResponse.class
   Calculator.java
   Calculator.class
   CalculatorService.java
   CalculatorService.class
   package-info.java
   package-info.class
   ObjectFactory.class   
   ObjectFactory.java   

Ŭ¶óÀÌ¾ðÆ® ÄÄÆÄÀÏ

´ÙÀ½ ´Ü°è´Â Ŭ¶óÀÌ¾ðÆ® Å¬·¡½º¸¦ ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ´Ù. À̸¦ À§Çؼ­´Â ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÏ¸é µÈ´Ù.

   ant compile-client

ant ÄÄÆÄÀÏ Å½ºÅ©´Â client/JAXWSClient¸¦ ÄÄÆÄÀÏÇϰí Ŭ·¡½º ÆÄÀÏÀ» /classes/client ¼­ºêµð·ºÅ͸®¿¡ ÀÛ¼ºÇÑ´Ù. ÀÌ´Â ´ÙÀ½ ¸í·É¾î(ÇÑ ÁÙ¿¡ ÀÔ·Â)¸¦ ½ÇÇàÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.

   javac -d ./build/classes/client 
   -classpath $GLASSFISH_HOME/lib/javaee.jar:
   $GLASSFISH_HOME/lib/appserv-ws.jar:
   ./build/classes/client client/JAXWSClient.java

Ŭ¶óÀÌ¾ðÆ® ½ÇÇà

¿¹Á¦°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö º¸·Á¸é ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù.

   ant runtest-jaxws

ÀÌ´Â build/classes/client Æú´õ¿¡¼­ ½ÇÇàµÇ´Â ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇàÇÏ´Â °Í°ú µ¿ÀÏÇÏ´Ù.

   $GLASSFISH_HOME/bin/appclient -mainclass client.JAXWSClient     

´ÙÀ½°ú À¯»çÇÑ ¾Æ¿ôDzÀÌ Ç¥½ÃµÇ¾î¾ß ÇÑ´Ù.

   runtest-jaxws:
        [echo] Executing appclient with client class as 
        client.JAXWSClient
        [exec]  Retrieving port from the service 
        com.techtip.jaxws.sample.CalculatorService@162522b
        [exec]  Invoking add operation on the calculator port
        [exec]  Adding : 0 + 10 = 10
        [exec]  Adding : 1 + 10 = 11
        [exec]  Adding : 2 + 10 = 12
        [exec]  Adding : 3 + 10 = 13
        [exec]  Adding : 4 + 10 = 14
        [exec]  Adding : 5 + 10 = 15
        [exec]  Adding : 6 + 10 = 16
        [exec]  Adding : 7 + 10 = 17
        [exec]  Adding : 8 + 10 = 18
        [exec]  Adding : 9 + 10 = 19
 
   all: 
   BUILD SUCCESSFUL
   Total time: 6 seconds
¸Ç À§·Î

ºê¶ó¿ìÀú¿¡¼­ µ¥ÀÌÅͺ£À̽º·Î ¹®ÀÚ¼¼Æ® º¯È¯Çϱâ
 

ÀúÀÚ John O'Conner

º» Å×Å© ÆÁ¿¡´Â UTF-8·Î ÀÎÄÚµùµÈ ÀϺ»¾î ¹®ÀÚ¼¼Æ®°¡ Æ÷ÇԵǾî ÀÖÀ¸¸ç, ÀÌ ¹®ÀÚ¸¦ º¸·Á¸é »ç¿ëÀÚÀÇ ¿î¿µÃ¼Á¦¿¡ ÀϺ»¾î ¹®ÀÚ Æ÷ÇÔ ÆùÆ®°¡ Á¦°øµÇ¾î¾ß ÇÑ´Ù. ÀϺ»¾î ÆùÆ®¸¦ ±¸ÇÏ´Â ¹æ¹ý Áß Çϳª·Î½á Cyberbit.ZIP ÆÄÀÏÀ» ´Ù¿î·ÎµåÇÒ ¼ö ÀÖ´Ù.

GETÀ̳ª POST ¸í·É¾î·Î ¾ÖÇø®ÄÉÀÌ¼Ç µ¥ÀÌÅÍ ÀÎÄÚµù ¹æ½ÄÀ» °áÁ¤ÇÏ´Â ¾÷°è Ç¥ÁØÀº ÇöÀç ¾ø´Ù. ´õ±º´Ù³ª, À¥ ¼­¹ö ¹× µ¥ÀÌÅͺ£À̽º °ü¸®ÀÚµéÀÌ ÅØ½ºÆ®°¡ ºê¶ó¿ìÀú¿¡¼­ µ¥ÀÌÅͺ£À̽º·Î ¿Å°ÜÁú ¶§ µ¥ÀÌÅÍÀÇ Á¤È®µµ¿¡ ¿µÇâÀ» ÁÖ´Â ¹®ÀÚ ÀÎÄÚµù º¯È¯¿¡ °üÇØ °ÅÀÇ ¾ËÁö ¸øÇÏ´Â °æ¿ìµµ Çã´ÙÇÏ´Ù. µû¶ó¼­ º» Å×Å© ÆÁ¿¡¼­´Â ¹®ÀÚ µ¥ÀÌÅ͸¦ ºê¶ó¿ìÀú¿¡¼­ µ¥ÀÌÅͺ£À̽º·Î(¶Ç´Â ¿ªÀ¸·Î) Á¤È®ÇÏ°Ô ¿Å±â±â À§ÇÑ À¯¿ëÇÑ ÈùÆ®¿Í º£½ºÆ® ÇÁ·¢Æ¼½º¸¦ ¼Ò°³ÇϰíÀÚ ÇÑ´Ù.

ºê¶ó¿ìÀú µð½ºÇ÷¹ÀÌ ¹× Æû Á¦Ãâ

"Hello, world!"¸¦ ÀϺ»¾î·Î Ç¥½ÃÇÏ´Â HTML ÆäÀÌÁö¸¦ °ËÅäÇÏ´Â °ÍÀ¸·Î ½ÃÀÛÇØº¸ÀÚ. ´ÙÀ½Àº ÆäÀÌÁöÀÇ HTML ÄÚµùÀÌ´Ù.

   <html>
     <head>
       <title>Hello World with Charset Meta Tag</title>
     </head>
     <body>
       <!-- Japanese text encoded as UTF-8 -->
       <h1>ª³ªóªËªÁªÏ¡¢á¦Í£!</h1>
     </body>
   </html>

¿äÁòÀÇ ºê¶ó¿ìÀú´Â HTML ÆäÀÌÁö°¡ ºê¶ó¿ìÀú¿¡ ÃæºÐÇÑ ÈùÆ®¸¦ Á¦°øÇϱ⸸ ÇÏ¸é »ç½Ç»ó ¾î¶² ÅØ½ºÆ®¶óµµ Á¤È®ÇÏ°Ô µð½ºÇ÷¹ÀÌÇÒ ¼ö ÀÖÀ¸¸ç, ºê¶ó¿ìÀú´Â ÈùÆ®¸¦ ÀÌ¿ëÇÏ¿© ÀûÀýÇÑ ÆùÆ®¿Í ÀÎÄÚµùÀ» ¼±ÅÃÇϰí À̸¦ ÅëÇØ ¹®ÀÚ¸¦ ÇØ¼®ÇÑ´Ù. ºê¶ó¿ìÀú¿¡ ¹®ÀÚ¼¼Æ® Á¤º¸¸¦ Á¦°øÇÏÁö ¾ÊÀ» °æ¿ì, ÀÏ´Ü ¹®ÀÚ´Â µ¥ÀÌÅÍ ¼Õ½Ç ¾øÀÌ HTML ÆäÀÌÁö¸¦ ÅëÇØ ¼ö½ÅµÇÁö¸¸ µ¿½Ã¿¡ ºÎÁ¤È®ÇÏ°Ô ÇØ¼®µÉ °¡´É¼ºµµ ÀÖ´Ù.

¹ß»ý °¡´ÉÇÑ ÇÑ °¡Áö °æ¿ì¸¦ »ìÆìº¸ÀÚ.

Firefox 1.07 °°Àº ºê¶ó¿ìÀú´Â ¹®ÀÚ¼¼Æ®¸¦ ÃßÃøÇÒ ¼ö ÀÖÀ» »ÓÀε¥, ÀÌ °æ¿ì ºê¶ó¿ìÀú´Â ÆÄÀÏ ³»¿ëÀ» ISO 8859-1·Î ÀÎÄÚµùµÈ ÅØ½ºÆ®·Î À߸ø ÇØ¼®Çϰí ÀÖ´Ù.

ÅØ½ºÆ®´Â ½ÇÁ¦·Î´Â UTF-8(À¯´ÏÄÚµå ÀÎÄÚµù) ÅØ½ºÆ®À̸ç, ºê¶ó¿ìÀú´Â HTML ³»ÀÇ ÀÎÄÚµù Á¤º¸¸¦ META ű׷ΠȮÀÎÇÑ ÈÄ ÀϺ»¾î Àλ縻À» Á¤È®ÇÏ°Ô Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ÆÄÀÏÀÇ ¹®ÀÚ¼¼Æ®¸¦ ±â¼úÇÏ´Â META ű׸¦ Æ÷ÇÔÇϵµ·Ï ¾÷µ¥ÀÌÆ®µÈ ÆäÀÌÁö¸¦ À§ÇÑ HTML ÄÚµùÀÌ´Ù(META ű״ Æ÷¸Ë»óÀÇ ¸ñÀûÀ¸·Î µÎ Çà¿¡ °ÉÃÄ Ç¥½ÃµÈ´Ù).

   <html>
     <head>
       <!-- Add a META tag to describe the file's 
       <!--charset encoding -->
       <META http-equiv="Content-Type" content="text/html; 
         charset=UTF-8">
       <title>Hello World with Charset Meta Tag</title>
     </head>
     <body>
       <!-- Japanese text encoded as UTF-8 -->
       <h1>ª³ªóªËªÁªÏ¡¢á¦Í£!</h1>
     </body>
   </html>

´õ ¸¹Àº Á¤º¸¿Í ÀϺ»¾î °¡´É ÆùÆ®°¡ Á¦°øµÇ¸é ºê¶ó¿ìÀú´Â ¸Þ½ÃÁö¸¦ Á¤È®ÇÏ°Ô Ç¥½ÃÇÒ ¼ö ÀÖ´Ù.

JSP(JavaServer Pages) ÄÄÆ÷³ÍÆ®¿¡¼­ ¹®ÀÚ ÀÎÄÚµùÀº ¾î¶»°Ô ÀÌ·ç¾îÁö´Â°¡? JSP ±â¼úÀ» ÀÌ¿ëÇÒ °æ¿ì¿¡´Â ¹Ýµå½Ã »ý¼ºµÇ´Â HTML ÆäÀÌÁöÀÇ ¹®ÀÚ¼¼Æ®¸¦ ÁöÁ¤ÇØ ÁÖ¾î¾ß Çϴµ¥, À̸¦ À§Çؼ­´Â ÆäÀÌÁö Áö½Ã¾î ¶Ç´Â HTML META ű׸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù. JSP ÆäÀÌÁö Áö½Ã¾î´Â JSP ÆÄÀÏÀÇ Ã¹ ¹øÂ° ¿ä¼Ò¿©¾ß Çϰí, ¶Ç ¹®ÀÚ¼¼Æ® ¼³Á¤ÀÌ ÀÖ´Â contentType ¼Ó¼ºÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. JSP ÄÄÆÄÀÏ·¯´Â ¾Æ·¡¿¡ Ç¥½ÃµÈ pageEncoding ¼Ó¼ºÀ» »ç¿ëÇÏ¿© JSP ÆäÀÌÁöÀÇ ÀÎÄÚµù °áÁ¤À» µ½´Â´Ù(º» ÆÁ¿¡ °ÔÀçµÈ ´Ù¼öÀÇ ÄÚµå ¿¹Á¦¿¡¼­´Â Æ÷¸Ë»óÀÇ ¸ñÀûÀ¸·Î JSP Áö½Ã¾î <%@page ... ¸¦ µÎ Çà¿¡ °ÉÃÄ Ç¥½ÃÇÑ´Ù).

  <%@page pageEncoding="UTF-8" contentType="text/html; 
    charset=UTF-8"%>
  ...

ÀÌÁ¦ ÆäÀÌÁö°¡ Á¤È®ÇÏ°Ô ÀÎÄÚµùµÇ°í ÇÊ¿äÇÑ Á¤º¸¸¦ ºê¶ó¿ìÀú¿¡ Àü´ÞÇÑ´Ù. ÇÏÁö¸¸, ¾ÆÁ÷ ºê¶ó¿ìÀú¿¡´Â ¾Æ¹«°Íµµ Àü´ÞµÇÁö ¾ÊÀº »óÅÂÀÌ´Ù. À̹ø¿¡µµ ºê¶ó¿ìÀú´Â HTTP Çì´õ ¶Ç´Â HTML META ű׿¡ ÀúÀåµÈ ¹®ÀÚ¼¼Æ® Á¤º¸·ÎºÎÅÍ ÆäÀÌÁöÀÇ ÀÎÄÚµù Á¤º¸¸¦ ¾ò°Ô µÇ´Âµ¥, ºê¶ó¿ìÀú ¿ª½Ã GET ¶Ç´Â POST ¸í·É¾î¸¦ À§ÇÑ Æû µ¥ÀÌÅ͸¦ ÀÎÄÚµùÇÒ ¶§ ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇÑ´Ù. HTML FORM ű׿¡ accept-charset ¼Ó¼ºÀÌ Á¸ÀçÇÒ °æ¿ì, ºê¶ó¿ìÀú´Â ±× ´ë½Å ÇØ´ç ¼³Á¤À» ÀÌ¿ëÇÑ´Ù.

´ÙÀ½ JSP ÆäÀÌÁö¿¡´Â ¼­À¯·´°ú ¾Æ¸Þ¸®Ä«ÀÇ ¸¹Àº ±¹°¡¿¡¼­ »ç¿ëÇÏ´Â ¾ð¾î¿Í ½ºÅ©¸³Æ®¸¦ ó¸®ÇÏ´Â µ¥ ÈçÈ÷ ÀÌ¿ëµÇ´Â ¹®ÀÚ¼¼Æ®ÀÎ ISO-8859-1 ÅØ½ºÆ®°¡ Æ÷ÇԵǴµ¥, ÀÌ ÆäÀÌÁö´Â »ç¿ëÀÚÀÇ À̸§À» ¿ä±¸ÇÏ´Â HTML ÆûÀ» »ý¼ºÇÑ´Ù. »ç¿ëÀÚ°¡ ¿£Æ®¸®¸¦ Á¦ÃâÇÏ¸é µ¿ÀÏ ÆäÀÌÁö´Â µé¾î¿À´Â GET ¸í·É¾î¸¦ ó¸®Çϰí NAME ¸Å°³º¯¼ö¿¡ Áö½ÃµÈ »ç¿ëÀÚ¿¡°Ô Àλ縻À» ÇÁ¸°Æ®ÇÑ´Ù.

  <% @page pageEncoding="ISO-8859-1" contentType="text/html; 
  charset=ISO-8859-1" %>
  <html>
      <head>
          <title>Say Hello!</title>
      </head>
      <body>
          <%
              String name = request.getParameter("NAME");
              if (name == null || name.length() == 0) {
                  name = "World";
              }
          %>
          Hello, <%= name %>! <br>
          <form action="sayhello.jsp" method='GET'>
              <label for='NAME'>Name</label><input type="text" 
                id="NAME" name="NAME"/>
              <button type="submit">Submit</button> 
          </form>
      </body>
  </html>

JSP ÆäÀÌÁö¸¦ Ç¥½ÃÇÑ ´ÙÀ½ Æû¿¡ Jos鸦 ÀÔ·ÂÇϰí submit ¹öưÀ» ´©¸£¸é ºê¶ó¿ìÀú´Â ´ÙÀ½ÀÇ GET URLÀ» »ý¼ºÇÑ´Ù.

   http://localhost/charconv/sayhello.jsp?NAME=Jos%E9

URL ³»ÀÇ NAME ¸Å°³º¯¼ö°¡ ÀÌ»óÇØ º¸ÀÏÁö ¸ð¸£Áö¸¸ ÀÌ´Â ¸Â´Â °ÍÀÌ´Ù. %E9Àº URL ÀÎÄÚµù ¹®ÀÚ·Î, ISO 8859-1 ¹®ÀÚ¼¼Æ®¿¡ ÀÖ´Â ¹®ÀÚ ÄÚµåÆ÷ÀÎÆ®ÀÇ 16Áø¼ö Á¤¼ö °ªÀÌ´Ù. 8859-1 ¹®ÀÚ¼¼Æ®·Î µÈ GET°ú POST µ¥ÀÌÅ͸¦ ¿¹»óÇÏ´Â ¼­¹öÀÇ °æ¿ì, ÀÌ URL ÀÎÄÚµù ¿£Æ¼Æ¼¸¦ µðÄÚµùÇÏ´Â µ¥ ¾Æ¹«·± ¹®Á¦°¡ ¾ø´Âµ¥, °£´ÜÈ÷ ¸»Çؼ­ URL ÀÎÄÚµùÀº ¸ðµç ºñ ASCII ¹®ÀÚ¿Í Æ¯Á¤ ASCII ¹®ÀÚ¸¦ %HH ÇüÅÂÀÇ 16Áø¼ö ¹®ÀÚ¿­·Î ÀÎÄÚµùÇÒ °ÍÀ» ¿ä±¸ÇÏ´Â URLÀ» À§ÇÑ À¥ Ç¥ÁØÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ÀÌ Ç¥ÁØÀº µ¥ÀÌÅÍ ÀÎÄÚµù ½Ã »ç¿ëÇÒ ¹®ÀÚ¼¼Æ®±îÁö ±ÔÁ¤ÇØÁÖÁö´Â ¾Ê´Â´Ù.

ÀϺ», Çѱ¹, Áß±¹ÀÇ »ç¿ëÀÚ°¡ À§¿¡ Ç¥½ÃÇÑ °Í°ú µ¿ÀÏÇÑ JSP ÆäÀÌÁö¿¡ À̸§À» ÀÔ·ÂÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ¹®ÀÚ°¡ ISO 8859-1 ¹®ÀÚ¼¼Æ®¿¡ µé¾î ÀÖÁö ¾ÊÀ» °¡´É¼ºÀÌ Å©¹Ç·Î, À̸¦ ÇØ´ç ¹®ÀÚ¼¼Æ®·Î ÀÎÄÚµùÇÏ¸é ºê¶ó¿ìÀú¿¡ ½É°¢ÇÑ ¹®Á¦°¡ ÃÊ·¡µÈ´Ù. ºê¶ó¿ìÀú´Â ÀÌ·± ¹®Á¦¸¦ ¾î¶»°Ô ó¸®ÇÒ ¼ö ÀÖÀ»±î? ±× ÇØ´äÀº ºê¶ó¿ìÀú¸¶´Ù µ¶¸³ÀûÀÎ ¹æ½ÄÀ¸·Î ¼­·Î ´Ù¸£°Ô ¹®Á¦¸¦ ó¸®ÇÑ´Ù´Â °ÍÀÌ´Ù.

ï£ñé(Ÿ³ªÄ«)¶ó´Â ÀϺ»¾î À̸§ÀÌ ÁÖ¾îÁö¸é, Firefox ¹öÀü 1.07 ºê¶ó¿ìÀú´Â ´ÙÀ½°ú °°Àº GET URLÀ» »ý¼ºÇÑ´Ù(¸í·É¾î´Â ÇÑÁÙ·Î ÀÔ·Â).

   http://localhost/charconv/sayhello.jsp?
   NAME=%26%2330000%3B%26%2320013%3B

ºê¶ó¿ìÀú´Â 8859-1 ¹®ÀÚ¼¼Æ® ³»ÀÇ ÀϺ»¾î ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ¸¹Ç·Î (µû¶ó¼­ ½ÃµµÁ¶Â÷µµ ÇÏÁö ¾Ê´Â´Ù), ´ë½Å ¹®ÀÚ¸¦ ¼ýÀÚ ·¹ÆÛ·±½º·Î ÀÎÄÚµùÇÑ´Ù. ÀÌ °æ¿ì °¢ ¹®ÀÚ´Â &#D; ÇüÅ·ΠÀÎÄÚµùµÇ¾î Àִµ¥, ¿©±â¼­ D´Â À¯´ÏÄÚµå ¹®ÀÚ¼¼Æ®ÀÇ 10Áø¼ö ÄÚµåÆ÷ÀÎÆ® °ªÀ» ³ªÅ¸³½´Ù. ¹®ÀÚ ï£ÀÇ ½ÊÁø¼ö ÄÚµåÆ÷ÀÎÆ®´Â 30000ÀÌ°í ¹®ÀÚ ñéÀÇ ÄÚµåÆ÷ÀÎÆ®´Â 20013ÀÌ´Ù. ÀÌ ÀÎÄÚµùÀ» Àû¿ëÇÏ¸é ´ÙÀ½°ú °°Àº ¸Å°³º¯¼ö ¹®ÀÚ¿­ÀÌ »ý¼ºµÈ´Ù.

   NAME=&#30000;&#20013;

À̾ URL ÀÎÄÚµùÀÌ ¼öÇàµÇ¾î Ư¼ö¹®ÀÚ&, #, ;¸¦ ÇØ´ç %HH °ªÀ¸·Î º¯È¯ÇÑ´Ù.

   NAME=%26%2330000%3B%26%2320013%3B

JSP ÆäÀÌÁö°¡ ÀÌ ¸Å°³º¯¼ö¸¦ °Ë»öÇÏ¿© ±×´ë·Î ºê¶ó¿ìÀú¿¡ ¹ÝȯÇÑ´Ù¸é ¿Ü°ü»óÀ¸·Î´Â µ¥ÀÌÅÍ ¼Õ½ÇÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ÆäÀÌÁöÀÇ ¹®ÀÚ¼¼Æ®´Â ¿©ÀüÈ÷ 8859-1ÀÌÁö¸¸ ºê¶ó¿ìÀú´Â ¼ýÀÚ ·¹ÆÛ·±½º¸¦ ÇØ¼®ÇÏ°í ±×¿¡ µû¶ó ÀϺ»¾î ¹®ÀÚ¸¦ Ç¥½ÃÇϱâ À§ÇØ ÃÖ¼±À» ´ÙÇÑ´Ù. ÇÏÁö¸¸, ¿©±â¿¡´Â ¿©ÀüÈ÷ ¹®Á¦Á¡ÀÌ Àáº¹ÇØ Àִµ¥, Áï GET°ú POST ¸í·É¾î¸¦ ó¸®ÇÏ´Â ¼­¹ö Ãø Äڵ尡 Åë»óÀûÀ¸·Î URL ÀÎÄÚµù ¹®ÀÚ¿­Àº ÀÌÇØÇÏÁö¸¸ ¼ýÀÚ ·¹ÆÛ·±½º´Â ÀÌÇØÇÏÁö ¸øÇÑ´Ù´Â Á¡ÀÌ´Ù. ÀÌÀüÀÇ NAME ¸Å°³º¯¼ö¸¦ Àд ´ëºÎºÐÀÇ ¼­ºí¸´ÀÇ °æ¿ì, ¹®ÀÚ¿­À» &#30000;&#20013;À¸·Î µðÄÚµùÇϰí À̰ÍÀÌ ÀÏ¹Ý ¹®ÀÚ¿Í ÀüÇô ´Ù¸¥ °ÍÀ» ³ªÅ¸³½´Ù´Â »ç½ÇÀ» ¸ð¸¦ °ÍÀÌ´Ù. ´Þ¸® ¸»Çؼ­, ï£ñé¿¡ ´ëÇÑ ÁøÂ¥ ÀϺ»¾î ¹®ÀÚ´Â ¾Ë ¼ö ¾ø°Ô µÇ´Â °ÍÀÌ´Ù(ÀǵµÀûÀ¸·Î ÀÌ·± »óȲÀ» °èȹÇÏÁö ¾Ê´Â ÇÑ). ¶ÇÇÑ, ½ÇÁ¦ ¹®ÀÚ¼¼Æ® ÄÚµåÆ÷ÀÎÆ® ¶Ç´Â ÀÎÄÚµù °ª ´ë½Å¿¡ ¼ýÀÚ ·¹ÆÛ·±½º¸¦ Àü¼ÛÇØ¼­´Â ¾È µÇ´Âµ¥, ±×·¸Áö ¾ÊÀ» °æ¿ì ¹®ÀÚ°¡ °è¼Ó ¾ÖÇø®ÄÉÀ̼ÇÀ» Åë°úÇϱ⠶§¹®¿¡ µ¥ÀÌÅÍ ¼Õ½ÇÀÌ ÃÊ·¡µÉ ¿ì·Á°¡ ÀÖ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é Ç×»ó ó¸® ´ë»ó ¹®ÀÚ¸¦ ¸ðµÎ ó¸®ÇÒ ¼ö ÀÖ´Â HTML ÆäÀÌÁö ÀÎÄÚµùÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ´Ù±¹¾î »ç¿ëÀÚ¸¦ È®º¸ÇÏ°í º¹¼öÀÇ ½ºÅ©¸³Æ®¸¦ ó¸®ÇÒ »ý°¢À̶ó¸é ¹Ýµå½Ã ÇØ´ç ½ºÅ©¸³Æ®¸¦ ³ªÅ¸³»´Â ¹®ÀÚ¼¼Æ®¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. UTF-8Àº À¯´ÏÄÚµå ¹®ÀÚ ÀÎÄÚµùÀ¸·Î, Àü¼¼°è¿¡¼­ ½ÇÁúÀûÀ¸·Î »ç¿ëµÇ°í ÀÖ´Â ¸ðµç ¹®ÀÚ¸¦ Á¤È®ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ÆäÀÌÁö¿¡¼­ 8859-1 ´ë½Å UTF-8À» »ç¿ëÇÏ¸é ºê¶ó¿ìÀú´Â ´Ù¸¥ URLÀ» »ý¼ºÇÏ°Ô µÈ´Ù(URLÀº Æ÷¸Ë»óÀÇ ¸ñÀûÀ¸·Î µÎ Çà¿¡ °ÉÃÄ Ç¥½ÃµÈ´Ù).

   http://localhost/charconv/sayhello.jsp?
   NAME=%E7%94%B0%E4%B8%AD

ÀÌ´Â UTF-8 ¹®ÀÚ¼¼Æ®¸¦ »ç¿ëÇÏ¿© Á¤È®ÇÏ°Ô ÀÎÄÚµùµÈ NAME ¸Å°³º¯¼öÀÌ´Ù. UTF-8Àº ï£ñéÀ» ¹®ÀÚ ´ç 3¹ÙÀÌÆ®·Î ÀÎÄÚµùÇϴµ¥, °¢ ¹ÙÀÌÆ®´Â ASCII ¹üÀ§¸¦ ³Ñ´Â °ªÀ» °¡Áö¹Ç·Î ºê¶ó¿ìÀú´Â °ªÀ» URL ÀÎÄÚµùÇÑ´Ù. ÀÌ·Î½á °¢ ¹ÙÀÌÆ®¿¡ ´ëÇØ %HH ÇüŰ¡ »êÃâµÇ¸ç, UTF-8 ÇüÅ µ¥ÀÌÅ͸¦ ¿¹»óÇÏ´Â ¼­¹ö´Â ¸Å°³º¯¼ö¸¦ Á¤È®ÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

À¥ ¼­¹ö ó¸®

¾Õ¿¡¼­ º» °Íó·³, ¿äÁòÀÇ ºê¶ó¿ìÀú´Â ÆäÀÌÁö ¶Ç´Â Æû ÀÎÄÚµùÀ¸·ÎºÎÅÍ ÈùÆ®¸¦ ÃëÇÏ°í Æû µ¥ÀÌÅ͸¦ µ¿ÀÏÇÑ ÀÎÄÚµùÀ¸·Î ´Ù½Ã ¼­¹ö¿¡ Àü¼ÛÇÑ´Ù. ÇÏÁö¸¸, ´ëºÎºÐÀÇ À¥ ¼­¹öµéÀº ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» ÀνÄÇÏÁö ¸øÇÏ´Â »óÅ·Π³²¾Æ ÀÖ°Ô µÇ°í, À̵éÀº Åë»óÀûÀ¸·Î ÀÎÄÚµùÀÌ ISO-8858-1ÀÎ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ UTF-8·Î µÈ GET ¸Å°³º¯¼ö¸¦ URL ÀÎÄÚµùÇÏ´õ¶óµµ Tomcat 5.5.9³ª Sun Java System Application Server 8.1 °°Àº ¼­¹ö´Â ¹®ÀÚ¼¼Æ® ÀÎÄÚµùÀ» 8859-1·Î °¡Á¤ÇÑ´Ù. ±× °á°ú, ÅØ½ºÆ® µ¥ÀÌÅÍ´Â °£´ÜÇÑ À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ǿ¡¼­Á¶Â÷ ´Ù¾çÇÑ °èÃþÀ» °ÅÄ¡¸é¼­ °ÅÀÇ Áï½Ã ¼Õ»óµÇ´Ù½ÃÇÇ ÇÑ´Ù.

±âÁ¸ÀÇ JSP Äڵ带 UTF-8 ¹®ÀÚ¼¼Æ®¸¦ ÀÌ¿ëÇϵµ·Ï º¯°æÇÏ¸é »õ·Î¿î ÄÚµå´Â ´ÙÀ½°ú °°Àº ÇüŰ¡ µÈ´Ù.

   <%@page pageEncoding="UTF-8" contentType="text/html; 
   charset=UTF-8" %>
   <html>
       <head>
           <title>Say Hello!</title>
       </head>
       <body>
           <%
           String name = request.getParameter("NAME");
           if (name == null || name.length() == 0) {
               name = "World";
           }
           %>
           Hello, <%= name %>! <br>
           <form action="sayhello.jsp" method='GET'>
               <label for='NAME'>Name</label>
               <input type="text" id="NAME" name="NAME"/>
               <button type="submit">Submit</button> 
           </form>
       </body>
   </html>

JSP ÆäÀÌÁö¸¦ Ç¥½ÃÇÒ °æ¿ì¿¡´Â Æû¿¡ Jos鸦 ÀÔ·ÂÇϰí submit ¹öưÀ» ´©¸£¸é ºê¶ó¿ìÀú°¡ ´ÙÀ½°ú °°Àº GET URLÀ» »ý¼ºÇÑ´Ù.

   http://localhost/sayhello.jsp?NAME=Jos%C3%A9

%C3%A9´Â JoséÀÇ URL ÀÎÄÚµù UTF-8 Ç¥ÇöÀ̰í, ºê¶ó¿ìÀú´Â UTF-8ÀÌ ¹®ÀÚ¼¼Æ®·Î ÁöÁ¤µÇ¾î ÀÖ´Â contentType ¼³Á¤¿¡¼­ ÈùÆ®¸¦ ÃëÇÑ´Ù. ºê¶ó¿ìÀú°¡ ´ÙÀ½ÀÇ ÀÀ´ä ÅØ½ºÆ®¸¦ Ç¥½ÃÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

   Hello, JosA¨Ï!

¹º°¡ Ʋ·È´Ù. ºê¶ó¿ìÀú´Â GET µ¥ÀÌÅ͸¦ Á¤È®ÇÏ°Ô Àü¼ÛÇϰí ÀÖÁö¸¸ À¥ ¼­¹ö°¡ URL¿¡¼­ NAME ¸Å°³º¯¼ö Jos%C3%A9¸¦ ÀÐÀ» ¶§ 8859-1 ¹®ÀÚ¼¼Æ®¸¦ À߸ø °¡Á¤ÇÏ´Â °ÍÀÌ´Ù. À¥ ¼­¹öÀÇ °üÁ¡¿¡¼­ º¸¸é %C3 ¿£Æ¼Æ¼´Â ISO-8859-1 ¹®ÀÚ¼¼Æ®ÀÇ ÄÚµåÆ÷ÀÎÆ® 0xC3 (Ã)¸¦ ³ªÅ¸³½´Ù. %A9Àº ISO-8859-1ÀÇ 0xA9 (©)ÀÌ´Ù. JSP Áö½Ã¾î¿¡¼­ ³»¿ë À¯Çü(content type)À» ¸í½ÃÀûÀ¸·Î ¼³Á¤ÇÑ °ÍÀ» °¨¾ÈÇϸé ÀÌ´Â »ó´çÈ÷ ½Ç¸Á½º·¯¿î °á°úÀÌ´Ù. ¶ÇÇÑ, GET°ú POST µ¥ÀÌÅ͸¦ À§ÇÑ ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» Àü´ÞÇÏ´Â ¹æ½ÄÀ» ±ÔÁ¤ÇÏ´Â °ø½Ä Ç¥ÁØÀÌ ¾ø´Âµ¥, ÀÌ·¸µíÀÌ ¶Ñ·ÇÇÑ Ç¥ÁØÀÌ ¾ø±â ¶§¹®¿¡ ¼­¹ö º¥´õµéÀº ¼­·Î ´Ù¸¥ ¹æ½ÄÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. server.xml ÆÄÀÏ ³»¿¡ ÀÖ´Â TomcatÀÇ Ä¿³ØÅÍ ¼¼ÆÃ¿¡¼­ URIEncoding="UTF-8"À» ¼³Á¤ÇÏ¸é ¹®ÀÚ¼¼Æ® ¼±ÅÃÀÌ À¥ ¼­¹ö¿¡ Àü´ÞµÈ´Ù. Sun Java System Application Server 8.1ÀÇ °æ¿ì, sun-web.xml ÆÄÀÏ¿¡ À» Æ÷ÇÔ½ÃŰ¸é µÈ´Ù.

¶ÇÇÑ, GET°ú POST µ¥ÀÌÅ͸¦ À§ÇÑ ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» Àü´ÞÇÏ´Â ¹æ½ÄÀ» ±ÔÁ¤ÇÏ´Â °ø½Ä Ç¥ÁØÀÌ ¾ø´Âµ¥, ÀÌ·¸µíÀÌ ¶Ñ·ÇÇÑ Ç¥ÁØÀÌ ¾ø±â ¶§¹®¿¡ ¼­¹ö º¥´õµéÀº ¼­·Î ´Ù¸¥ ¹æ½ÄÀ¸·Î ¹®Á¦¸¦ ÇØ°áÇÑ´Ù. server.xml ÆÄÀÏ ³»¿¡ ÀÖ´Â TomcatÀÇ Ä¿³ØÅÍ ¼¼ÆÃ¿¡¼­ URIEncoding="UTF-8"À» ¼³Á¤ÇÏ¸é ¹®ÀÚ¼¼Æ® ¼±ÅÃÀÌ À¥ ¼­¹ö¿¡ Àü´ÞµÈ´Ù. Sun Java System Application Server 8.1ÀÇ °æ¿ì, sun-web.xml ÆÄÀÏ¿¡ <parameter-encoding default-charset="UTF-8"/>À» Æ÷ÇÔ½ÃŰ¸é µÈ´Ù.

´ÙÀ½Àº URLÀÌ Á¤È®ÇÏ°Ô ÇØ¼®µÈ °æ¿ìÀÇ ºê¶ó¿ìÀú µð½ºÇ÷¹ÀÌÀÌ´Ù.

ºñ ASCII µ¥ÀÌÅ͸¦ POSTÇÏ°í ½ÍÀ» ¶§´Â ¾î¶»°Ô ÇÒ±î? ¿©·¯ºÐÀº URIEncoding Ç÷¡±× ¶§¹®¿¡ À̰ÍÀÌ Á¤È®ÇÏ°Ô Ã³¸®µÉ °ÍÀ̶ó°í »ý°¢ÇÒÁöµµ ¸ð¸£°ÚÁö¸¸, ºÒÇàÈ÷µµ TomcatÀº POST µÈ Æû µ¥ÀÌÅ͸¦ À§ÇÑ URIEncoding Ç÷¡±×¸¦ »ç¿ëÇÏÁö ¾Ê°í ´ë½Å ISO-8859-1À» »ç¿ëÇÑ´Ù. µû¶ó¼­ À§ÀÇ °£´ÜÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀº ¿©ÀüÈ÷ José°¡ ¾Æ´Ñ JosA¨Ï¿¡°Ô Àλ縦 ÇÏ°Ô µÈ´Ù. ÀÌ¿Í ´Þ¸® Java System Application Server´Â ¾Õ¿¡¼­ º» °Íó·³ ¸Å°³º¯¼ö ÀÎÄÚµùÀ» ¼³Á¤ÇÒ °æ¿ì GET°ú POST µ¥ÀÌÅ͸¦ ¸ðµÎ Á¤È®ÇÏ°Ô ÇØ¼®ÇÑ´Ù.

´ÙÇàÈ÷ ¼­¹ö µ¶¸³Çü ¼Ö·ç¼Çµµ Á¸ÀçÇÑ´Ù. °¡Àå ±âº»ÀûÀÎ ¼­¹ö µ¶¸³Çü ¼Ö·ç¼ÇÀ¸·Î´Â ¾ÖÇø®ÄÉÀÌ¼Ç ³»ÀÇ ¸ðµç ÇüÅ¿¡ ´ëÇÑ ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» Áö½ÃÇÏ´Â ÄÁÅØ½ºÆ® ¸Å°³º¯¼ö¸¦ ¼³Á¤ÇÏ´Â °æ¿ì¸¦ µé ¼ö ÀÖÀ» °ÍÀÌ´Ù. »ç¿ëÀÚÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº ÄÁÅØ½ºÆ® ¸Å°³º¯¼ö¸¦ ÀÐ°í ¿äû ¸Å°³º¯¼ö¸¦ Àбâ Àü¿¡ ¿äû ¹®ÀÚ ÀÎÄÚµùÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¼­ºí¸´À̳ª JSP¿¡¼­ÀÇ ¿äû ÀÎÄÚµù ¼³Á¤µµ °¡´ÉÇÏ´Ù.

WEB-INF/web.xml ÆÄÀÏ¿¡ ÀÖ´Â ÄÁÅØ½ºÆ® ¸Å°³º¯¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.

   <context-param>
     <param-name>PARAMETER_ENCODING</param-name>
     <param-value>UTF-8</param-value>
   </context-param>

´ÙÀ½Àº ¿äû ÀÎÄÚµùÀ» ÀûÀýÈ÷ ¼³Á¤ÇÑ ÈÄÀÇ JSP ÆÄÀÏÀÇ ¸ð½ÀÀÌ´Ù.

   <%@page pageEncoding="utf-8" contentType="text/html; 
   charset=utf-8" %>

   <html>
       <head>
           <title>J2EE Tech Tip: Say Hello!</title>
       </head>
      <body>

           <%
           String paramEncoding = 
              application.getInitParameter("PARAMETER_ENCODING");
           if (paramEncoding != 
             null && paramEncoding.length() > 0) {
               request.setCharacterEncoding(paramEncoding);
           }
           String reqEncoding = request.getCharacterEncoding();
        
           String name = request.getParameter("NAME");
           if (name == null || name.length() == 0) {
               name = "World";
           }
           String resEncoding = response.getCharacterEncoding();
           %>
           <p>
               Request encoding: <%= reqEncoding %><br>
               Response encoding: <%= resEncoding %><br>
           </p>
           <p>
               Hello, <%= name %>!
           </p>
    
           <form action="sayhello.jsp" method='GET' >
               <label for='NAME'>Name</label>
               <input type="text" id="NAME" name="NAME"/>
               <button type="submit">Submit</button> 
           </form>
    
       </body>
   </html>

ÀÌÁ¦ Æû µ¥ÀÌÅ͸¦ GET ¶Ç´Â POSTÇÏµç »ó°ü¾øÀÌ ÇÁ·Î¼¼½Ì JSP ¶Ç´Â ¼­ºí¸´ Äڵ尡 ¸Å°³º¯¼ö¸¦ Á¤È®ÇÏ°Ô ÀÐÀ» ¼ö ÀÖ°Ô µÇ´Âµ¥, ÀÌ´Â ¿äû ó¸® ½Ã À¥ ¼­¹ö¿¡°Ô ¾î¶² ¹®ÀÚ¼¼Æ®¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¸íÈ®ÇÏ°Ô ÁöÁ¤Ç߱⠶§¹®¿¡ °¡´ÉÇÑ °ÍÀÌ´Ù. »ç¿ëÀÚÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ º¸´Ù °ß°íÇÑ MVC ÆÐÅÏÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â Á¦¾î ¼­ºí¸´À¸·ÎºÎÅÍ ÀÌ¿Í µ¿ÀÏÇÑ ¸Å°³º¯¼ö¸¦ ÀÐ°í ¿äû ÀÎÄÚµùÀ» ¼³Á¤ÇÏ´Â °ÍÀ» ÀØÁö ¸»µµ·Ï ÇÒ °Í.

µ¥ÀÌÅͺ£À̽º ¼¼ÆÃ

»ç¿ëÀÚÀÇ µ¥ÀÌÅͰ¡ Áö±Ý±îÁö ºê¶ó¿ìÀú ÀÎÄÚµù°ú À¥ ¼­¹ö ó¸®ÀÇ ³­°üÀ» ±Øº¹Çß´Ù°í °¡Á¤ÇÑ´Ù¸é, ÀÌÁ¦ ¹®ÀÚ µ¥ÀÌÅÍ º¯È¯ÀÇ ¸¶Áö¸· Àå¾Ö¹°Àº µ¥ÀÌÅͺ£À̽º°¡ µÉ °ÍÀÌ´Ù. µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º¿¡ ¾ÈÀüÇÏ°Ô ¹èÄ¡ÇÏ°í ¼Õ»ó ¾øÀÌ °Ë»öÇÏ·Á¸é ¹Ýµå½Ã µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀº ºê¶ó¿ìÀú¿Í ¿©·¯ºÐÀÇ ¹Ìµé Ƽ¾î ºñÁî´Ï½º ·ÎÁ÷ÀÌ Áö¿øÇÏ´Â ¸ðµç ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¼¼Æ®¿¡ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºµÇ¾î¾ß ÇÑ´Ù. º» ÆÁÀÇ °æ¿ì, ¿©Å±îÁö UTF-8À» »ç¿ëÇßÀ¸¹Ç·Î µ¥ÀÌÅͺ£À̽º¿¡¼­ ÇØ´ç ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» °è¼ÓÇÏ´Â °ÍÀÌ Å¸´çÇÒ °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀ¸¸é µ¥ÀÌÅͺ£À̽ºÀÇ ¹®ÀÚ¼¼Æ®¿¡ Á¸ÀçÇÏÁö ¾Ê´Â ¹®ÀÚ°¡ Æ÷ÇÔµÈ ÅØ½ºÆ®¸¦ ÀúÀåÇÏ·Á°í ÇÒ °æ¿ì µ¥ÀÌÅÍ´Â µ¹ÀÌų ¼ö ¾ø´Â »óÅ·Π¼Õ½ÇµÉ ¼ö¹Û¿¡ ¾øÀ» °ÍÀÌ´Ù.

¿ä¾à

¿ä¾àÇÏÀÚ¸é, ¹®ÀÚ µ¥ÀÌÅͰ¡ ºê¶ó¿ìÀú¿¡¼­ µ¥ÀÌÅͺ£À̽º·Î(¶Ç´Â ¿ªÀ¸·Î) Àü´ÞµÉ ¶§ ¼Õ½ÇÀ» ¸·±â À§Çؼ­´Â ´ÙÀ½°ú °°Àº Á¶Ä¡ »çÇ×À» ÃëÇØ¾ßÇÑ´Ù.

  • Ç×»ó HTML META ű׳ª JSP @page Áö½Ã¾î¸¦ »ç¿ëÇÏ¿© HTML ¶Ç´Â JSP ÆäÀÌÁö¿¡ ¹®ÀÚ¼¼Æ® Á¤º¸¸¦ Á¦°øÇÑ´Ù. ÀÌ Á¤º¸´Â ºê¶ó¿ìÀú¿¡°Ô ÆäÀÌÁöÀÇ ÅØ½ºÆ®¸¦ ÇØ¼®ÇÏ´Â ¹æ¹ýÀ» ÀÏ·¯ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù.

  • ¸ðµç ´Ù±¹¾î ¹× ÀÛ¼º ½ºÅ©¸³Æ®¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â HTML ¹®ÀÚ¼¼Æ® ÀÎÄÚµùÀ» »ç¿ëÇϵµ·Ï ÇÑ´Ù. UFT-8Àº ´Ù¾çÇÑ ½ºÅ©¸³Æ®¸¦ Ç¥ÇöÇÒ ¼ö Àֱ⠶§¹®¿¡ ´ëºÎºÐÀÇ »óȲ¿¡ À־ °¡Àå ÀûÇÕÇÑ ¼±ÅÃÀ̶ó ÇÒ ¼ö ÀÖ´Ù.

  • À¥ ¼­¹ö¿¡°Ô ¿äû ¸Å°³º¯¼ö ó¸® ½Ã »ç¿ëÇÒ ¹®ÀÚ ÀÎÄÚµùÀ» ÀÏ·¯ÁØ´Ù. ÀÌ °æ¿ì, ¼­ºí¸´ ÃʱâÈ­ ¸Å°³º¯¼ö ¶Ç´Â ÄÁÅØ½ºÆ® ¸Å°³º¯¼ö¸¦ ÀÌ¿ëÇÑ´Ù.

  • ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëÇÏ°Ô µÉ ¸ðµç ¹®ÀÚ¼¼Æ®ÀÇ ¼öÆÛ¼¼Æ®ÀÎ µ¥ÀÌÅͺ£À̽º ¹®ÀÚ¼¼Æ®¸¦ »ç¿ëÇÑ´Ù. ÀÌ °æ¿ì¿¡µµ À¯´ÏÄÚµå ÀÎÄÚµùÀº ¹«³­ÇÑ ¼±ÅÃÀÌ´Ù. ¶ÇÇÑ, µ¥ÀÌÅͺ£À̽º ¹®ÀÚ¼¼Æ® ÀÎÄÚµùÀ¸·Î UTF-8À̳ª UTF-16À» °í·ÁÇϵµ·Ï ÇÒ °Í.
¸Ç À§·Î

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù.

SKDN(Sun Korea Developers Network)¿¡¼­ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä.

Copyright 2003-2005 Sun Korea, Ltd. All rights reserved.