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

JSTL ±âÃÊ, Part 2 : Çٽɿ¡ Á¢±ÙÇϱâ
Ä¿½ºÅÒ Å±׸¦ ÀÌ¿ëÇÑ Ç÷οì Á¦¾î¿Í URL °ü¸®

Level: Intermediate

Mark A. Kolb
¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î
2003³â 3¿ù 18ÀÏ

JSP Standard Tag Library (JSTL) core ¶óÀ̺귯¸®´Â À̸§ÀÌ ¸»ÇØÁÖµíÀÌ, ¹üÀ§(scoped) º¯¼ö¸¦ °ü¸®ÇÏ°í URL°ú ÀÎÅÍ·¢ÆÃÇÏ´Â µîÀÇ ±âº» ±â´É°ú, ¹Ýº¹°ú Á¶°ÇÈ­ °°Àº ±Ùº»ÀûÀÎ ÀÛµ¿¿¡ ÇÊ¿äÇÑ Ä¿½ºÅÒ Å±׸¦ Á¦°øÇÑ´Ù. ÀÌ·¯ÇÑ Å±׵éÀº ÆäÀÌÁö ÀÛ¼ºÀÚ°¡ Á÷Á¢ »ç¿ëÇϱ⵵ ÇÏÁö¸¸ ´Ù¸¥ JSTL ¶óÀ̺귯¸®¿Í ÇÔ²² º¹ÀâÇÑ Ç¥Çö ·ÎÁ÷¿¡ ´ëÇÑ Åä´ë¸¦ Á¦°øÇÑ´Ù.

ÀÌ ½Ã¸®ÁîÀÇ Ã¹ ¹ø° ±Û¿¡¼­ JSTLÀ» óÀ½ º¸¾ÒÀ» °ÍÀÌ´Ù. °Å±â¿¡¼­ µ¥ÀÌÅÍ¿¡ ¾×¼¼½º ÇÏ°í ÀÛµ¿Çϱâ À§ÇØ expression language (EL)ÀÇ »ç¿ë¹ýÀ» ¼³¸íÇß´Ù. ¿©·¯ºÐÀÌ ¹è¿î °Í ó·³ ELÀº JSTL Ä¿½ºÅÒ Å±×ÀÇ ¾ÖÆ®¸®ºäÆ®¿¡ µ¿Àû °ªÀ» ÇÒ´çÇϴµ¥ »ç¿ëµÈ´Ù. µû¶ó¼­ ºôÆ®ÀÎ ¾×¼Ç°ú ±âŸ Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸®¿ë ¿äû ½Ã°£ ¾ÖÆ®¸®ºäÆ® °ªÀ» ÁöÁ¤ÇÏ´Â JSP ½Ä°ú °°Àº ¿ªÇÒÀ» ÇÑ´Ù.

ELÀÇ »ç¿ë¹ýÀ» ¼³¸íÇϱâ À§ÇØ, core ¶óÀ̺귯¸®¿¡¼­ ¼¼ °³ÀÇ ÅÂ±× (<c:set>, <c:remove>, <c:out>)¸¦ ¼Ò°³Çß¾ú´Ù. <c:set>¿Í <c:remove>´Â ¹üÀ§ º¯¼ö¸¦ °ü¸®Çϴµ¥ »ç¿ëµÈ´Ù. <c:out>Àº Ưº°È÷ ELÀ» »ç¿ëÇÏ¿© °è»êµÈ °ªÀÎ µ¥ÀÌÅÍ µð½ºÇ÷¹ÀÌ¿¡ »ç¿ëµÈ´Ù. ±âÃÊ ÇнÀÀ» Åä´ë·Î ÀÌÁ¦´Â core ¶óÀ̺귯¸®ÀÇ ³ª¸ÓÁö ű׸¦ º¼ °ÍÀÌ´Ù. µÎ °¡Áö ÁÖ¿ä Ä«Å×°í¸®·Î ³ª´¶´Ù: Ç÷οì Á¦¾î(Ç÷οì Á¦¾î)¿Í URL °ü¸®.

¿¹Á¦ ¾ÖÇø®ÄÉÀ̼Ç
JSTL ű׸¦ ¼³¸íÇϱâ À§Çؼ­ ½ÇÁ¦ ¾ÖÇø®ÄÉÀÌ¼Ç ¿¹Á¦¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ´ëÁß¼º°ú ÀÎÁöµµ°¡ ³ô¾ÆÁ³±â ¶§¹®¿¡ °£´ÜÇÑ ÀÚ¹Ù ±â¹ÝÀÇ Weblog¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. (Âü°íÀÚ·á¿¡¼­ JSP ÆäÀÌÁö¿Í ¼Ò½º Äڵ带 ´Ù¿î·Îµå ÇÑ´Ù.) Weblog (blog)Àº À¥ ±â¹Ý Àú³Î·Î¼­ WeblogÀÇ ÀÛ¼ºÀÚ°¡ Èï¹Ì¸¦ °¡Áú¸¸ÇÑ ÁÖÁ¦µé¿¡ ´ëÇÑ ÂªÀº ÁÖ¼®ÀÌ´Ù. ÀϹÝÀûÀ¸·Î À¥ »óÀÇ ¾ÆƼŬÀ̳ª ÅäÀÇ°¡ ÀÖ´Â °÷ ¾îµðµç ¿¬°áµÈ´Ù. ±×¸² 1Àº ½ÇÇà ÁßÀÎ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ð½ÀÀÌ´Ù.

±×¸² 1. Weblog ¾ÖÇø®ÄÉÀ̼Ç
Screenshot of the Weblog ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼Ç

½º¹« °³ Á¤µµÀÇ Àڹ٠Ŭ·¡½º°¡ Àüü ±¸Çö¿¡ ÇÊ¿äÇÏÁö¸¸ Weblog ¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½º¿¡¼­´Â ´Ü µÎ°³(Entry¿Í UserBean)¸¸ÀÌ ÇÁ¸®Á¨Å×ÀÌ¼Ç ·¹À̾ »ç¿ëµÈ´Ù. JSTL ¿¹Á¦¸¦ ÀÌÇØÇÏ·Á¸é ÀÌµé µÎ °³ÀÇ Å¬·¡½º°¡ ÇÊ¿äÇÏ´Ù. ±×¸² 2´Â Entry¿Í UserBeanÀÇ Å¬·¡½º ´ÙÀ̾î±×·¥ÀÌ´Ù.

±×¸² 2. Weblog ¾ÖÇø®ÄÉÀ̼Ç(Ŭ·¡½º ´ÙÀ̾î±×·¥)
Class diagram for Weblog ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼Ç

Entry Ŭ·¡½º´Â Weblog ³»ÀÇ ³¯Â¥°¡ ³ª¿ÍÀÖ´Â ¿£Æ®¸®¸¦ ³ªÅ¸³½´Ù. ÀÌ°ÍÀÇ id ¾ÖÆ®¸®ºäÆ®´Â µ¥ÀÌÅͺ£À̽º ³»ÀÇ ¿£Æ®¸®¸¦ ÀúÀåÇÏ°í °Ë»öÇϴµ¥ »ç¿ëµÈ´Ù. ¹Ý¸é title°ú text ¾ÖÆ®¸®ºäÆ®´Â ¿£Æ®¸®ÀÇ ½ÇÁ¦ ÄÜÅÙÆ®¸¦ ³ªÅ¸³½´Ù. ÀÚ¹Ù Date Ŭ·¡½º Áß µÎ °³ÀÇ ÀνºÅϽº´Â created¿Í lastModified ¾ÖÆ®¸®ºäÆ®¿¡ ÀÇÇØ ·¹ÆÛ·±½ºµÇ¸ç ¿£Æ®¸®°¡ óÀ½À¸·Î ¸¸µé¾îÁö°í ¸¶Áö¸·À¸·Î ÆíÁý µÉ ¶§ ³ªÅ¸³­´Ù. author ¾ÖÆ®¸®ºäÆ®´Â UserBean ÀνºÅϽº¸¦ ÂüÁ¶Çϸ鼭 ¿£Æ®¸®¸¦ ¸¸µç »ç¶÷À» ³ªÅ¸³½´Ù.

