IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

Ä¿½ºÅÒ Å±׷ΠJSP ÆäÀÌÁö Á¦¾îÇϱâ
Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸® Åë½ÅÀÇ ¸ðµç °Í

Jeff K. Wilson
E-ºñÁî´Ï½º ¼³°èÀÚ, IBM
2002³â 1¿ù

JavaServer Pages ±â¼úÀº À¥ °³¹ßÀڵ鿡°Ô Áß¿äÇÑ ±â´ÉÀ» Á¦°øÇÏÁö¸¸, ¸¹Àº °³¹ßÀÚµéÀÌ ÀÌ ±â¼úÀÇ Àü ´É·ÂÀ» È°¿ëÇÏÁö ¸øÇÏ°í ÀÖ´Ù. e-ºñÁî´Ï½º ¼³°èÀÚÀÎ Jeff Wilson (IBMÀÇ Á¸°æ¹Þ´Â DragonSlayers ÆÀÀÇ ¸â¹öÀ̱⵵ ÇÔ)Àº ÀÌ ±â¼ú¿¡¼­ ´õ ¸¹Àº °ÍÀ» ¾ò¾î ³»±â À§ÇÏ¿© JSP ű׸¦ Ä¿½ºÅ͸¶ÀÌÁîÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ÀÌ ±Û¿¡¼­ ±×°¡ »ó¼¼È÷ ¼³¸íÇÑ ±â¹ýÀ» ÀÌ¿ëÇؼ­ ¿©·¯ºÐÀº JSP¿¡ º¸´Ù º¹ÀâÇÑ ·ÎÁ÷À» Ãß°¡ÇÏ°í µ¥ÀÌÅÍ È­¸é Ãâ·ÂÀ» ´õ ¾ö°ÝÇÏ°Ô Á¦¾îÇÏ°í ÅÂ±× °£¿¡ µ¥ÀÌÅ͸¦ °øÀ¯½Ãų ¼ö Àִµ¥, Àϼ± À¥ °³¹ßÀڵ鿡°Ô ÀÚ¹Ù ÄÚµå ÀÛ¼º¹ýÀ» °¡¸£Ä¡Áö ¾Ê°íµµ ÀÌ ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù.

¿©·¯ºÐÀÌ À¥ °³¹ß¿¡ °ü¿©ÇÏ°í ÀÖ´Ù¸é ¿©·¯ºÐÀº ¿À´Ã³¯ÀÇ À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀÌ º¸´Ù µ¿ÀûÀ¸·Î »ý¼ºµÇ´Â ÄÁÅÙÃ÷¿Í °³ÀÎÈ­µÈ µ¥ÀÌÅ͸¦ ±× ¾î´À ¶§º¸´Ù ´õ ¸¹ÀÌ ¿ä±¸ÇÑ´Ù´Â »ç½ÇÀ» Àß ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. »ç¿ëÀÚ¿¡°Ô Ä£±ÙÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¼³°èÇÑ´Ù´Â °ÍÀº Àϼ± °³¹ßÀÚµéÀÌ ¼÷·ÃµÈ ½Ã°¢Àû ¼³°è ½ºÅ³À» °¡Áö°í ÀÖ¾î¾ß ÇÒ »Ó ¾Æ´Ï¶ó ÄÁÅÙÃ÷ÀÇ È帧À» °ü¸®ÇÏ°í È°¿ëÇϴµ¥µµ ´É¼÷ÇØ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù.

»ç¿ëÀÚ Á¤ÀÇ (Ä¿½ºÅÒ) JSP ű״ ÀÌ·¯ÇÑ Àϼ± °³¹ßÀڵ鿡°Ô JSP ÆäÀÌÁö¿¡ ¾Æ¹«·± ÀÚ¹Ù Äڵ带 ÀÛ¼ºÇÏÁö ¾Ê°íµµ ¹é¿£µå ÀÚ¹Ù ÄÄÆ÷³ÍÆ®¿¡¼­ µ¥ÀÌÅÍ°¡ 󸮵Ǵ ¹æ½ÄÀ» Á¦¾îÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇÑ´Ù.

ÀÌ ±Û¿¡¼­ ¿ì¸®´Â Ä¿½ºÅÒ Å±װ¡ ¼­·Î ¾î¶»°Ô Åë½ÅÇÏ°í À̵éÀ» °áÇÕ½ÃÅ°¸é Àç»ç¿ë¼º°ú À¯¿¬¼ºÀÌ ¾î¶»°Ô ³ô¾ÆÁö´ÂÁö¿¡ Æ÷Ä¿½º¸¦ ¸ÂÃâ °ÍÀÌ´Ù. ¶ÇÇÑ ¸î °¡Áö ¿¹µµ »ìÆì º¸°Ú´Ù.

Ä¿½ºÅÒ ÅÂ±× °³¿ä

Ä¿½ºÅÒ Å±״ <jsp:useBean .../>¿Í <jsp:getProperty .../> °°Àº ÀϹÝÀûÀÎ JSP ű׺¸´Ù ´õ Áøº¸µÇ°í À¯¿¬ÇÏ´Ù. Ä¿½ºÅÒ Å±װ¡ ÀÏ¹Ý JSP ű׿¡ ºñÇØ °¡Áö´Â ÁÖ¿ä ÀåÁ¡ Áß Çϳª´Â Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇϸé JSP °³¹ßÀÚ°¡ µ¥ÀÌÅ͸¦ ÅÂ±× ¼Ó¼ºÀ̳ª ½ÃÀÛ°ú ³¡ ÅÂ±× ÅÂ±× »çÀÌ¿¡ À§Ä¡½ÃÅ´À¸·Î½á ÀÔ·Â »çÇ×À» Àü´ÞÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù.

Ä¿½ºÅÒ JSP ű״ ´ÙÀ½ ¼¼ ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.:

  • űװ¡ »ç¿ëµÇ´Â JSP ÆäÀÌÁö
  • ű׸¦ ó¸®ÇÏ´Â Àڹ٠Ŭ·¡½ºÀÎ ÅÂ±× Çڵ鷯 (tag handler)
  • ű׵éÀ» ÇϳªÀÇ "¶óÀ̺귯¸®"·Î ¹­°í, ¼Ó¼º, ÅÂ±× Ã³¸®¸í, ´ÜÃà¸í µî °¢ ű×ÀÇ ¼¼¸ñÀ» ±â¼úÇÏ´Â XML ÆÄÀÏÀÎ ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ (tag library descriptor) .

Ä¿½ºÅÒ Å±״ Å±×ÀÇ ¼Ó¼ºÀ¸·Î ÀÔ·ÂµÈ »çÇ׿¡ ±â¹ÝÇÏ¿© ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃÅ°µµ·Ï ±¸¼ºµÉ ¼ö ÀÖ°í, JSP ÆäÀÌÁö ³»¿¡ ÀÓº£µðµåµÈ ÀÚ¹Ù Äڵ带 µÑ ÇÊ¿ä°¡ ¾ø´Ù.

