![]() |
||||||
|
||||||
|
À̹ø È£¿¡¼´Â, » JAX-WS¸¦ ÀÌ¿ëÇÑ À¥ ¼ºñ½º °³¹ß » ºê¶ó¿ìÀú¿¡¼ µ¥ÀÌÅͺ£À̽º·Î ¹®ÀÚ¼¼Æ® º¯È¯Çϱ⠿¡ ´ëÇØ ´Ù·ì´Ï´Ù. ÀÌ Å×Å©ÆÁÀº Java EE 5ÀÇ ¿ÀǼҽº ·¹ÆÛ·±½º(ÇÁ·ÎÁ§Æ®¸í: GlassFish)¸¦ ±¸ÇöÇÏ¿© °³¹ßµÇ¾ú½À´Ï´Ù.GlassFish´Â https://glassfish.dev.java.net/ ¿¡¼ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù. -»ùÇà ¾ÆÄ«ÀÌºê ¹Þ±â- JAX-WS¸¦ ÀÌ¿ëÇÑ À¥ ¼ºñ½º °³¹ß |
||
| 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·Î Å×½ºÆ®¸¦ °ÅÃÆÀ½.) ±×¸®°í ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.
Also, add the ant location to your
ÀÌ¾î¼ ¿¹Á¦ ÆÐŰÁö¸¦ ´Ù¿î·ÎµåÇÏ°í ¾ÐÃàÀ» ÇØÁ¦ÇÑ´Ù. º» ÆÁÀÇ ¸ÞÀÎ µð·ºÅ͸®´Â À¥ ¼ºñ½º ±¸ÃàÇϱâ
Ãʱ⠼¾÷ÀÌ ¿Ï·áµÈ ´ÙÀ½¿¡´Â À¥ ¼ºñ½º¸¦ ±¸ÃàÇÒ Â÷·Ê´Ù. º» ¿¹Á¦ÀÇ °æ¿ì,
¿£µåÆ÷ÀÎÆ® ±¸Çö Ŭ·¡½º ÀÛ¼º
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 ½ºÆå¿¡ Á¤ÀÇµÈ Ãß°¡ ÁÖ¼®À» ÁÖ·Î »ç¿ëÇÑ´Ù.
±¸Çö Ŭ·¡½º ÄÄÆÄÀÏ ±¸Çö Ŭ·¡½º¸¦ ÄÚµùÇÑ ÈÄ¿¡´Â ÄÄÆÄÀÏÀ» ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÏ¿© GlassFish¸¦ ½ÃÀÛÇÑ´Ù. <GF_install_dir>\bin\asadmin start-domain domain1
ÀÌ ¶§, ant compile
ÀÌ ¸í·É¾î¸¦ ½ÇÇàÇÏ´Â °ÍÀº ´ÙÀ½ javac -classpath $GLASSFISH_HOME/lib/javaee.jar -d ./build/classes/service/ endpoint/Calculator.java À¥ ¼ºñ½º ½ÇÇàÀ» À§ÇÑ portable artifact »ý¼º ÀÌ ´Ü°è´Â ¿É¼Ç»çÇ×À¸·Î, À¥ ¼ºñ½º ¹èÄ¡ °úÁ¤¿¡¼ GlassFishÀÇ ¹èÄ¡ Åø¿¡ ¹èÄ¡ °¡´ÉÇÑ ¼ºñ½º À¯´ÖÀÌ ¹øµé·Î Æ÷ÇÔµÇÁö ¾ÊÀº °æ¿ì¿¡´Â ÀÚµ¿ÀûÀ¸·Î artifacts¸¦ »ý¼ºÇÑ´Ù. ÇÏÁö¸¸, ÀÌ artifacts¸¦ ¼öµ¿À¸·Î »ý¼ºÇϱ⸦ ¿øÇÒ °æ¿ì¿¡´Â ´ÙÀ½ÀÇ ¸í·É¾î¸¦ ½ÇÇàÇÑ´Ù. ant generate-runtime-artifacts
ÀÌ °æ¿ì, $GLASSFISH_HOME/bin/wsgen -cp ./build/classes/service -keep -d ./build/classes/service -r ./build/generated -wsdl endpoint.Calculator
JavaBean ±â¼ú ÄÄÆ÷³ÍÆ®(JavaBeans)´Â ¸Þ¼Òµå È£Ãâ, ÀÀ´ä, ¹× ¼ºñ½ºº° ¿¹¿ÜÀÇ Á¤·ÄÀ» µµ¿ÍÁִµ¥,
ÀÌ Å¬·¡½º´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¼¹ö¿¡¼ À¥ ¼ºñ½º¸¦ ½ÇÇàÇÏ´Â °úÁ¤¿¡¼ »ç¿ëµÈ´Ù.
JavaBean Ŭ·¡½º´Â Add.java Add.class AddResponse.java AddResponse.class WAR ÆÄÀÏ ÆÐŰ¡ ¹× ¹èÄ¡ ÀÌ¾î¼ ¼ºñ½º¸¦ ÆÐŰ¡ÇÏ°í ¹èÄ¡ÇØ¾ß Çϴµ¥, À̸¦ À§Çؼ´Â ¹èÄ¡ ¼¼úÀÚ(deployment descriptor)¿¡ ¼ºñ½º¿¡ °üÇÑ ¼¼ºÎ»çÇ×À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. À¥ ¼ºñ½º´Â ¼ºí¸´ ¶Ç´Â stateless ¼¼¼Ç ºóÀ¸·Î ¹øµé¸µµÉ ¼ö ÀÖÀ¸¸ç, ¼ºí¸´À¸·Î ¹øµé¸µµÈ À¥ ¼ºñ½º´Â Web Archive(WAR) ÆÄÀÏ¿¡ ÆÐŰ¡µÈ´Ù. ÇÑÆí, º» ÆÁ¿¡¼´Â ¼ºñ½º°¡ ¼ºí¸´À¸·Î ¹øµé¸µµÈ´Ù.
¼ºñ½º¸¦ WAR ÆÄÀÏ·Î ÆÐŰ¡ÇÏ·Á¸é 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 Ŭ¶óÀÌ¾ðÆ® ±¸Ãà À¥ ¼ºñ½º¸¦ ¹èÄ¡ÇÑ ÈÄ¿¡´Â Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¿¡¼ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Ŭ¶óÀÌ¾ðÆ® ±¸Ãà ´Ü°èÀÌ´Ù.
Ŭ¶óÀÌ¾ðÆ® ÀÛ¼º
´ÙÀ½ ÇÁ·Î±×·¥
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();
}
}
}
À¥ ¼ºñ½º¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¼±¾ðÇÏ´Â µ¥´Â
Ŭ¶óÀÌ¾ðÆ®´Â Å¬¶óÀÌ¾ðÆ®¸¦ À§ÇÑ portable artifact »ý¼º
¾Õ¿¡¼ ¾ð±ÞÇÑ °Íó·³ ant generate-client-artifacts
ÀÌ´Â ´ÙÀ½ $GLASSFISH_HOME/bin/wsimport -keep -d ./build/classes/client http://localhost:8080/jaxws-webservice/CalculatorService?WSDL
ÀÌ °æ¿ì, 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 ÄÄÆÄÀÏ Å½ºÅ©´Â 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
ÀÌ´Â $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
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 ÆÄÀÏÀÇ Ã¹ ¹øÂ° ¿ä¼Ò¿©¾ß Çϰí, ¶Ç ¹®ÀÚ¼¼Æ® ¼³Á¤ÀÌ ÀÖ´Â
<%@page pageEncoding="UTF-8" contentType="text/html;
charset=UTF-8"%>
...
ÀÌÁ¦ ÆäÀÌÁö°¡ Á¤È®ÇÏ°Ô ÀÎÄÚµùµÇ°í ÇÊ¿äÇÑ Á¤º¸¸¦ ºê¶ó¿ìÀú¿¡ Àü´ÞÇÑ´Ù.
ÇÏÁö¸¸, ¾ÆÁ÷ ºê¶ó¿ìÀú¿¡´Â ¾Æ¹«°Íµµ Àü´ÞµÇÁö ¾ÊÀº »óÅÂÀÌ´Ù. À̹ø¿¡µµ ºê¶ó¿ìÀú´Â HTTP Çì´õ ¶Ç´Â HTML META ű׿¡ ÀúÀåµÈ ¹®ÀÚ¼¼Æ® Á¤º¸·ÎºÎÅÍ ÆäÀÌÁöÀÇ ÀÎÄÚµù Á¤º¸¸¦ ¾ò°Ô µÇ´Âµ¥, ºê¶ó¿ìÀú ¿ª½Ã GET ¶Ç´Â POST ¸í·É¾î¸¦ À§ÇÑ Æû µ¥ÀÌÅ͸¦ ÀÎÄÚµùÇÒ ¶§ ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇÑ´Ù.
HTML FORM ű׿¡ ´ÙÀ½ 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=田中 ÀÌ¾î¼ URL ÀÎÄÚµùÀÌ ¼öÇàµÇ¾î Ư¼ö¹®ÀÚ&, #, ;¸¦ ÇØ´ç %HH °ªÀ¸·Î º¯È¯ÇÑ´Ù. NAME=%26%2330000%3B%26%2320013%3B JSP ÆäÀÌÁö°¡ ÀÌ ¸Å°³º¯¼ö¸¦ °Ë»öÇÏ¿© ±×´ë·Î ºê¶ó¿ìÀú¿¡ ¹ÝȯÇÑ´Ù¸é ¿Ü°ü»óÀ¸·Î´Â µ¥ÀÌÅÍ ¼Õ½ÇÀÌ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ÆäÀÌÁöÀÇ ¹®ÀÚ¼¼Æ®´Â ¿©ÀüÈ÷ 8859-1ÀÌÁö¸¸ ºê¶ó¿ìÀú´Â ¼ýÀÚ ·¹ÆÛ·±½º¸¦ ÇØ¼®ÇÏ°í ±×¿¡ µû¶ó ÀϺ»¾î ¹®ÀÚ¸¦ Ç¥½ÃÇϱâ À§ÇØ ÃÖ¼±À» ´ÙÇÑ´Ù. ÇÏÁö¸¸, ¿©±â¿¡´Â ¿©ÀüÈ÷ ¹®Á¦Á¡ÀÌ Àáº¹ÇØ Àִµ¥, Áï GET°ú POST ¸í·É¾î¸¦ ó¸®ÇÏ´Â ¼¹ö Ãø Äڵ尡 Åë»óÀûÀ¸·Î URL ÀÎÄÚµù ¹®ÀÚ¿Àº ÀÌÇØÇÏÁö¸¸ ¼ýÀÚ ·¹ÆÛ·±½º´Â ÀÌÇØÇÏÁö ¸øÇÑ´Ù´Â Á¡ÀÌ´Ù. ÀÌÀüÀÇ NAME ¸Å°³º¯¼ö¸¦ Àд ´ëºÎºÐÀÇ ¼ºí¸´ÀÇ °æ¿ì, ¹®ÀÚ¿À» 田中À¸·Î µðÄÚµùÇϰí À̰ÍÀÌ ÀÏ¹Ý ¹®ÀÚ¿Í ÀüÇô ´Ù¸¥ °ÍÀ» ³ªÅ¸³½´Ù´Â »ç½ÇÀ» ¸ð¸¦ °ÍÀÌ´Ù. ´Þ¸® ¸»Çؼ, ï£ñé¿¡ ´ëÇÑ ÁøÂ¥ ÀϺ»¾î ¹®ÀÚ´Â ¾Ë ¼ö ¾ø°Ô µÇ´Â °ÍÀÌ´Ù(ÀǵµÀûÀ¸·Î ÀÌ·± »óȲÀ» °èȹÇÏÁö ¾Ê´Â ÇÑ). ¶ÇÇÑ, ½ÇÁ¦ ¹®ÀÚ¼¼Æ® ÄÚµåÆ÷ÀÎÆ® ¶Ç´Â ÀÎÄÚµù °ª ´ë½Å¿¡ ¼ýÀÚ ·¹ÆÛ·±½º¸¦ Àü¼ÛÇØ¼´Â ¾È µÇ´Âµ¥, ±×·¸Áö ¾ÊÀ» °æ¿ì ¹®ÀÚ°¡ °è¼Ó ¾ÖÇø®ÄÉÀ̼ÇÀ» Åë°úÇϱ⠶§¹®¿¡ µ¥ÀÌÅÍ ¼Õ½ÇÀÌ ÃÊ·¡µÉ ¿ì·Á°¡ ÀÖ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é Ç×»ó ó¸® ´ë»ó ¹®ÀÚ¸¦ ¸ðµÎ ó¸®ÇÒ ¼ö ÀÖ´Â 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ÀÌ ¹®ÀÚ¼¼Æ®·Î ÁöÁ¤µÇ¾î ÀÖ´Â 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ÀÇ Ä¿³ØÅÍ ¼¼ÆÃ¿¡¼ ´ÙÀ½Àº 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À» »ç¿ëÇßÀ¸¹Ç·Î µ¥ÀÌÅͺ£À̽º¿¡¼ ÇØ´ç ¹®ÀÚ¼¼Æ® ¼±ÅÃÀ» °è¼ÓÇÏ´Â °ÍÀÌ Å¸´çÇÒ °ÍÀÌ´Ù. ±×·¸Áö ¾ÊÀ¸¸é µ¥ÀÌÅͺ£À̽ºÀÇ ¹®ÀÚ¼¼Æ®¿¡ Á¸ÀçÇÏÁö ¾Ê´Â ¹®ÀÚ°¡ Æ÷ÇÔµÈ ÅØ½ºÆ®¸¦ ÀúÀåÇÏ·Á°í ÇÒ °æ¿ì µ¥ÀÌÅÍ´Â µ¹ÀÌų ¼ö ¾ø´Â »óÅ·Π¼Õ½ÇµÉ ¼ö¹Û¿¡ ¾øÀ» °ÍÀÌ´Ù. ¿ä¾à ¿ä¾àÇÏÀÚ¸é, ¹®ÀÚ µ¥ÀÌÅͰ¡ ºê¶ó¿ìÀú¿¡¼ µ¥ÀÌÅͺ£À̽º·Î(¶Ç´Â ¿ªÀ¸·Î) Àü´ÞµÉ ¶§ ¼Õ½ÇÀ» ¸·±â À§Çؼ´Â ´ÙÀ½°ú °°Àº Á¶Ä¡ »çÇ×À» ÃëÇØ¾ßÇÑ´Ù.
|
|||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2005 Sun Korea, Ltd. All rights reserved. |