The UserBean Ŭ·¡½º´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±ÇÇÑÀÌ ÀÖ´Â »ç¿ëÀÚ Á¤º¸(»ç¿ëÀÚ À̸§, ¼º¸í, À̸ÞÀÏ ÁÖ¼Ò)¸¦ ÀúÀåÇÑ´Ù. ÀÌ Å¬·¡½º¿¡´Â °ü·Ã µ¥ÀÌÅͺ£À̽º¿Í ÀÎÅÍ·¢ÆÃÇϱâ À§ÇÑ id ¾ÖÆ®¸®ºäÆ®µµ Æ÷ÇԵǾî ÀÖ´Ù. ¸¶Áö¸· ¾ÖÆ®¸®ºäÆ®ÀÎ roles´Â String °ª ¸®½ºÆ®¸¦ ÂüÁ¶Çϸ鼭 ¾ÖÇø®ÄÉÀÌ¼Ç ¿ªÇÒ°ú ÀÌ¿¡ »óÀÀÇÏ´Â »ç¿ëÀÚ¸¦ ±¸ºÐÇÑ´Ù. Weblog ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì ÀϹÝÀûÀÎ ¿ªÇÒÀº "User" (¸ðµç ÀϹÝÀûÀÎ ¾ÖÇø®ÄÉÀÌ¼Ç »ç¿ëÀÚ ¿ªÇÒ)¿Í "Author" (Weblog ¿£Æ®¸®¸¦ ¸¸µé°í ÆíÁýÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¦ ÁöÁ¤ÇÏ´Â ¿ªÇÒ) ÀÌ´Ù.

º» ½Ã¸®ÁîÀÇ ´Ù¸¥ ÁÖÁ¦µé

Part 1, "expression language" (2003³â 2¿ù)

Part 3, "ÇÁ¸®Á¨Å×À̼ÇÀÌ ¸ðµç °ÍÀÌ´Ù!" (2003³â 4¿ù)

Part 4, "SQL°ú XML ÄÜÅÙÆ®¿¡ Á¢±ÙÇϱâ" (2003³â 5¿ù)

Ç÷οì Á¦¾î(Flow control)
µ¿Àû ¾ÖÆ®¸®ºäÆ® °ªÀ» ÁöÁ¤Çϴµ¥ JSP ½Ä ´ë¿ëÀ¸·Î ELÀÌ »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ ½ºÅ©¸³Æà ¿¤¸®¸ÕÆ®¸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ÁÙ¾îµé¾ú´Ù. ½ºÅ©¸³Æà ¿¤¸®¸ÕÆ®´Â JSP ÆäÀÌÁö¿¡¼­ Áß¿äÇÑ ¼Ò½º°¡ µÉ ¼ö Àֱ⠶§¹®¿¡ °£´ÜÇÑ ´ë¾ÈÀ» Á¦°øÇÑ´Ù´Â °ÍÀº JSTL¿¡ À־ Å« ÀÌÁ¡ÀÌ´Ù.

ELÀº JSP ÄÁÅ×À̳ʿ¡¼­ µ¥ÀÌÅ͸¦ °Ë»öÇÏ°í °´Ã¼ °èÃþÀ» ¿À°¡¸ç °£´ÜÇÑ ÀÛµ¿À» ¼öÇàÇÑ´Ù. µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÏ¿© Á¶ÀÛÇÏ´Â °Í ¿Ü¿¡µµ JSP ½ºÅ©¸³Æà ¿¤¸®¸ÕÆ®ÀÇ ¶Ç ´Ù¸¥ »ç¿ë Ãø¸éÀº Ç÷οì Á¦¾îÀÌ´Ù. ƯÈ÷, ÆäÀÌÁö ÀÛ¼ºÀÚ°¡ ¹Ýº¹µÇ°Å³ª Á¶°ÇÀûÀÎ ÄÜÅÙÆ®¸¦ ±¸ÇöÇϱâ À§Çؼ­ ½ºÅ©¸³Æ²¸´À» ÀÇÁ¸ÇÑ´Ù´Â °ÍÀº ÀϹÝÀûÀÎ ÀÏÀÌ´Ù. ÇÏÁö¸¸ ±×¿Í °°Àº ÀÛµ¿Àº ELÀÇ ±â´ÉÀ» ³Ñ¾î¼­±â ¶§¹®¿¡, core ¶óÀ̺귯¸®´Â ¹Ýº¹, Á¶°ÇÈ­, ¿¹¿Ü ó¸® µîÀÇ ÇüÅ·ΠÇ÷οì Á¦¾î¸¦ °ü¸® ÇÒ ´Ù¾çÇÑ »ç¿ëÀÚ ¾×¼ÇÀ» Á¦°øÇÑ´Ù.

¹Ýº¹
À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Ãø¸é¿¡¼­, ¹Ýº¹(iteration)Àº µ¥ÀÌÅÍÀÇ ¸ðÀ½À» °¡Á®´Ù°¡ µð½ºÇ÷¹ÀÌ Çϴµ¥ ÁÖ·Î »ç¿ëµÈ´Ù. ÁÖ·Î Å×ÀÌºí¿¡ ¸®½ºÆ®³ª ¿­(row) ½ÃÄö½ºÀÇ ÇüÅ·Π³ªÅ¸³­´Ù. ¹Ýº¹ ÄÜÅÙÆ®¸¦ ±¸ÇöÇÏ´Â JSTLÀÇ ±âº» ¾×¼ÇÀº <c:forEach> Ä¿½ºÅÒ Å±×ÀÌ´Ù. ÀÌ Å±״ µÎ °³ÀÇ ´Ù¸¥ À¯ÇüÀÇ ¹Ýº¹À» Áö¿øÇÑ´Ù: Á¤¼ö ¹üÀ§³»ÀÇ ¹Ýº¹(À̸¦ Å׸é, ÀÚ¹ÙÀÇ for ¹®)°ú Ä÷º¼Ç ³»ÀÇ ¹Ýº¹(ÀÚ¹ÙÀÇ Iterator¿Í Enumeration Ŭ·¡½º).

Á¤¼ö ¹üÀ§ ³»¿¡¼­ ¹Ýº¹ÇÏ·Á¸é <c:forEach>(Listing 1)ÀÇ Ä¿½ºÅÒ Å±×ÀÇ ½ÅÅýº°¡ »ç¿ëµÈ´Ù. begin°ú end ¾ÖÆ®¸®ºäÆ®´Â Á¤Àû Á¤¼ö °ª ¶Ç´Â Á¤¼ö °ªÀ» °è»êÇÏ´Â ¼ö½ÄÀÌ µÇ¾î¾ßÇÑ´Ù. À̵éÀº °¢°¢ ¹Ýº¹À» À§ÇÑ À妽ºÀÇ Ãʱ⠰ª°ú ¹Ýº¹ÀÌ ¸ØÃß´Â ÁöÁ¡ÀÇ À妽º °ªÀ» ÁöÁ¤ÇÑ´Ù. <c:forEach>¸¦ »ç¿ëÇÏ¿© Á¤¼ö ¹üÀ§¿¡¼­ ¹Ýº¹ÇÒ ¶§, ÀÌ µÎ°³ÀÇ ¾ÖÆ®¸®ºäÆ®°¡ ÇÊ¿äÇÏ¸ç ´Ù¸¥ ¸ðµç °ÍµéÀº ¼±ÅûçÇ×ÀÌ´Ù.