¿¹Á¦¸¦ »ìÆì º¸ÀÚ. Listing 1Àº »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¸ðµç Á¦Ç°¿¡ ´ëÇØ Å×À̺íÀÇ ÇÑ ÇàÀ» ¸¸µå´Â ¼îÇÎ Ä«Æ® ű×ÀÌ´Ù.:

Listing 1. ¼îÇÎ Ä«Æ® ű×

<table width="100%" border="0">
  <user:getUserShoppingList userId="13">
  <tr>
    <td>
    <a href="/servlet/productDataServlet?prodID=$_productId">$_productName</a>
    </td>
    <td>$_productDescription</td>
  </tr>
  </user:getUserShoppingList>
</table>

ÀÌ °æ¿ì, ÅÂ±× Ã³¸®ÀÚ Å¬·¡½º´Â HTML°ú »ç¿ëÀÚ ID°¡ °á°ú·Î ³ª¿À´Â Ãâ·Â (ÀÌ °æ¿ì¿¡´Â Å×À̺íÀÇ ÇÑ Çà)¿¡ ´ëÇÑ ÅÛÇø´À¸·Î Àü´ÞµÇ±â¸¦ ±â´ëÇÑ´Ù. ´Ù¾çÇÑ $_product...ÂüÁ¶´Â ÅÂ±× Çڵ鷯¿¡¼­ ¹Ýº¹ ¼öÇàµÇ´Â Á¦Ç°µéÀÇ ½ÇÁ¦ °ªÀ¸·Î ±³Ã¼µÉ °ÍÀ̸ç, ÀÌ°ÍÀÌ Å±׸¦ ±¸ÇöÇÏ´Â Àڹ٠Ŭ·¡½ºÀÌ´Ù.

ÀÌ°ÍÀº Ä¿½ºÅÒ Å±×ÀÇ ¶Ç ´Ù¸¥ ÁÖ¿ä ÀåÁ¡À» º¸¿© ÁØ´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¸ÓµéÀº µ¥ÀÌÅ͸¦ Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀçÀü¼ÛÇϱâ Àü±îÁö µ¥ÀÌÅÍ Æ÷¸ËÀ» ¾î¶»°Ô ÇÒÁö ¾Ë ÇÊ¿ä°¡ ¾ø´Ù. ¶ÇÇÑ ³»¿ëÀº À¯»çÇѵ¥ Æ÷¸ËÀÌ ´Ù¸¥ µ¥ÀÌÅ͸¦ ¿ä±¸ÇÏ´Â »õ·Î¿î ÆäÀÌÁö°¡ °³¹ßµÇ°Å³ª ÇöÀç ÆäÀÌÁöÀÇ ¸ð½ÀÀÌ ¹Ù²ð ¶§ ÀÚ¹Ù ÄÄÆ÷³ÍÆ®¸¦ ¾÷µ¥ÀÌÆ®ÇÒ ÇÊ¿ä°¡ ¾øÀ» °ÍÀÌ´Ù.

À¯Çü »Ó ¾Æ´Ï¶ó È­¸é ·ÎÁ÷µµ Á¦¾îÇϱâ

Ä¿½ºÅÒ Å±×ÀÇ ¶Ç ´Ù¸¥ ¾ÆÁÖ Áß¿äÇÑ ÀåÁ¡Àº °°Àº ÆäÀÌÁö »óÀÇ ´Ù¸¥ ÅÂ±×¿Í Åë½ÅÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ±âÁ¸ÀÇ JSP ű׿¡¼­´Â °³¹ßÀÚµéÀÌ JavaBean ÄÄÆ÷³ÍÆ®ÀÇ ÇൿÀ» Á¦¾îÇϱâ À§ÇØ Æ¯¼ºÀ» ¼³Á¤ÇÒ ¼ö ÀÖ¾úÁö¸¸, ºóÀº ±× ÀÚ½ÅÀÌ ÇÒ ¼ö ÀÖ´Â °Í¸¸ ÇÒ »ÓÀÌ´Ù.

ÇÁ·Î¼¼½º¸¦ º¸´Ù ÀÛÀº ÄÄÆ÷³ÍÆ®µé·Î ³ª´®À¸·Î½á JSP °³¹ßÀÚµéÀº Ä¿½ºÅÒ Å±׵éÀ» ¼¯°í ¸ÂÃâ ¼ö ÀÖÀ¸¸ç, À̸¦ ÅëÇØ µ¿ÀûÀÎ ÄÁÅÙÃ÷¿¡ ´ëÇÑ Á¦¾î·ÂÀ» ³ôÀÏ ¼ö ÀÖµµ·Ï º¸´Ù º¹ÀâÇÑ ÇÁ·Î¼¼½º¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù.

ÇÑ Ä¿½ºÅÒ Å±×ÀÇ Ãâ·ÂÀ» ´Ù¸¥ ű׿¡ ´ëÇÑ ÀÔ·ÂÀ¸·Î »ç¿ëÇϸé ű×ÀÇ Àç»ç¿ë¼ºÀÌ ³ô¾ÆÁø´Ù. ¿¹¸¦ µé¾î, À§ÀÇ ¿¹¿¡¼­ »ç¿ëÀÚ ¼îÇÎ Ä«Æ® ű״ ±¸¸ÅÇÑ Á¦Ç°¿¡ ´ëÇÑ ¸ðµç Á¤º¸¸¦ º¸À¯ÇÏ°í ÀÖ´Ù. »ç¿ëÀÚ Å±״ Á¦Ç° ID¸¸À» °¡Áö°í ´Ù¸¥ ÅÂ±× (Á¦Ç° ű×)°¡ Á¦Ç° µ¥ÀÌÅ͸¦ ÇÊ¿ä¿¡ µû¶ó °ü¸®Çϵµ·Ï ÇÏ¸é ´õ ÈḢÇÑ ¼³°è°¡ µÉ °ÍÀÌ´Ù. ÀÏ´Ü Á¦Ç° »ó¼¼ »çÇ×À» ¸ðÀ¸´Â ÇÁ·Î¼¼½º¸¦ ºÐ¸®½ÃÅ°¸é ¿©·¯ºÐÀº ÀÌ·± ¸ñÀûÀ¸·Î ´Ù¸¥ ÅÂ±×¿Í ÇÔ²² »ç¿ëµÉ ¼ö ÀÖ´Â Á¦Ç° ű׸¦ °¡Áö°Ô µÈ´Ù.

ÀÌ´Â °Ë»öµÈ µ¿ÀûÀÎ µ¥ÀÌÅ͸¦ Á¦¾îÇϱâ À§ÇÑ °´Ã¼ÁöÇâÀû ¹æ½ÄÀ» ¸¸µé¾î³»°í, Àϼ± °³¹ßÀÚµéÀº ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ ¾ËÁö ¸øÇصµ ÀÌ ¹æ½ÄÀ» µû¶ó°¥ ¼ö ÀÖ´Ù.