Listing 1. <c:forEach> ¾×¼ÇÀ» ÅëÇÑ ¹Ýº¹ ½ÅÅýº

<c:forEach var="name" varStatus="name"
    begin="expression" end="expression" step="expression">
  body content
</c:forEach>

step ¾ÖÆ®¸®ºäÆ® ¶ÇÇÑ Á¤¼ö °ªÀ» °®°í ÀÖ¾î¾ßÇÑ´Ù. ¸Å¹ø ¹Ýº¹ÇÑ ÈÄ¿¡ À妽º¿¡ Ãß°¡µÉ ¾ç(amount)À» Á¤ÇÑ´Ù. µû¶ó¼­ ¹Ýº¹ À妽º´Â begin ¾ÖÆ®¸®ºäÆ® °ª¿¡¼­ ½ÃÀÛÇÏ°í step ¾ÖÆ®¸®ºäÆ®ÀÇ °ª¿¡ ÀÇÇØ Áõ°¡Çϸç end ¾ÖÆ®¸®ºäÆ®ÀÇ °ªÀ» ÃÊ°úÇÒ ¶§ Á¤ÁöÇÑ´Ù. step ¾ÖÆ®¸®ºäÆ®°¡ »ý·«µÇ¸é step Å©±â´Â 1·Î ÃʱâÈ­µÈ´Ù.

var ¾ÖÆ®¸®ºäÆ®°¡ ÁöÁ¤µÇ¸é ÁöÁ¤µÈ À̸§À» °¡Áø ¹üÀ§ º¯¼ö°¡ ¸¸µé¾îÁö°í À妽ºÀÇ ÇöÀç °ªÀ¸·Î ÇÒ´çµÈ´Ù. ÀÌ ¹üÀ§ º¯¼ö´Â <c:forEach> ű×ÀÇ ¹Ùµð ³»¿¡¼­ ¾×¼¼½º µÉ ¼ö ÀÖ´Ù. Listing 2´Â <c:forEach> ¾×¼ÇÀÇ ¿¹Á¦ÀÌ´Ù.

Listing 2. <c:forEach> ű×

<table>
<tr><th>Value</th>
    <th>Square</th></tr>
<c:forEach var="x" begin="0" end="10" step="2">
  <tr><td><c:out value="${x}"/></td>
      <td><c:out value="${x * x}"/></td></tr>
</c:forEach>
</table>

ÀÌ ¿¹Á¦ ÄÚµå´Â ´Ù¼¸ °³ ¦¼öÀÇ Á¦°öÀ» Å×À̺í·Î ¸¸µé¾ú´Ù. ±×¸² 3ÀÌ ±× °á°úÀÌ´Ù .

±×¸² 3. Listing 2ÀÇ °á°ú
Output of Listing 2

Ä÷º¼ÇÀÇ ¸â¹öµé »çÀ̸¦ ¹Ýº¹ÇÒ ¶§ <c:forEach> ű×ÀÇ Ãß°¡ ¾ÖÆ®¸®ºäÆ®ÀÎ items ¾ÖÆ®¸®ºäÆ®°¡ »ç¿ëµÈ´Ù. (Listing 3). ÀÌ·¯ÇÑ Çü½ÄÀÇ <c:forEach> ű׸¦ »ç¿ëÇÒ ¶§, items ¾ÖÆ®¸®ºäÆ®´Â À¯ÀÏÇÏ°Ô ÇÊ¿äÇÑ ¾ÖÆ®¸®ºäÆ®ÀÌ´Ù.

Listing 3. <c:forEach> ¾×¼ÇÀ» ÅëÇÑ ¹Ýº¹ ½ÅÅýº

<c:forEach var="name" items="expression" varStatus="name"
    begin="expression" end="expression" step="expression">
  body content
</c:forEach>

ÀÚ¹Ù Ç÷§Æû¿¡¼­ Á¦°øµÇ´Â Ç¥ÁØ Ä÷º¼Ç ŸÀÔÀº <c:forEach> ű׿¡ ÀÇÇØ Áö¿øµÈ´Ù. ¾î·¹ÀÌ ¿¤¸®¸ÕÆ®¸¦ ÅëÇØ ¹Ýº¹ÇÒ ¶§ ÀÌ ¾×¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Ç¥ 1Àº items ¾ÖÆ®¸®ºäÆ®¿¡ ÀÇÇØ Áö¿øµÇ´Â °ªµéÀÇ ¸®½ºÆ®ÀÌ´Ù. Å×À̺íÀÇ ¸¶Áö¸· ¿­ÀÌ Ç¥½ÃµÉ ¶§, JSTLÀº ÀÌ°ÍÀÇ ÀÎÅÍÆäÀ̽º(javax.servlet.jsp.jstl.sql.Result)¸¦ Á¤ÀÇÇÑ´Ù.

Ç¥ 1. <c:forEach> ű×ÀÇ items ¾ÖÆ®¸®ºäÆ®¿¡¼­ Áö¿øµÇ´Â Ä÷º¼Ç
items item °ªÀÇ °á°ú
java.util.Collection È£Ãâ¿¡¼­ iterator()±îÁöÀÇ ¿¤¸®¸ÕÆ®
java.util.Map java.util.Map.EntryÀÇ ÀνºÅϽº
java.util.Iterator Iterator ¿¤¸®¸ÕÆ®
java.util.Enumeration Enumeration ¿¤¸®¸ÕÆ®
Object ÀνºÅϽº ¾î·¹ÀÌ Array ¿¤¸®¸ÕÆ®
Ãʱ⠰ªµéÀÇ ¾î·¹ÀÌ ·¡ÇÎµÈ ¾î·¹ÀÌ ¿¤¸®¸ÕÆ®
ÄÞ¸¶·Î ³ª´µ¾îÁø String ¼­ºê½ºÆ®¸µ
javax.servlet.jsp.jstl.sql.Result SQL Äõ¸®ÀÇ ¿­(row)

Listing 4´Â Ä÷º¼ÇÀ» ÅëÇÑ ¹Ýº¹¿¡ »ç¿ëµÇ´Â <c:forEach> ű×ÀÌ´Ù. entryList ¶ó´Â ¹üÀ§ º¯¼ö°¡ Entry °´Ã¼ÀÇ ¸®½ºÆ®·Î ¼³Á¤µÇ¾ú´Ù. <c:forEach> űװ¡ ÀÌ ¸®½ºÆ®ÀÇ °¢ ¿¤¸®¸ÕÆ®¸¦ ó¸®ÇÑ´Ù. blogEntry ¶ó´Â ¹üÀ§ º¯¼ö·Î ÀÌ°ÍÀ» ÇÒ´çÇÏ°í µÎ °³ÀÇ Å×ÀÌºí ¿­À» ¸¸µç´Ù. Çϳª´Â Weblog ¿£Æ®¸®ÀÇ title ÀÌ°í ´Ù¸¥ Çϳª´Â ÀÌ°ÍÀÇ textÀÌ´Ù. ÀÌ ¼Ó¼ºµéÀº ÇÑ ½ÖÀÇ <c:out> ¾×¼Ç°ú ÀÌ¿¡ »óÀÀÇÏ´Â EL ½ÄÀ» ÅëÇØ blogEntry º¯¼ö¿¡¼­ °Ë»öµÈ´Ù. Weblog ¿£Æ®¸®ÀÇ Å¸ÀÌƲ°ú ÅؽºÆ®¿¡ HTMLÀÌ Æ÷ÇԵǾîÀֱ⠶§¹®¿¡ <c:out>ÀÇ escapeXml ¾ÖÆ®¸®ºäÆ®´Â false·Î ¼³Á¤µÈ´Ù. (±×¸² 4).

Listing 4. <c:forEach> ű׸¦ »ç¿ëÇÏ¿© Weblog ¿£Æ®¸® µð½ºÇ÷¹ÀÌ Çϱâ

<table>
  <c:forEach items="${entryList}" var="blogEntry">
    <tr><td align="left" class="blogTitle">
      <c:out value="${blogEntry.title}" escapeXml="false"/>
    </td></tr>
    <tr><td align="left" class="blogText">
      <c:out value="${blogEntry.text}" escapeXml="false"/>
    </td></tr>
  </c:forEach>
</table>

±×¸² 4. Listing 4ÀÇ °á°ú
Output of Listing 4

³²¾ÆÀÖ´Â <c:forEach> ¾ÖÆ®¸®ºäÆ®ÀÎ varStatus´Â Á¤¼ö ¹üÀ§ÀÇ ¹Ýº¹À̳ª Ä÷º¼Ç ¹üÀ§ÀÇ ¹Ýº¹¿¡¼­ ¶È°°Àº ¿ªÇÒÀ» ÇÑ´Ù. var ¾ÖÆ®¸®ºäÆ®¿Í ¸¶Âù°¡Áö·Î, varStatus´Â ¹üÀ§ º¯¼ö¸¦ ¸¸µå´Âµ¥ »ç¿ëµÈ´Ù. ÇöÀç À妽º °ªÀ̳ª ÇöÀç ¿¤¸®¸ÕÆ®¸¦ ÀúÀåÇÏ´Â ´ë½Å¿¡ ÀÌ º¯¼ö´Â javax.servlet.jsp.jstl.core.LoopTagStatus ÀÇ ÀνºÅϽº·Î ÇÒ´çµÈ´Ù. ÀÌ Å¬·¡½º´Â ÀÏ·ÃÀÇ ¼Ó¼ºÀ» Á¤ÀÇÇÑ´Ù. (Ç¥ 2).

Ç¥ 2. LoopTagStatus °´Ã¼ÀÇ ¼Ó¼º
¼Ó¼º Getter Description
current getCurrent() ÇöÀç ¹Ýº¹ ¶ó¿îµå ¾ÆÀÌÅÛ
index getIndex() ÇöÀç ¹Ýº¹ ¶ó¿îµåÀÇ Á¦·Î ±â¹Ý(zero-based) À妽º
count getCount() ÇöÀç ¹Ýº¹ ¶ó¿îµåÀÇ 1 ±â¹Ý(one-based) À妽º
first isFirst() ÇöÀç ¶ó¿îµå°¡ ¹Ýº¹À» ÅëÇÑ Ã¹ ¹ø° ÆнºÀÓÀ» ³ªÅ¸³»´Â Ç÷¡±×
last isLast() ¹Ýº¹ÇöÀç ¶ó¿îµå°¡ ¹Ýº¹À» ÅëÇÑ ¸¶Áö¸· ÆнºÀÓÀ» ³ªÅ¸³»´Â Ç÷¡±×
begin getBegin() begin ¾ÖÆ®¸®ºäÆ®ÀÇ °ª
end getEnd() end ¾ÖÆ®¸®ºäÆ®ÀÇ °ª
step getStep() step ¾ÖÆ®¸®ºäÆ®ÀÇ °ª

Listing 5´Â varStatus ¾ÖÆ®¸®ºäÆ®°¡ »ç¿ëµÇ´Â ¹æ¹ýÀ» ³ªÅ¸³½ ¿¹Á¦ÀÌ´Ù. Listing 4ÀÇ Äڵ带 ¼öÁ¤ÇÏ¿© Weblog ¿£Æ®¸®ÀÇ ¼ýÀÚ¼¼±â¸¦ ŸÀÌƲÀ» µð½ºÇ÷¹ÀÌÇÏ´Â Å×ÀÌºí ¿­¿¡ Ãß°¡ÇÑ´Ù. ÀÌ°ÍÀº varStatus ¾ÖÆ®¸®ºäÆ®ÀÇ °ªÀ» ÁöÁ¤ÇÏ°í °á°ú ¹üÀ§ º¯¼öÀÇ Ä«¿îÆ® ¼Ó¼º¿¡ ¾×¼¼½º ÇÏ¸é µÈ´Ù. °á°ú´Â ±×¸² 5 ÀÌ´Ù.

Listing 5. varStatus ¾ÖÆ®¸®ºäÆ®¸¦ »ç¿ëÇÏ¿© Weblog ¿£Æ®¸®ÀÇ Ä«¿îÆ® µð½ºÇ÷¹ÀÌÇϱâ

<table>
  <c:forEach items=
    "${entryList}" var="blogEntry" varStatus="status">
    <tr><td align="left" class="blogTitle">
      <c:out value="${status.count}"/>.
      <c:out value="${blogEntry.title}" escapeXml="false"/>
    </td></tr>
    <tr><td align="left" class="blogText">
      <c:out value="${blogEntry.text}" escapeXml="false"/>
    </td></tr>
  </c:forEach>
</table>

±×¸² 5. Listing 5ÀÇ °á°ú
Output of Listing 5

<c:forEach> ÀÌ¿Ü¿¡µµ, core ¶óÀ̺귯¸®´Â µÎ ¹ø° ¹Ýº¹ ű×ÀÎ <c:forTokens>¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀÇ ¾×¼ÇÀº ÀÚ¹ÙÀÇ StringTokenizer Ŭ·¡½ºÀÇ JSTL ÀÌ´Ù. <c:forTokens> ű×(Listing 6)´Â Ä÷º¼Ç ÁöÇâ ¹öÀüÀÇ <c:forEach>¿Í °°Àº ¾ÖÆ®¸®ºäÆ®¸¦ °®°í ÀÖ´Ù. <c:forTokens>ÀÇ °æ¿ì ÅäÅ«È­ µÉ ½ºÆ®¸µÀº items ¾ÖÆ®¸®ºäÆ®¸¦ ÅëÇØ ÁöÁ¤µÇ´Â ¹Ý¸é ÅäÅ«À» ¸¸µå´Âµ¥ »ç¿ëµÇ´Â ÁöÁ¤ÀÚ(deliniter)´Â delims ¾ÖÆ®¸®ºäÆ®¸¦ ÅëÇØ Á¦°øµÈ´Ù. <c:forEach> °æ¿ì¿Í ¸¶Âù°¡Áö·Î, begin, end, step¾ÖÆ®¸®ºäÆ®¸¦ »ç¿ëÇÏ¿© ÅäÅ«ÀÌ »óÀÀÇÏ´Â À妽º °ªµé°ú ¸ÅĪµÇ´Â °Í¿¡ ÇÁ·Î¼¼½º µÇµµ·Ï Á¦ÇÑ ÇÒ ¼ö ÀÖ´Ù.

Listing 6. <c:forTokens> ¾×¼Ç

<c:forTokens var="name" items="expression"
    delims="expression" varStatus="name"
    begin="expression" end="expression" step="expression">
  body content
</c:forTokens>