Listing 2ÀÇ ÄÚµå´Â ½ÇÇà ÁßÀÎ ÀÌ ¹æ½ÄÀ» º¸¿©ÁØ´Ù. ¶ÇÇÑ »ç¿ëÀÚÀÇ ¼îÇÎ ¸ñ·Ï ű״ error:setErrorTemplateÀ̶ó´Â ´Ù¸¥ ű׸¦ ±¸ÇöÇÑ´Ù´Â Á¡¿¡ ÁÖÀÇÇÑ´Ù. ÀÌ ¿¹¿¡¼­ ¾î¶² Á¦Ç°µµ ¹ß°ßµÇÁö ¾ÊÀ» °æ¿ì ¿ì¸®´Â ¿¡·¯ ¸Þ½ÃÁö°¡ ³ªÅ¸³ª±â¸¦ ¿øÇÑ´Ù. ¿ì¸®ÀÇ Á¦Ç° ¸ñ·Ï¿¡ ÇÊ¿äÇÑ 2¿­·Î µÈ Å×À̺íÀÌ ¿¡·¯ ¸Þ½ÃÁö¿¡ ±×¸® ÀûÀýÇÏÁö ¾ÊÀ» °ÍÀÓÀ» ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

Listing 2. °´Ã¼ ÁöÇâÀû ¹æ½Ä


<table width="100%" border="0">
  <tr class="headerRow">
    <td>Product Name</td>
    <td>Product Description</td><tr>
  </tr>
  <user:getUserShoppingList userId="13">
    <products:getProductData productId="$_productId"/>
    <tr>
      <td>
        <a href="/servlet/productDataServlet?$_productId">$_productName</a>
      </td>
      <td>$_productDescription</td>
    </tr>
    <error:setErrorTemplate>
    <tr class="errorRow">
        <td colspan="2">You have nothing in your shopping cart...</td>
    </tr>
    </error:setErrorTemplate>
  </user:getUserShoppingList>
</table>

ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â »çÀü Á¤ÀÇµÈ Æ¯Á¤ ȯ°æ ÇÏ¿¡¼­ º¯°æµÈ Æ÷¸ËÀ» ó¸®Çϵµ·Ï ¼³°èµÉ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº JSP °³¹ßÀÚ°¡ JSP ÆäÀÌÁö ³»¿¡ if ÀýÀ̳ª ´Ù¸¥ ÀÚ¹Ù Äڵ带 »ç¿ëÇÏÁö ¾Ê°íµµ ¾î¶»°Ô µ¥ÀÌÅÍÀÇ ³í¸®Àû È帧À» Á¦¾îÇÒ ¼ö ÀÖ´ÂÁö¸¦ º¸¿©ÁÖ´Â ÁÁÀº ¿¹ÀÌ´Ù. Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇØ JSP °³¹ßÀÚµéÀº ¾î¶»°Ô Ç¥½ÃµÇ´ÂÁö »Ó ¾Æ´Ï¶ó ¹«¾ùÀÌ Ç¥½ÃµÇ´ÂÁö¸¦ ÆǺ°ÇÏ´Â ¹æ¹ýµµ Á¤ÇÒ ¼ö ÀÖ´Ù.

´Ù¸¥ »óȲ¿¡¼­, µ¿ÀÏÇÑ Á¦Ç° µ¥ÀÌÅÍ Å±װ¡ Á¦Ç° ¸ñ·ÏÀ» °¡Áø ´Ù¸¥ ű׿¡ Àç»ç¿ëµÉ ¼ö ÀÖ´Ù. Listing 3¿¡¼­ ´Ù¸¥ HTMLÀÌ Å±׷ΠÀü´Þ

Listing 3. Á¦Ç° ¸ñ·Ï°ú »ç¿ëµÇ´Â Á¦Ç° µ¥ÀÌÅÍ Å±×

<table width="100%" border="0">
  <products:getProductList category="fitness">
    <products:getProductData productId="$_productId"/>
    <tr>
      <td rowspan="2">
        <a href="/servlet/productDataServlet?$_productId"><img 
        src="$_productImage" border="0"></a></td>
      <td>
      <a href="/servlet/productDataServlet?$_productId">$_productName</a>
      </td>
    </tr>
    <tr>
      <td>$_productDescription: $_productPrice</td>
    </tr>
    <error:setErrorTemplate>
    <tr>
      <td colspan="2" class="errorRow">Sorry, no products in this category...</td>
    </tr>
    </error:setErrorTemplate>
  </user:getUserShoppingList>
</table>

ÅÂ±× Åë½Å ¸Þ¼Òµå : ÀåÁ¡ ¹× ¿¹Á¦

Ä¿½ºÅÒ Å±װ¡ ¼­·Î¸¦ ÂüÁ¶ÇÏ°í µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ´Â ¸î °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ÀûÀýÇÑ ¸Þ¼Òµå°¡ ¹«¾ùÀ̳Ĵ ¹°·Ð »óȲ¿¡ ´Þ·Á ÀÖÀ» °ÍÀÌ´Ù.

Áßø ű×
ÇÑ Å±װ¡ ´Ù¸¥ ű׿¡ ÀÇÇØ ¿ÏÀüÈ÷ µÑ·¯½Î¿©Á® ÀÖÀ» ¶§ űװ¡ ÁßøµÇ¾î ÀÖ´Ù°í ¸»ÇÑ´Ù. :

<outer:tag><inner:tag/></outer:tag>

ÇÑ Å±׸¦ ´Ù¸¥ ÅÂ±× ³»¿¡ µÎ±â À§ÇØ Æ¯º°ÇÑ ¼³Á¤À̳ª ÄÚµùÀÌ ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. ÇÑ Å±װ¡ ÇÑ °÷¿¡ ÁßøµÉ ¼ö ÀÖ°í ±× ÀÚü·Î ´Ù¸¥ °÷¿¡ ÁßøµÉ ¼ö ÀÖ´Ù. ¹°·Ð ÀϺΠű״ ´Ù¸¥ ÅÂ±×µé ³»¿¡ ÁßøµÇµµ·Ï ¼³°èµÇ°ÚÁö¸¸, űװ¡ Áßø °¡´ÉÇÏ´Ù°í ¼±¾ðÇϱâ À§ÇØ Æ¯º°È÷ ÇÊ¿äÇÑ °ÍÀº ¾ø´Ù.

¿©·¯ºÐÀº HTML Å×À̺í, Å×À̺íÀÇ Çà°ú Å×À̺íÀÇ ¼¿ ű׸¦ Áßø ű׷Π»ý°¢ÇÒ ¼ö ÀÖ´Ù. Å×À̺í ű׿¡ °øÀ¯µÈ µ¥ÀÌÅÍÀÇ ¿¹·Î Å×À̺íÀÇ ¹è°æ »ö (bgcolor ¼Ó¼º)À» µé ¼ö ÀÖ´Ù. ¹è°æÀÌ Å×À̺í ÅÂ±× ³»¿¡ <table bgcolor="blue">...</table>À̶ó°í ¼³Á¤µÇ¸é, bgcolor ¼Ó¼ºÀÌ °³º°ÀûÀÎ ÅÂ±× (¿¹ : <table bgcolor="blue">...<td bgcolor="red">...</td>...</table>)¿¡ ÀÇÇØ ¿À¹ö¶óÀ̵åµÇÁö ¾Ê´Â ÀÌ»ó ¸ðµç Çà°ú ¼¿ÀÌ ÆĶõ»öÀ¸·Î ¼³Á¤µÉ °ÍÀÌ´Ù.

°¡Àå ±âº»ÀûÀÎ ±¸Çö¿¡¼­, Æò°¡µÈ ³»ºÎ ű״ °£´ÜÈ÷ ¿ÜºÎ ű×ÀÇ body ÀÔ·ÂÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¯³ª ÁßøµÈ ű״ ¶ÇÇÑ ÀÚ½ÅÀ» µÑ·¯½Î°í Àִ ű׸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°í (ºÎ¸ð ÅÂ±× È¤Àº Á¶ºÎ¸ð ÅÂ±× µî) ¿¬°áµÈ Ŭ·¡½º°¡ ¼­·ÎÀÇ ¸Þ¼Òµå¿Í Ư¼ºÀ» È£ÃâÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÌ·± ¹æ¹ýÀ¸·Î ÀÚ½Ä ÅÂ±×¿Í ºÎ¸ð űװ¡ µ¥ÀÌÅ͸¦ °øÀ¯ÇÒ ¼ö ÀÖ´Ù.

Áßø ű״ ´ÙÀ½ µÎ ¸Þ¼Òµå Áß Çϳª¸¦ »ç¿ëÇÏ¿© Á¶»ó ű׸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.:

  • TagSupport.getParent(): ºÎ¸ð ÅÂ±× (Áï ű׸¦ ¹Ù·Î µÑ·¯½Î°í Àִ ű×)¸¦ ¹ÝȯÇÑ´Ù.

  • TagSupport.findAncestorWithClass(from,class): ű×ÀÇ Æ¯Á¤ °èÃþÀÌ ¾Ë·ÁÁöÁö ¾Ê°Å³ª ¹Ýµå½Ã »çÀü ¼³Á¤µÈ °ÍÀº ¾Æ´Ò ¶§ »ç¿ëµÈ´Ù. findAncestorWithClass(from,class)ÀÇ ÀÎÀÚ´Â ¾î¶² Ŭ·¡½º·ÎºÎÅÍ ½ÃÀÛÇØ¾ß ÇÏ´ÂÁö¿Í ¾î¶² Ŭ·¡½º¸¦ ã¾Æ¾ß ÇÏ´ÂÁö¸¦ °¢°¢ ¾Ë·ÁÁØ´Ù. ¿¹¸¦ µé¾î, HTML Å×À̺í ÅÂ±× °èÃþ¿¡¼­ Å×À̺í ű׿¡ Á¢±ÙÇÏ´Â ÇÑ Å×ÀÌºí ¼¿ ű״ ´ÙÀ½°ú °°Àº ¸ð½ÀÀÏ ¼ö ÀÖ´Ù.:

    TableTag table = (TableTag)findAncestorWithClass(this, TableTag.class);

ÇöÀçÀÇ Å±װ¡ ÁöÁ¤µÈ Ŭ·¡½º(TableTag.class, in this case)¸¦ ÅÂ±× Çڵ鷯·Î °¡Áø ű׿¡ ÁßøµÇÁö ¾Ê¾Ò°Å³ª getParent()°¡ È£ÃâµÇ¾ú´Âµ¥ ºÎ¸ð űװ¡ ¾ø´Â °æ¿ì, µÎ ¸Þ¼Òµå ¸ðµÎ null °ªÀ» ¹ÝȯÇÒ °ÍÀÌ´Ù.

ű׸¦ ID·Î ÂüÁ¶Çϱâ

µ¥ÀÌÅ͸¦ °øÀ¯ÇÏ´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀº Ŭ·¡½º¸¦ ID·Î µî·ÏÇÏ¿© ´Ù¸¥ ű×ÀÇ Çڵ鷯 Ŭ·¡½º¿¡ ÀÇÇØ °Ë»öµÉ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀ» »ç¿ëÇϸé JSP °³¹ßÀڴ űװ¡ À̸¦ ¹Þ¾ÆµéÀ̵µ·Ï Ư¼öÇÏ°Ô ÇÁ·Î±×·¡¹ÖµÇÁö ¾ÊÀº °æ¿ì ID¸¦ ¾î¶² Ä¿½ºÅÒ Å±׿¡µµ ¼³Á¤ÇÒ ¼ö ¾ø´Ù.

ID Ư¼ºÀº ÀÌ·± ¸ñÀûÀ¸·Î ÀÌ¹Ì TagSupport ³»¿¡ ¼±¾ðµÇ¾ú°í, ¾î¶² ÅÂ±× Çڵ鷯 Ŭ·¡½º¿¡¼­µµ »ç¿ë °¡´ÉÇÏ´Ù. ±×·¯³ª ´Ù¸¥ űװ¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ID Ư¼ºÀ» »ç¿ëÇÏ¿© °´Ã¼¸¦ ÀúÀåÇÏ·Á¸é µÎ ´Ü°è¸¦ °ÅÃÄ¾ß ÇÑ´Ù.:

  1. ID Ư¼ºÀÌ ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ¿¡ ÁöÁ¤µÇ¾î¾ß ÇÑ´Ù. (ÇÊ¿äÇÑ ³ëµå´Â ÂüÀ̳ª °ÅÁþ Áß Çϳª·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù.)

  2. ÅÂ±× Çڵ鷯´Â pageContextÀÇ ¼Ó¼ºÀ¸·Î ÀÚ½ÅÀ» ¸íÈ®ÇÏ°Ô ¼³Á¤ÇØ¾ß ÇÑ´Ù.

űװ¡ ½±°Ô ÁßøµÇÁö ¾Ê´Â °æ¿ì ÅÂ±× °´Ã¼¸¦ µî·ÏµÈ ID¿Í °øÀ¯ÇÏ´Â °ÍÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù.