Á¶°ÇÈ­
µ¿Àû ÄÜÅÙÆ®¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â À¥ ÆäÀÌÁö¶ó¸é ´Ù¾çÇÑ Çü½ÄÀÇ ÄÜÅÙÆ®¸¦ º¼ ¼ö ÀÖ´Â ´Ù¾çÇÑ »ç¿ëÀÚ Ä«Å×°í¸®°¡ ÇÊ¿äÇÒ °ÍÀÌ´Ù. Weblog¿¡¼­ ¹æ¹®ÀÚµéÀº ¿£Æ®¸®¸¦ Àаí Çǵå¹éÀ» Á¦Ãâ ÇÒ »Ó¸¸ ¾Æ´Ï¶ó ±ÇÇÑÀ» ¹ÞÀº »ç¿ëÀÚ´Â »õ·Î¿î ¿£Æ®¸®¸¦ °Ô½ÃÇϰųª ±âÁ¸ ÄÜÅÙÆ®¸¦ ÆíÁýÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.

JSP ÆäÀÌÁö ³»¿¡ ±×·¯ÇÑ ±â´ÉÀ» ±¸ÇöÇÏ°í ¸®Äù½ºÆ® ±â¹ÝÀ¸·Î µð½ºÇ÷¹ÀÌ ÇÏ°íÀÚÇÏ´Â °ÍÀ» Á¦¾îÇϵµ·Ï Á¶°Ç ·ÎÁ÷À» »ç¿ëÇÔÀ¸·Î¼­ °¡¿ë¼º°ú ¼ÒÇÁÆ®¿þ¾î °ü¸®´Â Çâ»óµÈ´Ù. core ¶óÀ̺귯¸®´Â µÎ °³ÀÇ ´Ù¸¥ Á¶°ÇÈ­ ű×ÀÎ <c:if>¿Í <c:choose>¸¦ Á¦°øÇϴµ¥ ´ÙÀ½ÀÇ ±â´ÉµéÀ» ±¸ÇöÇÑ´Ù.

ÀÌ µÎ °¡Áö ¾×¼Ç Áß Á»´õ ´Ü¼øÇÑ <c:if>´Â °£´ÜÇÑ Å×½ºÆ® ½ÄÀ» °è»êÇÑ ´ÙÀ½ ½ÄÀÌ true·Î µÇ¾úÀ» ¶§¸¸ ¹Ùµð ÄÜÅÙÆ®¸¦ ó¸®ÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ű×ÀÇ ¹Ùµð ÄÜÅÙÆ®´Â ¹«½ÃµÈ´Ù. Listing 7¿¡¼­ º¸µí, <c:if>´Â Å×½ºÆ®ÀÇ °á°ú¸¦ var¿Í scope ¾ÖÆ®¸®ºäÆ®¸¦ ÅëÇØ ¹üÀ§ º¯¼ö·Î ÇÒ´çÇÒ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº Å×½ºÆ® ºñ¿ëÀÌ ºñ½Ò °æ¿ì À¯¿ëÇÏ´Ù. °á°ú´Â ¹üÀ§ º¯¼ö¿¡ ij½ÃµÇ°í <c:if>³ª ´Ù¸¥ JSTL ű׷ÎÀÇ ¿¬¼Ó È£Ãâ½Ã¿¡ °Ë»öµÈ´Ù.

Listing 7. <c:if> Á¶°Ç ¾×¼Ç ½ÅÅýº

<c:if test="expression" var="name" scope="scope">
  body content
</c:if>

Listing 8Àº <c:forEach> ű×ÀÇ LoopTagStatus °´Ã¼ÀÇ first ¼Ó¼ºÀ¸·Î »ç¿ëµÈ <c:if> ¸¦ º¸¿©ÁØ´Ù. ÀÌ °æ¿ì, ±×¸² 6 ¿¡¼­ º¸µí, Weblog ¿£Æ®¸®ÀÇ ±¸Çö ³¯Â¥´Â ù ¹ø° ¿£Æ®¸® À§¿¡ µð½ºÇ÷¹ÀÌ µÈ´Ù. ÇÏÁö¸¸ ´Ù¸¥ ¿£Æ®¸® ¾Õ¿¡ ¹Ýº¹µÇÁö ¾Ê´Â´Ù.

Listing 8. <c:if>¸¦ »ç¿ëÇÏ¿© Weblog ¿£Æ®¸® ³¯Â¥ µð½ºÇ÷¹ÀÌ Çϱâ

<table>
  <c:forEach items=
    "${entryList}" var="blogEntry" varStatus="status">
    <c:if test="${status.first}">
      <tr><td align="left" class="blogDate">
            <c:out value="${blogEntry.created}"/>
      </td></tr>
    </c:if>
    <tr><td align="left" class="blogTitle">
      <c:out value="${blogEntry.title}" escapeXml="false"/>
    </td></tr>
    <tr><td align="left" class="blogText">
      <c:out value="${blogEntry.text}" escapeXml="false"/>
    </td></tr>
  </c:forEach>
</table>

±×¸² 6. Listing 8ÀÇ °á°ú
Output of Listing 8

Listing 8 ó·³, <c:if> ű״ Á¶°ÇÈ­µÈ ÄÜÅÙÆ®¿¡ ´ëÇØ ¸Å¿ì °£·«ÇÑ ³ëÆ®¸¦ Á¦°øÇÑ´Ù. µð½ºÇ÷¹ÀÌ µÇ¾î¾ßÇÏ´Â ÄÜÅÙÆ®°¡ ¹«¾ùÀÎÁö¸¦ °áÁ¤ÇؾßÇÏ´Â Á߸³ÀûÀÎ Å×½ºÆ®°¡ ÇÊ¿äÇÒ °æ¿ì, JSTL core ¶óÀ̺귯¸®´Â <c:choose> ¾×¼ÇÀ» Á¦°øÇÑ´Ù. <c:choose> ½ÅÅýº´Â Listing 9¿Í °°´Ù.

Listing 9. <c:choose> ¾×¼Ç ½ÅÅýº

<c:choose>
  <c:when test="expression">
    body content
  </c:when>
  ...
  <c:otherwise>
    body content
  </c:otherwise>
</c:choose>

Å×½ºÆ® µÇ´Â °¢ Á¶°ÇÀº »óÀÀÇÏ´Â <c:when> ű׿¡ ÀÇÇØ ³ªÅ¸³­´Ù. test°¡ true·Î Æò°¡µÈ ù ¹ø° <c:when> ű×ÀÇ ÄÜÅÙÆ®¸¸ ÇÁ·Î¼¼½ºµÈ´Ù. ¾î¶² <c:when> Å×½ºÆ®µµ true·Î ¸®ÅϵÇÁö ¾ÊÀ¸¸é <c:otherwise> ű×ÀÇ ¹Ùµð ÄÜÅÙÆ®°¡ ÇÁ·Î¼¼½º µÈ´Ù. <c:otherwise> űװ¡ ¼±ÅÃÀûÀ̶ó´Â °ÍÀ» ÁÖ¸ñÇ϶ó. <c:choose> ű״ ÃÖ´ë ÇÑ °³ÀÇ Áßø <c:otherwise> ű׸¦ °¡Áú ¼ö ÀÖ´Ù. ¸ðµç <c:when> Å×½ºÆ®°¡ false°¡ µÇ°í ¾î¶² <c:otherwise> ¾×¼Çµµ ³ªÅ¸³ªÁö ¾ÊÀ¸¸é <c:choose> ¹Ùµð ÄÜÅÙÆ®´Â ÇÁ·Î¼¼½º µÇÁö ¾Ê´Â´Ù.

Listing 10Àº <c:choose> ű×ÀÇ ½ÇÇà ¿¹Á¦ÀÌ´Ù. ¿©±â¿¡¼­ ÇÁ·ÎÅäÄÝ Á¤º¸´Â ¸®Äù½ºÆ® °´Ã¼¿¡¼­ °Ë»öµÇ°í °£´ÜÇÑ ½ºÆ®¸µ ºñ±³¸¦ »ç¿ëÇÏ¿© Å×½ºÆ®µÈ´Ù. Å×½ºÆ® °á°ú¿¡ µû¶ó »óÀÀÇÏ´Â ÅؽºÆ® ¸Þ½ÃÁö°¡ µð½ºÇ÷¹À̵ȴÙ.

Listing 10. <c:choose>¸¦ ÀÌ¿ëÇÑ ÄÜÅÙÆ® Á¶°ÇÈ­

<c:choose>
  <c:when test="${pageContext.request.scheme eq 'http'}">
    This is an insecure Web session.
  </c:when>
  <c:when test="${pageContext.request.scheme eq 'https'}">
    This is a secure Web session.
  </c:when>
  <c:otherwise>
    You are using an unrecognized Web protocol. How did this happen?!
  </c:otherwise>
</c:choose>

¿¹¿Ü ó¸®
¸¶Áö¸· Ç÷οì Á¦¾î ű״ <c:catch>ÀÌ´Ù. ÀÌ°ÍÀº JSP ÆäÀÌÁö ³»¿¡¼­ ±âº»ÀûÀÎ ¿¹¿Ü󸮸¦ ´ã´çÇÑ´Ù. Á»´õ ±¸Ã¼ÀûÀ¸·Î ¸»Çϸé ÀÌ Å±×ÀÇ ¹Ùµð ÄÜÅÙÆ® ³»¿¡¼­ ¹ß»ýÇÏ´Â ¸ðµç ¿¹¿Ü°¡ ÀâÈ÷¸é ¹«½ÃµÈ´Ù. ÇÏÁö¸¸ ¿¹¿Ü°¡ ¹ß»ýÇÏ°í <c:catch> ű×ÀÇ ¼±ÅÃÀûÀÎ var ¾ÖÆ®¸®ºäÆ®°¡ ÁöÁ¤µÇ¸é ¿¹¿Ü´Â ÁöÁ¤µÈ º¯¼ö·Î ÇÒ´çµÇ¾î ÆäÀÌÁö ÀÚü ³»¿¡¼­ ¿¡·¯ 󸮸¦ ÇÒ ¼ö ÀÖ´Ù. Listing 11Àº <c:catch>ÀÇ ½ÅÅýºÀÌ´Ù. (¿¹Á¦´Â Listing 18ÀÌ´Ù).

Listing 11. <c:catch> ½ÇÇà ½ÅÅýº

<c:catch var="name">
  body content
</c:catch>

URL ÀÛµ¿
JSTL core ¶óÀ̺귯¸®ÀÇ ³ª¸ÓÁö ű״ URL¿¡ ÃÊÁ¡À» ¸ÂÃá´Ù. ÀÌ Áß Ã¹ ¹ø°´Â <c:url> ű×Àε¥ URL »ý¼º¿¡ »ç¿ëµÈ´Ù. ƯÈ÷, <c:url>Àº J2EE À¥ ¾ÖÇø®ÄÉÀ̼ǿë URLÀ» ±¸ÇöÇÒ ¶§ Áß¿äÇÏ°Ô ¾²ÀÌ´Â ¼¼ °¡Áö ¿¤¸®¸ÕÆ®¸¦ Á¦°øÇÑ´Ù:

  • ÇöÀç ¼­ºí¸´ ÄÜÅؽºÆ® À̸§ÀÌ µÊ
  • ¼¼¼Ç °ü¸®¸¦ À§ÇÑ URL ÀçÀÛ¼º
  • ¿äû ¸Å°³º¯¼ö À̸§°ú °ªÀÇ URL ÀÎÄÚµù

value ¾ÖÆ®¸®ºäÆ®°¡ »ç¿ëµÇ¾ú´Ù. ±âº» URLÀ» ÁöÁ¤Çϱâ À§Çؼ­. ű״ ÇÊ¿äÇÒ °æ¿ì º¯ÇüÇÑ´Ù. ÀÌ ±âº» URLÀÌ Æ÷¿öµå ½½·¡½Ã·Î ½ÃÀÛÇÏ¸é ¼­ºí¸´ ÄÜÅؽºÆ® À̸§ÀÌ ¸¸µé¾îÁø´Ù. ±¸Ã¼ÀûÀÎ ÄÜÅؽºÆ® À̸§Àº context ¾ÖÆ®¸®ºäÆ®¸¦ »ç¿ëÇÏ¿© Á¦°øµÉ ¼ö ÀÖ´Ù. ÀÌ ¾ÖÆ®¸®ºäÆ®°¡ »ý·«µÇ¸é ÇöÀç ¼­ºí¸´ ÄÜÅؽºÆ® À̸§ÀÌ »ç¿ëµÈ´Ù. ¼­ºí¸´ ÄÜÅؽºÆ® À̸§ÀÌ °³¹ß º¸´Ù´Â Àü°³ ½Ã¿¡ °áÁ¤µÉ ¶§ À¯¿ëÇÏ´Ù.

Listing 12. <c:url> ÀÛµ¿ ½ÅÅýº

<c:url value="expression" context="expression"
    var="name" scope="scope">
  <c:param name="expression" value="expression"/>
  ...
</c:url>

URL ÀçÀÛ¼ºÀº <c:url> ÀÛµ¿¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î ¼öÇàµÈ´Ù. JSP ÄÁÅ×À̳ʰ¡ »ç¿ëÀÚÀÇ ÇöÀç ¼¼¼Ç ¾ÆÀ̵𸦠ÀúÀåÇÏ°í ÀÖ´Â ÄíÅ°¸¦ °Ë»çÇϸé ÀçÀÛ¼ºÀº ÇÊ¿ä¾ø´Ù. ÄíÅ°°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é <c:url>·Î ¸¸µé¾îÁø ¸ðµç URLÀº ÀçÀÛ¼ºµÇ¾î ¼¼¼Ç ¾ÆÀ̵𸦠ÀÎÄÚµùÇÑ´Ù. °è¼ÓµÇ´Â ¿äû¿¡µµ ÀûÀýÇÑ ÄíÅ°°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é <c:url>Àº ÀÌ ¾ÆÀ̵𸦠Æ÷ÇÔÇϱâ À§ÇÑ URL ÀçÀÛ¼ºÀ» ¸ØÃá´Ù.

var ¾ÖÆ®¸®ºäÆ®¸¦ À§ÇØ °ªÀÌ Á¦°øµÇ¸é »ý¼ºµÈ URLÀº ƯÁ¤ ¹üÀ§ º¯¼öÀÇ °ªÀ¸·Î ÇÒ´çµÈ´Ù. ±×·¸Áö ¾Ê´Ù¸é °á°ú URLÀº ÇöÁ¦ JspWriter¸¦ »ç¿ëÇÏ¿© ¾Æ¿ôDzÀÌ µÈ´Ù. °á°ú¸¦ Á÷Á¢ »êÃâÇÏ´Â ±â´ÉÀº <c:url> űװ¡ °ªÀ¸·Î¼­ ³ªÅ¸³¯ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¿¹¸¦µé¾î HTMLÀÇ <a> ű×ÀÇ href ¾ÖÆ®¸®ºäÆ®¿Í °°´Ù.

Listing 13. HTML ÅÂ±×¿ë ¾ÖÆ®¸®ºäÆ® °ªÀ¸·Î URL »ý¼ºÇϱâ