¿ì¸®ÀÇ ¿¹Á¦ÀÎ »ç¿ëÀÚ ¼îÇÎ Ä«Æ®¸¦ ´Ù½Ã ¾ð±ÞÇØ º¸ÀÚ. ¾Æ·¡ Listing 4ÀÇ <user:getUserShoppingList .../>°¡ getProductIds()¶ó´Â Á¦Ç° ID ¸ñ·ÏÀ» ¹ÝȯÇÏ´Â ¸Þ¼Òµå¸¦ Æ÷ÇÔÇØ ¼îÇÎ ¸ñ·Ï¿¡ ´ëÇÑ ´Ù¾çÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù°í »ý°¢Çغ¸ÀÚ. JSP ÆäÀÌÁöÀÇ ´Ù¸¥ ¾îµò°¡¿¡¼­ <products:getProductData> ... </products:getProductData> űװ¡ Á¦Ç° ID ¸ñ·ÏÀ» ÃëÇØ °¢ Á¦Ç°¿¡ ´ëÇÑ »ó¼¼ »çÇ×À» °Ë»öÇÑ ÈÄ À̵éÀÇ Æ÷¸ËÀ» Á¤ÇÏ¿© Ŭ¶óÀ̾ðÆ®¿¡°Ô ÀçÀü¼Û ÇÒ °ÍÀÌ´Ù.

user:getUserShoppingList űװ¡ ½ÇÇàµÇ¾î userShoppingList¶ó´Â À̸§ÀÇ pageContextÀÇ ÇÑ ¼Ó¼ºÀ¸·Î ÀÚ½ÅÀ» ÀúÀåÇÒ °ÍÀÌ´Ù. product:getProductData ű״ ¼Ó¼ºÀÇ °ªÀ» °Ë»öÇÏ°í getUserShoppingList °´Ã¼·ÎºÎÅÍ getProductIds()¸Þ¼Òµå¸¦ È£ÃâÇÒ °ÍÀÌ´Ù.

Listing 4. getUserShoppingList

    <user:getUserShoppingList userId="13" id="userShoppingList"/>
    ...
    <products:getProductData productData="userShoppingList">
       <!-- Some formatting template -->
      ...
    </products:getProductData>

getUserShoppingList ű׿¡ ´ëÇÑ ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ´Â Listing 5¿Í °°Àº ¸ð½ÀÀÏ °ÍÀÌ´Ù.:

Listing 5. getUserShoppingList¿¡ ´ëÇÑ ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ

  <tag>
       <name>getUserShoppingList</name>
       <tagclass>com.taglib.UserShoppingListTag</tagclass>
        <bodycontent>JSP</bodycontent>
        <attribute>
            <name>userId</name>
            <required>true</required>
            <rtexprvalue>false</rtexprvalue>
        </attribute>
        <attribute>
           <name>id</name>
           <required>false</required>
           <rtexprvalue>false</rtexprvalue>
        </attribute>
    </tag>

űװ¡ ÀÚ½ÅÀÇ ¸ðµç 󸮸¦ ¿Ï·áÇÏ°í ³ª¸é (¾Æ¸¶µµ doEndTag()¸Þ¼Òµå·Î) getShoppingList ÅÂ±× Çڵ鷯´Â ´ÙÀ½ ÇàÀ» Æ÷ÇÔÇÒ °ÍÀÌ´Ù.:

pageContext.setAttribute(getId(),this);

getId()´Â ÅÂ±× (userShoppingList) ³»ÀÇ ID ¼¼Æ®¸¦ °Ë»öÇÏ°í, this´Â Àüü Ŭ·¡½º ÀÚü¸¦ ÂüÁ¶ÇÑ´Ù.

ÀÏ´Ü userShoppingList űװ¡ pageContext¿¡ ÀúÀåµÇ°í ³ª¸é getProductData ÅÂ±× Çڵ鷯 Ŭ·¡½º°¡ productData ¼Ó¼º°ú ÇÔ²² Àڽſ¡°Ô Àü´ÞµÈ ID¸¦ »ç¿ëÇÏ¿© ¿©±â¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. getProductData ű×ÀÇ Çڵ鷯 Ŭ·¡½º´Â ±× ID (getProductData() ¸Þ¼Òµå·Î °Ë»öµÈ)¸¦ »ç¿ëÇÏ¿© pageContext ¿¡¼­ ¼Ó¼ºÀ» ¹ß°ßÇÏ°í À̸¦ UserShoppingListTag °´Ã¼·Î µÇµ¹·ÁÁÙ °ÍÀÌ´Ù. Listing 6ÀÇ ÄÚµå´Â productList¶ó´Â List¸¦ ¼±¾ðÇÏ°í Á¦Ç° ¸ñ·ÏÀ» ÃßÃâÇϱâ À§ÇØ getProductIds()¶ó´Â »ç¿ëÀÚ Å¬·¡½º ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.

Listing 6. Á¦Ç° ¸ñ·Ï ÃßÃâÇϱâ

UserShoppingListTag userShoppingList = 
        (UserShoppingListTag)pageContext.getAttribute(getProductData());
    List productList = (List)userShoppingList.getProductIds();

ÆäÀÌÁö¿Í ¼¼¼Ç context¿¡¼­ ÅÂ±× ÂüÁ¶Çϱâ

Àüü ÅÂ±× °´Ã¼¸¦ ÀúÀåÇÏ¸é ±× ¾ÈÀÇ Æ¯¼º°ú ¸Þ¼Òµå¸¦ ´Ù¸¥ űװ¡ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ À¯¿ëÇÏ´Ù. ±×·¯³ª ¿©·¯ºÐÀº ¶ÇÇÑ °´Ã¼ÀÇ ÀϺθ¸À» °ø°³Çϱâ·Î °áÁ¤ÇÒ ¼öµµ ÀÖ´Ù. »ç½Ç À§ ¿¹Á¦ÀÇ ÇÑ°è´Â Á¦Ç° űװ¡ Á¦Ç° ¸ñ·ÏÀÌUserShoppingListTag °´Ã¼¿¡¼­ ¿Ã °ÍÀ¸·Î ¿¹»óÇÏ°í ÀÖ´Ù´Â °ÍÀÌ´Ù.

¾Æ¸¶µµ »ç¿ëÀÚ Å±×ÀÎ getShoppingList°¡ Á¦Ç° ¸ñ·ÏÀ» ´Ù¸¥ űװ¡ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï pageContext¿¡ "¹ÝÃâ"ÇÏ´Â °ÍÀÌ ´õ ³ªÀº ¹æ½ÄÀÏ °ÍÀÌ´Ù. ÀÌ ¹æ½ÄÀÇ ÀåÁ¡Àº ´Ù¸¥ űװ¡ Á¦Ç° ¸ñ·ÏÀ» ¹ÝȯÇÏ´Â ¸Þ¼Òµå¿¡ °üÇØ, ±×¸®°í ½ÉÁö¾î´Â ¸ñ·ÏÀ» óÀ½ ¸¸µç °´Ã¼¿¡ ´ëÇؼ­µµ ¹Ì¸® ¾Ë°í ÀÖÁö ¾Ê¾Æµµ µÈ´Ù´Â °ÍÀÌ´Ù. pageContext¿¡ ÀúÀåµÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ ¶óº§ÀÌ productData ¼Ó¼º¿¡ ÀÇÇØ Á¦°øµÇ¸é, Á¦Ç° ű×ÀÇ ÅÂ±× Çڵ鷯´Â ´ÙÀ½°ú °°Àº ¸ð½ÀÀÏ °ÍÀÌ´Ù.:


List productList = (List)pageContext.getAttribute(getProductData());

ÀÌ ±â¹ýÀº ¼îÇÎ ¸ñ·Ï ű׸¦ ºñ·ÔÇÑ ´Ù¸¥ ű׵鿡 ´ëÇØ ÀÛµ¿ÇÒ °ÍÀε¥, ¼¼ÀÏ Ç°¸ñÀ̳ª ÁÖ¾îÁø Ä«Å×°í¸® ³»ÀÇ Á¦Ç°À» È£ÃâÇÏ´Â ÅÂ±× °°Àº °ÍÀ» ¿¹·Î µé ¼ö ÀÖ´Ù.

µ¥ÀÌÅÍ°¡ ¼¼¼Ç¿¡ ÀúÀåµÇ¸é ´ÙÀ½°ú °°Àº ¸ð½ÀÀÏ °ÍÀÌ´Ù. :


HttpSession session = pageContext.getSession();
List productList = (List)session.getAttribute(getProductData());

¿¹Á¦ Ä¿½ºÅÒ ÅÂ±× »ìÆ캸±â

¾Æ·¡ÀÇ Âü°í ÀÚ·á ¼½¼Ç¿¡¼­ ¿©·¯ºÐÀº ¿¹Á¦ Ä¿½ºÅÒ ÅÂ±× ¼¼Æ®¿¡ ´ëÇÑ ¸µÅ©¸¦ º¼ ¼ö ÀÖ´Ù. ÄÚµå ÆÐÅ°Áö¸¦ ´Ù¿î·ÎµåÇÏ¿© »ìÆ캸ÀÚ. ÀÌ ±ÛÀÇ ¸¶Áö¸· ºÎºÐ¿¡¼­ ³ª´Â ÀÌ ¿¹Á¦µéÀ» ÀÌ¿ëÇÏ¿© ¿©·¯ºÐ¿¡°Ô Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇØ ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡ ¸î °¡Áö¸¦ º¸¿© ÁÙ °ÍÀÌ´Ù.

¿¹Á¦ ÅÂ±× °³¿ä

»ùÇà ÅÂ±× µÚÀÇ ¾ÆÀ̵ð¾î´Â ¸Å¿ì °£´ÜÇÏ°í Á÷Á¢ÀûÀÌ´Ù. ÃÑ 7°³ÀÇ Ä¿½ºÅÒ ÅÂ±×¿Í ÇϳªÀÇ JSP ÆÄÀÏ ¹× ÇϳªÀÇ ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ (a.tld ÆÄÀÏ)°¡ ÀÖ´Ù.

ű׵éÀº ÇÔ²² ÀÛµ¿ÇÏ¿© ȯ¿µ È­¸é, ·Î±×ÀÎ È­¸é, ȤÀº ¿¡·¯°¡ ¹ß»ýÇßÀ» °æ¿ì ·Î±×ÀÎ ¿¡·¯ ¸Þ½ÃÁö Áß Çϳª¸¦ Ç¥½ÃÇÑ´Ù. (½ÇÁ¦ ·Î±×ÀÎ ÀýÂ÷´Â ű׿¡ ÀÇÇØ Ã³¸®µÇÁö ¾Ê´Â´Ù. -- °£ÆíÇÔÀ» À§ÇØ ¿ì¸®´Â servletÀ̳ª JavaBean ÄÄÆ÷³ÍÆ®°¡ ¼³Á¤ÇØ¾ß ÇßÀ» ¼¼¼Ç°ú ¿äû º¯¼ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á ÇÁ·Î¼¼½º¸¦ ¸ð¹æÇغ¸ÀÚ.)

Listing 7¿¡ ³ª¿Í ÀÖµíÀÌ, getUserData¿Í nestedLoginÀ̶ó´Â µÎ °³ÀÇ ÁÖ Å±װ¡ ÀÖ´Ù. ù¹ø°´Â »ç¿ëÀÚ Á¤º¸¸¦ ºÒ·¯¿À°í µÎ¹ø°´Â »ç¿ëÀÚÀÎ John Q. CitizenÀÌ ·Î±×ÀÎÇß´ÂÁö, ¾Æ´ÑÁö¿¡ µû¶ó ÀûÀýÇÑ HTMLÀ» Ç¥½ÃÇÑ´Ù.

ÀÌ µÎ ű״ nestedLoginÀ̶ó´Â űװ¡ pageContext¿¡ ÀúÀåµÇ¾î ÀÖ´Â getUserData ű׿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Ç¥½ÃÇÑ´Ù.

nestedLogin ű״ ¶ÇÇÑ ÇÑ ÅÂ±× ³»¿¡ ´Ù¸¥ ű׸¦ Áßø½ÃÅ°´Â ÇÁ·Î¼¼½º¸¦ º¸¿©ÁÖ¸ç, ´Ù¸¥ űװ¡ ÀÚ½ÅÀÇ ¸Þ¼Òµå¿¡ Á¢±ÙÇϵµ·Ï ÇØÁØ´Ù. isLoggedInHTML, notLoggedInHTML, ¹× logInFailureHTML¶ó´Â ¼¼ °³ÀÇ ´Ù¸¥ ű׿¡ ÀÇÇØ ¼¼ °³ÀÇ È­¸éÀÌ Ç¥½ÃµÉ ¼ö ÀÖ´Ù. ÀÌ ¼¼ ű״ nestedLogin ű×ÀÇ Æ¯¼º¿¡ Á¢±ÙÇϵµ·Ï ÇØÁØ´Ù.; nestedLogin¿¡ ÀÇÇØ ÀûÀýÇÑ ÄÚµå ºí·ÏÀÌ °áÁ¤µÇ¾î È­¸é Ãâ·ÂµÉ °ÍÀÌ´Ù.

³ª¸ÓÁö µÎ ű×ÀÎ getUserName°ú getLoginError´Â ÁßøµÈ ű׸¦ »ç¿ëÇÏ´Â µÎ °¡Áö ¹æ½ÄÀ» º¸¿©ÁØ´Ù. : °£´ÜÇÑ body ÄÁÅÙÃ÷·Î »ç¿ëÇÏ´Â °Í°ú Á¶»ó ÅÂ±× ³»ÀÇ ¸Þ¼Òµå¿¡ Á¢±ÙÇÏ´Â ¼ö´ÜÀ¸·Î »ç¿ëÇÏ´Â ±×°ÍÀÌ´Ù. ÀÌ µÑ ¸ðµÎ ÀÚ½ÅÀÇ Á¶»ó ű׸¦ ¿À¹ö¶óÀ̵åÇÏÁö ¾Ê´Â´Ù.; Á¶»ó ű׿¡¼­ °£´ÜÈ÷ µ¥ÀÌÅÍ (Áï »ç¿ëÀÚ¸í°ú ·Î±×ÀÎ ¿¡·¯, µÑ ¸ðµÎ ¼³Á¤µÇ¾úÀ» °æ¿ì)¸¦ °¡Á®¿Â´Ù.

Listing 7. ¿¹Á¦ JSP ÄÚµå

<HTML>
<HEAD>
<TITLE>Custom Tag Communication</TITLE>
</HEAD>

<BODY bgcolor="#ffffff">

<!-- LOAD TAG LIBRARY -->
<%@ taglib uri="goforit.tld" prefix="goforit" %>

<!-- SET THE USER -->
<goforit:getUserData id="user"/>

<!-- SET THE LOGIN HTML BASED ON WHETHER OR NOT THE USER IS LOGGED IN -->
<!-- ONE OF THE NESTED NODES WILL BE DISPLAYED ACCORDINGLY -->
<goforit:nestedLogin userDataID="user">

    <goforit:isLoggedIn>
    <!-- THE HTML IN THIS NODE IS DISPLAYED IF THE USER IS LOGGED IN -->
    </goforit:isLoggedIn>

    <goforit:notLoggedIn>
    <!-- THE HTML IN THIS NODE IS DISPLAYED IF THE USER IS NOT LOGGED IN -->
    </goforit:notLoggedIn>

    <goforit:loginFailure>
    <!-- THE HTML IN THIS NODE IS DISPLAYED IF THERE WAS A LOGIN ERROR -->
    </goforit:loginFailure>

</goforit:nestedLogin>

</BODY>
</HTML>

ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ

Listing 8Àº µÎ°³ÀÇ ÁÖ Å±׿¡ ´ëÇÑ µð½ºÅ©¸³ÅÍÀÌ´Ù. getUserData¿¡ id ¼Ó¼ºÀÌ, nestedLogin¿¡ userDataID°¡ ÇÊ¿äÇÔ¿¡ ÁÖÀÇÇÑ´Ù. À̵éÀº »ç¿ëÀÚ °´Ã¼¸¦ pageContext¿¡ µî·ÏÇÏ°í À̸¦ ´Ù¸¥ Ŭ·¡½º¿¡¼­ °Ë»öÇϴµ¥ »ç¿ëµÈ´Ù.

Listing 8. Tag µð½ºÅ©¸³ÅÍ
  
  <tag>
    <name>getUserData</name>
    <tagclass>com.taglibrarycommunication.taglib.GetUserDataTag</tagclass>   
    <info></info>
    <bodycontent>JSP</bodycontent>    
    <attribute>
      <name>id</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>     
  </tag>

  <tag>
    <name>nestedLogin</name>
    <tagclass>com.taglibrarycommunication.taglib.NestedLoginTag</tagclass>   
    <info></info>
    <bodycontent>JSP</bodycontent>    
    <attribute>
      <name>userDataID</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>     
  </tag>

ÅÂ±× Çڵ鷯

´ÙÀ½ ¼½¼Ç¿¡¼­´Â Ŭ·¡½º°£ Åë½ÅÀÇ ¸î °¡Áö Áß¿äÇÑ Ãø¸éÀ» ¼³¸íÇÏ°Ú´Ù.

GetUserData

ÀÌ ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â ´Ù¸¥ űװ¡ »ç¿ëÇÒ »ç¿ëÀÚ µ¥ÀÌÅ͸¦ °Ë»öÇÑ´Ù.

ÁÖÀÇ : ¿ì¸®ÀÇ Å±״ ·Î±×ÀÎ ÇÁ·Î¼¼½º¸¦ ó¸®ÇÏÁö ¾Ê±â ¶§¹®¿¡, ű׵éÀº (·Î±×ÀÎ ÀýÂ÷ ¾øÀÌ) ¼¼¼Ç¿¡ ÀúÀåµÇ¾î ÀÖ´Â ·Î±×ÀÎÇÑ »ç¿ëÀÚ¿Í ÀÛ¾÷ ¼öÇà ¿äû¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¿¡·¯¸¦ ãµµ·Ï ¸¸µé¾îÁ³´Ù. ¿ì¸®´Â ½ÇÁ¦·Î »ç¶÷µéÀ» ·Î±×ÀνÃÅ°Áö ¾ÊÀ» °ÍÀ̱⠶§¹®¿¡, ÀÌ Å±×ÀÇ ½ÃÀÛ ºÎºÐÀº ´©±º°¡¸¦ ¼¼¼Ç¿¡ ¼³Á¤Çϰųª ȤÀº ÇϳªÀÇ ¿¡·¯¸¦ ¿äû¿¡ ¼³Á¤ÇÔÀ¸·Î½á ¼¼ °³ÀÇ °¡´ÉÇÑ ½Ã³ª¸®¿À¸¦ Èä³»³½´Ù. Listing 9¿¡ ³ª¿Í ÀÖ´Â ÄÚµå´Â ¼¼ ½Ã³ª¸®¿À¸¦ Á¦¾îÇÑ´Ù. ¾Æ·¡ÀÇ µÎ ¶óÀÎ ¸ðµÎ ÁÖ¼® 󸮸¦ ¾ø¾ÖÁö ¾ÊÀº ä ³²¾Æ ÀÖ´Ù¸é »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏÁö ¾ÊÀº °ÍÀ¸·Î °£ÁֵȴÙ.:

Listing 9. ¿¹Á¦ ½Ã³ª¸®¿À¸¦ Á¦¾îÇÏ´Â ÄÚµå

// UNCOMMENT TO MIMIC A LOGGED IN USER STORED IN SESSION
//session.setAttribute("user","John Q. Citizen");

// UNCOMMENT TO MIMIC LOGIN ERROR STORED IN REQUEST
//pageContext.getRequest().setAttribute("loginError","Password incorrect");

»ç¿ëÀÚ µ¥ÀÌÅ͸¦ µî·ÏÇϱâ À§ÇÑ Å°´Â doStartTag()¸Þ¼Òµå¿¡ ÀÖ´Ù.:

Listing 10. doStartTag()

public int doStartTag() {

    session = pageContext.getSession();
    
    ... SET VARIOUS PROPERTIES BASED ON THE USER ...

    // THIS IS THE LINE THAT SAVES THIS CLASS TO pageContext
    pageContext.setAttribute(id,this);

    return SKIP_BODY;
}

NestedLoginTag