<a href="<c:url value='/content/sitemap.jsp'/>">View sitemap</a>

¸¶Áö¸·À¸·Î ¸ðµç ¿äû ¸Å°³º¯¼ö°¡ ÁßøµÈ <c:param> ű׸¦ ÅëÇØ ÁöÁ¤µÇ¸é ±×µéÀÇ À̸§°ú °ªÀº HTTP GET ¿äû¿ë Ç¥ÁØ Ç¥±â¹ýÀ» »ç¿ëÇÏ¿© »ý¼ºµÈ URL¿¡ ºÙ¿©Áø´Ù. ¶ÇÇÑ URL ÀÎÄÚµùÀÌ ¼öÇàµÈ´Ù. À¯È¿ URLÀ» ¸¸µé¾î³»±â À§ÇØ º¯ÇüµÇ¾î¾ßÇÏ´Â ¸Å°³º¯¼öÀÇ À̸§ ¶Ç´Â °ª¿¡ ³ªÅ¸³ª´Â ¸ðµç ¹®ÀÚ´Â ÀûÀýÈ÷ º¯È¯µÈ´Ù.

Listing 14. ¿äû ¸Å°³º¯¼ö¸¦ °¡Áø URL ¸¸µé±â

<c:url value="/content/search.jsp">
  <c:param name="keyword" value="${searchTerm}"/>
  <c:param name="month" value="02/2003"/>
</c:url>

Listing 14ÀÇ JSP ÄÚµå´Â blogÀ̶ó´Â À̸§ÀÇ ¼­ºí¸´ ÄÜÅؽºÆ®¿¡ Àü°³µÇ¾ú´Ù. ¹üÀ§ º¯¼ö searchTermÀÇ °ªÀº "core library"·Î ¼³Á¤µÇ¾ú´Ù. ¼¼¼Ç ÄíÅ°°¡ ŽÁöµÇ¸é Listing 14¿¡¼­ ¸¸µé¾îÁø URLÀº Listing 15¿Í °°´Ù.

Listing 15. ¼¼¼Ç ÄíÅ°°¡ ÀÖ´Â »óÅ¿¡¼­ ¸¸µé¾îÁø URL

/blog/content/search.jsp?keyword=foo+bar&month=02%2F2003

¾î¶² ¼¼¼Ç ÄíÅ°µµ ¾øÀ¸¸é Listing 16ÀÇ URLÀÌ ±× °á°úÀÌ´Ù. ¼­ºí¸´ ÄÜÅؽºÆ®°¡ ÇÁ¸®Ææµå µÇ¾ú°í URL ÀÎÄÚµùÀÌµÈ ¿äû ¸Å°³º¯¼ö°¡ ºÙ¾ú´Ù.

Listing 16. ¼¼¼Ç ÄíÅ° ¾øÀÌ ¸¸µé¾îÁø URL

/blog/content/search.jsp;jsessionid=233379C7CD2D0ED2E9F3963906DB4290
  ?keyword=foo+bar&month=02%2F2003

Áß¿äÇÑ ÄÜÅÙÆ®
JSP´Â µÎ °³ÀÇ ºôÆ®ÀÎ ¸ÞÄ¿´ÏÁòÀ» °®°í ÀÖ¾î ´Ù¸¥ URL¿¡¼­ ¿Â ÄÜÅÙÆ®¸¦ JSP ÆäÀÌÁö·Î ¸¸µç´Ù. ±×°ÍÀÌ ¹Ù·Î include Áö½Ã¹®°ú <jsp:include> ÀÛµ¿ÀÌ´Ù. µÎ °æ¿ì ¸ðµÎ, Æ÷ÇԵǾî¾ß ÇÏ´Â ÄÜÅÙÆ®°¡ ÆäÀÌÁö·Î¼­ °°Àº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ºÎºÐÀÌ µÇ¾î¾ß ÇÑ´Ù. µÎ °¡Áö ű×ÀÇ ÁÖ¿ä Â÷ÀÌÁ¡Àº include Áö½Ã¹®Àº ÆäÀÌÁö°¡ ÄÄÆÄÀÏÇÏ´Â µ¿¾È Æ÷ÇÔµÈ ÄÜÅÙÆ®¸¦ °áÇÕÇÏ°í <jsp:include> ¾×¼ÇÀº JSP ÆäÀÌÁöÀÇ ¿äû ÇÁ·Î¼¼½º µ¿¾È ÀÛµ¿ÇÑ´Ù´Â °ÍÀÌ´Ù.

core ¶óÀ̺귯¸®ÀÇ <c:import> ¾×¼ÇÀº ´õ¿í ÀϹÝÀûÀ̸鼭 °­·ÂÇÑ ¹öÀüÀÇ <jsp:include>¶ó ÇÒ ¼ö ÀÖ´Ù. <jsp:include> ó·³, <c:import>´Â ¿äû ½Ã°£ ÀÛµ¿ÀÌ°í ±âº» ŽºÅ©´Â ´Ù¸¥ À¥ ¸®¼Ò½ºÀÇ ÄÜÅÙÆ®¸¦ JSP ÆäÀÌÁö¿¡ »ðÀÔÇÏ´Â °ÍÀÌ´Ù.

Listing 17. <c:import>ÀÛµ¿ ½ÅÅýº

<c:import url="expression" context="expression"
    charEncoding="expression" var="name" scope="scope">
  <c:param name="expression" value="expression"/>
  ...
</c:import>

ÀÓÆ÷Æ® µÇ¾î¾ßÇÏ´Â ÄÜÅÙÆ®¿ë URLÀº url ¾ÖÆ®¸®ºäÆ®¸¦ ÅëÇØ ÁöÁ¤µÈ´Ù. °ü·Ã URLÀÌ Çã¿ëµÇ°í ÇöÀç ÆäÀÌÁöÀÇ URL¿¡ ´ëºñÇÏ¿© ºÐÇصȴÙ. url ¾ÖÆ®¸®ºäÆ®ÀÇ °ªÀº Æ÷¿öµå ½½·¡½Ã·Î ½ÃÀÛÇÑ´Ù. ÇÏÁö¸¸ ·ÎÄà JSP ÄÁÅ×ÀÌ³Ê ³»¿¡¼­´Â Àý´ë URL·Î¼­ ÀÎÅÍÇÁ¸®ÆõȴÙ. context ¾ÖÆ®¸®ºäÆ® °ª ¾øÀÌ´Â ±×¿Í °°Àº Àý´ë URLÀº ÇöÀç ¼­ºí¸´ ÄÜÅؽºÆ®¿¡¼­ ¸®¼Ò½º¸¦ ÂüÁ¶ÇÏ´Â °ÍÀ¸·Î °£ÁֵȴÙ. ¸íÈ®ÇÑ ÄÜÅؽºÆ®°¡ context ¾ÖÆ®¸®ºäÆ®¸¦ ÅëÇØ ÁöÁ¤µÇ¸é Àý´ë(·ÎÄÃ) URLÀº À̸§À» °¡Áø ¼­ºí¸´ ÄÜÅؽºÆ®¿¡ ´ëÇØ ºÐÇصȴÙ.