Listing 11¿¡ ³ª¿Í ÀÖ´Â ÀÌ Å¬·¡½º´Â »ç¿ëÀÚ°¡ ·Î±×ÀÎÇß´ÂÁöÀÇ ¿©ºÎ¿Í ¿¡·¯°¡ ÀÖ´ÂÁöÀÇ ¿©ºÎ¿¡ µû¶ó ¼¼ Ư¼º Áß ¾î¶² °ÍÀÌ Å¬¶óÀ̾ðÆ®¿¡°Ô ¹ÝȯµÉÁö¸¦ °áÁ¤ÇÑ´Ù. ÀÌ ¼¼ Ư¼ºÀÇ °ªÀº JSP ÆäÀÌÁö¿¡¼­ ÀÌ Å¬·¡½º ³»¿¡ ÁßøµÈ ´Ù¸¥ ű׿¡ ÀÇÇØ °áÁ¤µÈ´Ù. NestedLoginTag´Â ÀÌÀü ű׿¡¼­ pageContext¿¡ µî·ÏµÈ »ç¿ëÀÚ¸¦ Ãß¼± °¡Á®¿ÈÀ¸·Î½á ¾î¶² űװ¡ È­¸é Ãâ·ÂµÉÁö¸¦ °áÁ¤ÇÑ´Ù. ±× ÈÄ »ç¿ëÀÚ ¸í°ú ¹ß»ýÇÑ ¿¡·¯°¡ ÀÖ´ÂÁö °Ë»öÇÑ´Ù. µÑ ´Ù ºñ¾î ÀÖÀ¸¸é »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏÁö ¾Ê¾Ò´Ù°í °¡Á¤ÇÑ´Ù. ¿¡·¯ ¸Þ½ÃÁö°¡ ºñ¾î ÀÖÁö ¾ÊÀ¸¸é ºÐ¸íÈ÷ ¿¡·¯°¡ ¹ß»ýÇÑ °ÍÀÌ´Ù. »ç¿ëÀÚ À̸§ÀÌ ¼³Á¤µÇ¾î ÀÖÀ¸¸é, »ç¿ëÀÚ°¡ ¼º°øÀûÀ¸·Î ·Î±×ÀÎÇÑ °ÍÀÌ´Ù.

Listing 11. NestedLoginTag

// PULL THE userData OUT OF THE pageContext 
// WITH THE userDataID SUPPLIED THROUGH THE CUSTOM TAG
GetUserDataTag userData = 
     (GetUserDataTag) pageContext.getAttribute(getUserDataID());

// SET userName AND loginError FROM VALUES IN userData OBJECT
setUserName(userData.getUserName());
SetLoginError(userData.getLoginError());

...

if (getUserName()!="" &&
    getLoginError()==""){
    // IF userName IS SET PERSON IS LOGGED IN
    pageContext.getOut().print(getIsLoggedInHTML());
} else {
    if (getLoginError()=="")
        // IF NO userName SET BUT NO loginError SHOW LOGIN
        pageContext.getOut().print(getNotLoggedInHTML());
    else
        // IF loginError SHOW LOGIN AND ERROR
        pageContext.getOut().print(getLogInFailureHTML());
}

IsLoggedInTag, NotLoggedInTag°ú LogInFailureTag
Listing 12ÀÇ ¼¼ ű״ nestedLogin ³»¿¡ ÁßøµÈ ű׵éÀÌ´Ù. À̵éÀº ¸ðµÎ ºñ½ÁÇÑ ±â´ÉÀ» ¼öÇàÇÏÁö¸¸, nestedLoginÀÇ ´Ù¸¥ Ư¼ºµéÀ» ¼³Á¤ÇÑ´Ù. À̵éÀÇ body ³»¿ëÀº JSP °³¹ßÀÚ°¡ nestedLoginÀÇ isLoggedInHTML, notLoggedInHTML ¹× logInFailureHTML Ư¼º¿¡ Á¢±ÙÇÏ°í ¼³Á¤Çϵµ·Ï ÇØÁØ´Ù.

Listing 12. ºÎ¸ð ű׿¡ Á¢±ÙÇϱâ

    // THIS LINE ACCESSES THE PARENT CLASS NestedLoginTag
    NestedLoginTag parent = (NestedLoginTag) getParent();

    if (parent != null){
        BodyContent bc = getBodyContent();
        String body = bc.getString();

        // SET THE isLoggedInHTML PROPERTY OF THE PARENT CLASS
        // WITH THE BODY SUPPLIED THROUGH THE CUSTOM TAG
        parent.setIsLoggedInHTML(body);
    }

GetUserNameTag°ú GetLoginErrorTag
Listing 13ÀÇ Å±׵éÀº °£´ÜÈ÷ pageContext¿¡¼­ userData °´Ã¼¸¦ °Ë»öÇÏ¿© ÀÌ °´Ã¼ÀÇ Æ¯¼ºÀ» °¡Á®¿Â´Ù.

Listing 13. pageContext¿¡ ÀúÀåµÈ °´Ã¼¿¡ Á¢±ÙÇϱâ

    GetUserDataTag userData = 
        (GetUserDataTag) pageContext.getAttribute(getUserDataID());

    ...

    if (userData.getUserName() !=null){
        pageContext.getOut().print(userData.getUserName());
    }

°á·Ð

JSP ÆäÀÌÁö´Â ¼­¹öÃø ·ÎÁ÷¿¡¼­ Ŭ¶óÀ̾ðÆ®Ãø È­¸éÀ» ºÐ¸®ÇÏ°í, ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ñ À¥ °³¹ßÀÚµµ ÀÚ¹Ù ±â¼úÀÇ ÈûÀ» ÀÚÀ¯·Ó°Ô ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇÏ¿© ¿©·¯ºÐÀº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¾ç °èÃþ ¸ðµÎ¿¡¼­ ÀÛ¾÷ÇÏ´Â °³¹ßÀڵ鿡°Ô Á» ´õ ¸¹Àº ¼±ÅñÇÀ» ÁÙ ¼ö ÀÖ°í, ÄÚµå ¸ðµâ°ú ű×ÀÇ Àç»ç¿ëÀ» Àå·ÁÇÒ À¥ °³¹ßÀÚ¿¡°Ô °´Ã¼ ÁöÇâÀû Á¢±Ù ¹æ½ÄÀ» ºÎ°úÇÒ ¼ö ÀÖ´Ù. ÀÏ´Ü ¿©·¯ºÐÀÌ ÀÌ ±Û¿¡ Æ÷ÇÔµÈ »ùÇà ÅÂ±× ¶óÀ̺귯¸®¸¦ °ËÅäÇß´Ù¸é, ¿©·¯ºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡ Ä¿½ºÅÒ ÅÂ±× »ç¿ëÀ» ½ÃÀÛÇÒ Áغñ°¡ µÈ °ÍÀÌ´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
°³¿ä
À¯Çü »Ó ¾Æ´Ï¶ó È­¸é ·ÎÁ÷µµ Á¦¾îÇϱâ
ÀåÁ¡ ¹× ¿¹Á¦
¿¹Á¦ Ä¿½ºÅÒ Å±×
°á·Ð
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
JSP taglibs: Better usability by design
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Photo of Jeff WilsonJeff WilsonÀº IBMÀÇ °³¹ßÀÚ °ü°è ºÎ¹® ³» ÄÁ¼³ÅÏÆ®µé, ±³À° ´ã´çÀÚµé ¹× Àüµµ»çµéÀÇ ±×·ìÀÎ DragonSlayersÀÇ e-ºñÁî´Ï½º ¼³°èÀÚÀÌ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