<c:import> ¾×¼ÇÀº ·ÎÄà ÄÜÅÙÆ® Á¢±Ù¿¡¸¸ Á¦ÇѵÇÁö ¾Ê´Â´Ù. ÇÁ·ÎÅäÄÝ°ú È£½ºÆ® À̸§À» Æ÷ÇÔÇÑ Àüü URI´Â url ¾ÖÆ®¸®ºäÆ®ÀÇ °ªÀ¸·Î ÁöÁ¤µÉ ¼ö ÀÖ´Ù. »ç½Ç ÇÁ·ÎÅäÄÝÀº HTTP·Î Á¦ÇѵÇÁö ¾Ê´Â´Ù. java.net.URL Ŭ·¡½º·Î Áö¿øµÇ´Â ¸ðµç ÇÁ·ÎÅäÄÝÀº <c:import>ÀÇ url ¾ÖÆ®¸®ºäÆ®¿ë °ª¿¡¼­ »ç¿ëµÈ´Ù. (Listing 18).

<c:import> ¾×¼ÇÀº FTP ÇÁ·ÎÅäÄÝÀ» ÅëÇØ ¾×¼¼½º µÇ´Â ¹®¼­ÀÇ ÄÜÅÙÆ®¸¦ Æ÷ÇÔÇϴµ¥ »ç¿ëµÈ´Ù. <c:catch> ¾×¼ÇÀº FTP ÆÄÀÏ Àü¼Û µ¿¾È ¹ß»ýÇÏ´Â ¸ðµç ¿¡·¯¸¦ ó¸®Çϱâ À§ÇØ »ç¿ëµÈ´Ù. <c:catch>ÀÇ var º¯¼ö¸¦ »ç¿ëÇÏ¿© ¿¹¿Ü¿ë ¹üÀ§ º¯¼ö¸¦ ÁöÁ¤ÇÏ°í <c:if>¸¦ »ç¿ëÇÏ¿© °ªÀ» °Ë»çÇÏ¸é µÈ´Ù. ¿¹¿Ü°¡ ¹ß»ýÇÏ¸é ¹üÀ§ º¯¼ö·ÎÀÇ ÇÒ´çÀÌ ¹ß»ýÇÑ´Ù.

Listing 18. <c:import>¿Í <c:catch>ÀÇ °áÇÕ ¿¹Á¦

<c:catch var="exception">
  <c:import url="ftp://ftp.example.com/package/README"/>
</c:catch>
<c:if test="${not empty exception}">
  Sorry, the remote content is not currently available.
</c:if>

<c:import> ¾×¼ÇÀÇ ¸¶Áö¸· µÎ °³ÀÇ ¾ÖÆ®¸®ºäÆ®´Â var¿Í scopeÀÌ´Ù. var ¾ÖÆ®¸®ºäÆ®´Â ÁöÁ¤µÈ À¯¾Ë¿¤¿¡¼­ °¡Á®¿Â ÄÜÅÙÆ®°¡ ÇöÀçÀÇ JSP ÆäÀÌÁö¿¡ Æ÷ÇԵǵµ·Ï ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó º¯¼ö¿¡ ÀúÀåµÇµµ·Ï ÇÑ´Ù. scope ¾ÖÆ®¸®ºäÆ®´Â ÀÌ º¯¼öÀÇ ¹üÀ§ ÁöÁ¤À» Á¦¾îÇÏ°í ÆäÀÌÁö ¹üÀ§¸¦ ÃʱâÈ­ÇÑ´Ù.

¿äû ¸®´ÙÀÌ·º¼Ç(redirection)
¸¶Áö¸· core ¶óÀ̺귯¸® ű״ <c:redirect>ÀÌ´Ù. ÀÌ ¾×¼ÇÀº HTTP ¸®´ÙÀÌ·ºÆ® ÀÀ´äÀ» »ç¿ëÀÚ ºê¶ó¿ìÀú·Î º¸³»´Âµ¥ »ç¿ëµÇ¸ç, JSTLÀÇ javax.servlet.http.HttpServletResponseÀÇ sendRedirect() ¸Þ¼Òµå¿Í °°´Ù. ÀÌ Å±×ÀÇ url°ú context ¾ÖÆ®¸®ºäÆ® (Listing 19) ÀÛµ¿Àº <c:import>ÀÇ url°ú context ¾ÖÆ®¸®ºäÆ®¿Í °°´Ù.

Listing 19. <c:redirect>action

<c:redirect url="expression" context="expression">
  <c:param name="expression" value="expression"/>
  ...
</c:redirect>

Listing 20Àº <c:redirect> ÀÛµ¿ ¸ð½ÀÀÌ´Ù. Listing 18ÀÇ ¿¡·¯ ¸Þ½ÃÁö¸¦ ÁöÁ¤µÈ ¿¡·¯ ÆäÀÌÁö ¸®´ÙÀÌ·ºÆ®·Î ´ëüÇÑ´Ù. ÀÌ ¿¹Á¦¿¡¼­ <c:redirect> ű״ ǥÁØ <jsp:forward> ÀÛµ¿°ú ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î »ç¿ëµÈ´Ù. ¿äû µð½ºÆÐÃĸ¦ ÅëÇÑ Æ÷¿öµùÀº ¼­¹öÂÊ¿¡¼­ ±¸ÇöµÇÁö¸¸ ¸®´ÙÀÌ·ºÆ®´Â ºê¶ó¿ìÀú¿¡¼­ ¼öÇàµÈ´Ù. °³¹ßÀÚÀÇ °üÁ¡¿¡¼­ º¸¸é Æ÷¿öµùÀº ¸®´ÙÀÌ·ºÆú¸´Ù È¿À²ÀûÀÌ´Ù. ÇÏÁö¸¸ <c:redirect> ¾×¼ÇÀÌ Á»´õ À¯¿¬ÇÏ´Ù. <jsp:forward>´Â ÇöÀç ¼­ºí¸´ ÄÜÅؽºÆ® ³»¿¡¼­ ´Ù¸¥ JSP ÆäÀÌÁö·Î¸¸ µð½ºÆÐÄ¡ ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Listing 20. ¿¹¿Ü¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î ¸®´ÙÀÌ·ºÆÃ

<c:catch var="exception">
  <c:import url="ftp://ftp.example.com/package/README"/>
</c:catch>
<c:if test="${not empty exception}">
  <c:redirect url="/errors/remote.jsp"/>
</c:if>

»ç¿ëÀÚ °üÁ¡°úÀÇ ÁÖ¿ä Â÷ÀÌÁ¡Àº ¸®´ÙÀÌ·ºÆ®°¡ ºê¶ó¿ìÀú·Î µð½ºÇ÷¹ÀÌµÈ URLÀ» ¾÷µ¥ÀÌÆ®ÇÏ°í ºÏ¸¶Å© ¼³Á¤¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù´Â °ÍÀÌ´Ù. ¹Ý¸é Æ÷¿öµùÀº ¿£µåÀ¯Àú¿¡°Ô Åõ¸íÇÏ´Ù. <c:redirect>¿Í <jsp:forward> ÁßÀÇ ¼±ÅÃÀº »ç¿ëÀÚ °æÇè¿¡ µû¶ó ´Þ¶óÁø´Ù.

Âü°íÀÚ·á

¸ñ Â÷:
¿¹Á¦ ¾ÖÇø®ÄÉÀ̼Ç
Ç÷οì Á¦¾î
URL ÀÛµ¿
Áß¿äÇÑ ÄÜÅÙÆ®
¿äû ¸®´ÙÀÌ·º¼Ç(redirection)
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
Using JSPs and custom tags within VisualAge for Java and WebSphere Studio
Ä¿½ºÅÒ Å±׷ΠJSP ÆäÀÌÁö Á¦¾îÇϱâ
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
ÇÊÀÚ¼Ò°³
Mark Kolb´Â¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾îÀ̸ç Web Development with JavaServer Pages, 2nd EditionÀÇ °øµ¿ ÀúÀÚÀÌ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

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

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