ȨÆäÀÌÁö ²À´ë±â·Î

JSP 2.0: ¹¹°¡ ¹Ù²î¾ú³ª? - 1ºÎ

¿ø¹® : http://www.onjava.com/pub/a/onjava/2003/11/05/jsp.html

by Hans Bergsten, JavaServer Pages, 3ÆÇÀÇ ÀúÀÚ

¹ø¿ª ¼Õ±Ç³²(kwon37xi_aT_yahoo dOt co DoT kr)

2004/07/06

±â´Ù¸²ÀÌ °ÅÀÇ ³¡³ª°£´Ù(¹ø¿ª½ÃÁ¡¿¡¼­´Â ÀÌ¹Ì ³¡³µ´Ù). ÃֽŠJavaServer Pages(JSP)½ºÆåÀÎ JSP 2.0ÀÌ ´Ù¸¥ J2EE 1.4½ºÆå°ú ÇÔ²² ¹ßÇ¥µÉ ¶§°¡ °¡±î¿ö¿Ô´Ù. ¼Ò¼öÁ¡ ¾ÕºÎºÐÀÇ ¹öÀü ¹øÈ£°¡ ¹Ù²ï°ÍÀ¸·Î º¸¾Æ JSP¸¦ »ç¿ëÇÏ´Â ¸¹Àº ¹æ½ÄµéÀÌ ¹Ù²î¾úÀ½À» ¾Ë ¼ö ÀÖ´Ù. ´õÀÌ»ó JSPÆäÀÌÁö¿¡ JAVA ÄÚµå´Â ÇÊ¿ä¾ø´Ù. »õ·Î¿î Ç¥Çö½Ä(EL:Expression Language)°ú JSP Standard Tag Library(JSTL)´öºÐÀÌ´Ù. ¶ÇÇÑ Ä¿½ºÅÒ ¾×¼ÇÀ» °³¹ßÇÏ´Â »õ·Î¿î ¹æ½Ä´öºÐ¿¡ ÄÚµå Àç»ç¿ëÀÌ ÈξÀ ½¬¿öÁ³´Ù. º¸´Ù ¸íÈ®ÇÏ°Ô ¸»ÇØ, JSP 2.0Àº ´ÙÀ½°ú °°Àº ÀÌÁ¡µéÀ» °¡Áö°í ÀÖ´Ù.

ÀÌ ±â»ç´Â JSP 2.0 ÀÇ »õ·Î¿î ±â´ÉÀ» ¼³¸íÇÏ´Â ±â»ç ½Ã¸®ÁîÀÇ Ã¹¹ø° ÀÌ´Ù. À̹ø Àå¿¡¼­´Â EL°ú °ü·ÃµÈ »çÇ׸¸ º¼ °ÍÀ̸ç, ´Ù¸¥ »çÇ×µéÀº ´ÙÀ½ ȸ¿¡ º¸±â·Î ÇÑ´Ù. ³ª´Â ´ç½ÅÀÌ JSP 1.2¿¡ Àͼ÷ÇÏ°í JSP Standard Tag Library(JSTL)¿¡ ´ëÇØ µé¾îº¸±â´Â Çß´Ù°í °¡Á¤ÇÏ°í ±ÛÀ» ½è´Ù.

´ç½ÅÀº ¶ÇÇÑ ³ªÀÇ JavaServer Pages Ã¥ 3ÆÇ¿¡ °ü½ÉÀÌ ÀÖÀ» Áöµµ ¸ð¸¥´Ù. ÀÌ Ã¥Àº ÀÌÁ¦ ¼³¸íÇÒ ¸ðµç °ÍÀ» ´õ ÀÚ¼¼È÷ ¼³¸íÇÏ°í, ´ç½ÅÀÌ JSP¿Í JSTLÀ» ¸ð¸¦ ¼öµµ ÀÖ´Ù°í »ý°¢ÇÏ°í ¾´ °ÍÀÌ´Ù. ÀÌ Ã¥Àº 2003³â 12¿ù¿¡ Ãâ°£µÉ ¿¹Á¤ÀÌ´Ù. ÇÏÁö¸¸ Amazon.com µîÀÇ ¼­Á¡¿¡¼­ ¹Ì¸® ÁÖ¹®ÇÒ ¼öµµ ÀÖ´Ù.

Expression Language (EL)

´ç½ÅÀÌ JSTLÀ» »ç¿ëÇغôٸé, ÀÌ¹Ì JSP Expression Lnaguage¸¦ Àß ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ELÀº JSTL 1.0 ½ºÆå¿¡¼­ ¼Ò°³µÈ °ÍÀ¸·Î JAVAÄڵ带 ´ë½ÅÇØ ½ÇÇà½Ã°£¿¡ ¾×¼Ç(ű×) ¿¤¸®¸ÕÆ®ÀÇ ¼Ó¼º¿¡ °ªÀ» ÁöÁ¤ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. JSTLÀÇ ELÀº ¸Å¿ì »¡¸® Àα⸦ ²ø¾ú´Ù. ÇÏÁö¸¸ ¹®Á¦°¡ Çϳª Àִµ¥ JSTL ELÀº ¿ÀÁ÷ JSTL ¾×¼Ç¿¡¼­¸¸ ÀÛµ¿Çß°í, Ä¿½ºÅÒ ¾×¼ÇÀº Ç¥ÁØÀÌ ¾Æ´Ñ API¸¦ »ç¿ëÇؼ­ ELÀ» ¼öÇàÇϵµ·Ï Ưº°È÷ ÀÛ¼ºµÇ¾î¾ß¸¸ ELÀ» »ç¿ëÇÒ ¼ö ÀÖ¾ú´Ù.

JSP 2.0À» ½ÃÀÛÇϸç, JSP ÄÁÅ×ÀÌ³Ê ÀÚ½ÅÀÌ EL Ç¥Çö½ÄÀ» Çؼ®ÇÒ ¼ö ÀÖ°Ô µÇ¾ú°í, Ç¥ÁØ°ú Ä¿½ºÅÒ ¾×¼Ç ±×¸®°í, ÅÛÇø´ ÅؽºÆ®(HTML°°Àº)¿Í °°ÀÌ JAVA Äڵ带 »ç¿ëÇØ¾ß Çß´ø ¸ðµç °÷¿¡¼­ ELÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù.

±¸Ã¼ÀûÀÎ ¿¹Á¦¸¦ º¸±âÀü¿¡, ELÀÌ ¹ºÁö ´õ ÀÚ¼¼È÷ »ìÆ캸ÀÚ. ELÀº JavaScript¿¡¼­ Á¶±Ý È®ÀåÇÏ°í XPath(XML ¹®¼­ÀÇ Á¤º¸¿¡ Á¢±ÙÇϱâ À§ÇØ »ç¿ëµÇ´Â ¾ð¾î)¿¡¼­ ÈùÆ®¸¦ ¾ò¾î ¸¸µé¾îÁø ¾ð¾îÀÌ´Ù. ±×·¯³ª ELÀº °ªÀÌ ¾ø´Â º¯¼ö(null)¿¡ ´ëÇØ Á»´õ °ü´ëÇÏ°í, µ¥ÀÌŸÇü º¯È¯À» Á»´õ ÀÚµ¿ÀûÀ¸·Î ÇØÁØ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡µéÀº ÆĶó¹ÌÅ͵éÀ» Æû¿¡¼­ ¾ò¾î¿À´Â À¥ ¾îÇø®ÄÉÀ̼ǿ¡ Áß¿äÇÏ´Ù. ÆĶó¹ÌÅ͵éÀÌ ¸î¸î ¿äû¿¡¼­´Â Á¸ÀçÇÏ°í ¾î¶² °æ¿ì¿¡´Â °ªÀÌ ¾øÀ» ¼ö ÀÖÀ¸¸ç, ºê¶ó¿ìÀú°¡ ÆĶó¹ÌÅÍ°ªÀ» Ç×»ó ¹®ÀÚ¿­(text)·Î º¸³»´Âµ¥ ¹ÝÇØ, À¥ ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â ¼ýÀÚ³ª ºÒ¸°(true/false)·Î »ç¿ëÇØ¾ß ÇÒ °æ¿ìµµ »ý±ä´Ù. ELÀÌ ¼³°èµÈ ¹æ½Ä¿¡ µû¸£¸é, °ªÀÌ ¾øÀ» °æ¿ì(null)³ª, Çü º¯È¯ °°Àº °Í¿¡ ÀüÇô ½Å°æ¾µ ÇÊ¿ä°¡ ¾ø´Ù.

EL Ç¥Çö½ÄÀº º¯¼ö¿Í ¿¬»êÀÚ¸¦ Æ÷ÇÔÇÑ´Ù. JSP ½ºÄÚÇÁ(page, request, session, application)¿¡ ÀúÀåµÈ ¾î¶² ºóÀÌ¶óµµ EL º¯¼ö·Î¼­ »ç¿ëµÉ ¼ö ÀÖ´Ù. °Ô´Ù°¡ ELÀº ´ÙÀ½°ú °°Àº ³»Àå º¯¼öµéµµ Áö¿øÇÑ´Ù:

º¯¼ö À̸§¼³¸í
pageScope ¸ðµç page ½ºÄÚÇÁ º¯¼ö¿¡ ´ëÇÑ Ä÷º¼Ç(java.util.Map).
requestScope ¸ðµç request ½ºÄÚÇÁ º¯¼ö¿¡ ´ëÇÑ Ä÷º¼Ç(java.util.Map).
sessionScope ¸ðµç session ½ºÄÚÇÁ º¯¼ö¿¡ ´ëÇÑ Ä÷º¼Ç( java.util.Map).
applicationScope ¸ðµç application ½ºÄÚÇÁ º¯¼ö¿¡ ´ëÇÑ Ä÷º¼Ç(java.util.Map)
param ¸ðµç request ÆĶó¹ÌÅÍ °ªµéÀ» ÇÑ°³ÀÇ ¹®ÀÚ¿­·Î °¡Áø Ä÷º¼Ç(java.util.Map).
paramValues ¸ðµç request ÆĶó¹ÌÅÍÀÇ °ªµéÀ» ÆĶó¹ÌÅÍ´ç ¹®ÀÚ¿­ ¹è¿­·Î °¡Áø Ä÷º¼Ç(java.util.Map).
header ¸ðµç Çì´õÀÇ °ªµéÀ» Çì´õ´ç ÇϳªÀÇ ¹®ÀÚ¿­·Î °¡Áø Ä÷º¼Ç(java.util.Map).
headerValues ¸ðµç Çì´õÀÇ °ªµéÀ» Çì´õ´ç ¹®ÀÚ¿­ ¹è¿­·Î °¡Áø Ä÷º¼Ç(java.util.Map).
cookie ¸ðµç ÄíÅ°ÀÇ °ªµéÀ» ÄíÅ°´ç ÇÑ°³ÀÇ javax.servlet.http.CookieÀÇ °ªÀ¸·Î °¡Áø Ä÷º¼Ç(java.util.Map).
initParam ¸ðµç ¾îÇø®ÄÉÀ̼ÇÀÇ ÃʱâÈ­ ÆĶó¹ÌÅ͸¦ ÆĶó¹ÌÅÍ´ç ÇÑ°³ÀÇ ¹®ÀÚ¿­·Î °¡Áø Ä÷º¼Ç(java.util.Map).
pageContext javax.servlet.jsp.PageContext Ŭ·¡½º·Î¼­, ´Ù¾çÇÑ request µ¥ÀÌŸ¿¡ ´ëÇÑ ¾×¼¼½º¸¦ °¡´ÉÄÉ ÇÑ´Ù.

¿¬»êÀÚµéÀº º¯¼öµé·Î ¹» ÇÒ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù. EL¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¿¬»êÀÚµéÀº ÇÁ·Î±×·¡¹ÖÀ» ÇØºÃ´Ù¸é ¸¹ÀÌ ´«¿¡ ÀÍÀ» °ÍÀÌ´Ù. ¿Ö³Ä¸é, °ÅÀÇ ¸ðµç ¾ð¾î¿¡¼­ Áö¿øµÇ´Â ¿¬»êÀÚµé°ú °°±â ¶§¹®ÀÌ´Ù.

¿¬»êÀÚ¼³¸í
. ºóÀÇ ÇÁ¶óÆÛƼ³ª MapÀÇ ¿£Æ®¸® Á¢±Ù
[] ¹è¿­À̳ª ¸®½ºÆ® ¿¤¸®¸ÕÆ® Á¢±Ù
() ºÎ°¡ÀûÀΠǥÇö½ÄÀ» ¿¬»ê ¼ø¼­¸¦ ¹Ù²ã¼­ ¿¬»êÇÏ°Ô ÇÒ ¶§. 3 * (1+2)
? : Á¶°Ç Å×½ºÆ® - Á¶°Ç ? trueÀ϶§¸®ÅÏ°ª : falseÀ϶§¸®ÅÏ°ª
+ ´õÇϱâ
- »©±â ȤÀº À½¼ö
* °öÇϱâ
/ ȤÀº div ³ª´©±â
% ȤÀº mod ³ª¸ÓÁö
== ȤÀº eq °°´Ù
!= ȤÀº ne ´Ù¸£´Ù
< ȤÀº lt º¸´Ù ÀÛ´Ù
> ȤÀº gt º¸´Ù Å©´Ù
<= ȤÀº le À۰ųª °°´Ù
>= ȤÀº ge Å©°Å³ª °°´Ù
&& ȤÀº and ³í¸® AND
|| ('|'°¡ ¿¬¼ÓÀ¸·Î µÎ°³) ȤÀº or ³í¸® OR
! ȤÀº not ´ÜÇ× not (true¸¦ false·Î false¸¦ true·Î)
empty ºó º¯¼ö °ª(null, ºó ¹®ÀÚ¿­, ºó ¹è¿­, ¿£Æ®¸®°¡ ¾ø´Â ¸ÊÀ̳ª Ä÷º¼Ç)Àΰ¡ Å×½ºÆ®
func(args) ÇÔ¼ö È£Ãâ. func´Â ÇÔ¼ö À̸§ÀÌ°í args´Â ¾ø°Å³ª, ÇÑ°³ ȤÀº ½°Ç¥(,)·Î ºÐ¸®µÈ ¿©·¯°³ÀÇ ÇÔ¼ö ÀÎÀÚÀÌ´Ù

EL Ç¥Çö½ÄÀº ¼ýÀÚ, ¹®ÀÚ¿­(Ȭµû¿ÈÇ¥ ȤÀº ½Ö µû¿ÈÇ¥¿Í ÇÔ²²), ºÒ¸° °ª°ú null°°Àº ¸®ÅÍ·²(»ó¼ö °ª)µéµµ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.

EL Ç¥Çö½ÄÀÌ ÅÛÇø´ ¹®ÀÚ¿­(HTMLµî)ÀÌ ¿À´Â °ð¿¡µµ ¿Ã ¼ö Àֱ⠶§¹®¿¡, JSP ÄÁÅ×À̳ʿ¡°Ô ±×°ÍÀÌ ELÇ¥Çö½ÄÀ̶ó°í ¾Ë·ÁÁà¾ß¸¸ ÇÑ´Ù. ±¸È¹¹®ÀÚ(delimiter)¸¦ ÀÌ¿ëÇؼ­ ÇÏ¸é µÈ´Ù. ELÀº Ç×»ó ${ ±¸È¹¹®ÀÚ·Î ½ÃÀÛÇؼ­ }·Î ³¡³­´Ù. ¿©±â 5¸¦ amount¶ó´Â º¯¼ö¿¡ ´õÇÏ´Â EL Ç¥Çö½ÄÀÌ ÀÖ´Ù.

${amount + 5}

ºó ÇÁ¶óÆÛƼ¿¡ 5¸¦ ´õÇÏ°íÀÚÇÑ´Ù¸é, ÇÁ¶óÆÛƼ Á¢±Ù ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é µÈ´Ù:

${order.amount + 5}

ÇÁ¶óÆÛƼ Á¢±Ù ¿¬»êÀÚ(.)Àº EL¿¡°Ô ºóÀ̳ª Ä÷º¼Ç(¿©±â¼­´Â order, ºóÀ̳ª java.util.Map ÀÏ ¼ö ÀÖ´Ù)¿¡¼­ ±× ´ÙÀ½¿¡ ¿À´Â À̸§°ú °°Àº ÇÁ¶óÆÛƼ(¿©±â¼­´Â amount)¸¦ ã°ÔÇÑ´Ù.

´ë½Å, ¹è¿­ Á¢±Ù ¿¬»êÀÚ¸¦ »ç¿ëÇصµ µÈ´Ù.

${order['amount'] + 5}

[] ¾ÈÀÇ °ªÀº ÇÁ¶óÆÛƼÀÇ À̸§À» ³ªÅ¸³»´Â ¹®ÀÚ¿­(ÀÌ ¿¹Á¦¿¡¼­ ¾²Àδë·Î)À̰ųª ¾Æ´Ï¸é ÇÁ¶óÆÛƼ À̸§À» °ªÀ¸·Î °¡Áø º¯¼ö (ȤÀº ´Ù¸¥ EL Ç¥Çö½Ä)ÀÌ¸é µÈ´Ù.

ELÀº µ¿ÀûÀ¸·Î °ªÀ» ¹Þµµ·Ï(dynamic value ȤÀº request-time attribute) ÁöÁ¤µÈ Ç¥ÁØ(JSTL)À̳ª Ä¿½ºÅÒ JSP ¾×¼ÇÀÇ ¼Ó¼º¿¡ °ªÀ» ÁöÁ¤ÇÒ ¶§µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù :

<c:out value="${order.amount + 5}"/>

JSP 2.0 ÀÌÀü¿¡´Â ¼Ó¼º¿¡ µ¿ÀûÀ¸·Î °ªÀ» ÁÖ±â À§ÇØ JAVA Ç¥Çö½ÄÀ» ½á¾ß¸¸ Çß´Ù. ÀÌ·ÎÀÎÇØ ¿ì¸®´Â Áö³­ ¸î³â°£ ¼ö¸¹Àº ¹®¹ý ¿À·ù¿¡ ½Ã´Þ·Á¾ß¸¸ Çß´Ù.

¸¶Ä§³» EL Ç¥Çö½ÄÀÌ ÆäÀÌÁö ³»¿¡¼­ ÅÛÇø´ ÅؽºÆ®¿Í Á÷Á¢ÀûÀ¸·Î ÇÔ²² ¾²ÀÏ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÀÌ°ÍÀº HTML ¿¤¸®¸ÕÆ®¿Í ¼Ó¼ºÀ» µ¿ÀûÀ¸·Î ÁöÁ¤ÇØ¾ß ÇÒ ¶§ ¸Å¿ì Æí¸®ÇÏ´Ù.

<input name="firstName" value="${customer.firstName}">

JSP 1.2 ¿¡¼­´Â, °°Àº ÀÛ¾÷À» Çϱâ À§ÇØ JSTLÀÇ <c:out> ¾×¼ÇÀ» »ç¿ëÇؾ߸¸ Çß´Ù. ÀÌ°ÍÀº ¼­·Î ´Ù¸¥ ÇüÀÇ µÎ ¿¤¸®¸ÕÆ®¸¦ ¼¯¾î½á¼­ ÀÌÇØÇÏ±â ¸Å¿ì ¾î·Æ´Ù :

<input name="firstName"
    value="<c:out value="${customer.firstName}"/>" >

»õ·Î¿î JSTL 1.1 ÅÂ±× ¶óÀ̺귯¸® ÁöÁ¤ÀÚ

JSTL 1.1Àº JSTLÀ» JSP 2.0¿¡ ÅëÇÕÇϱâ À§ÇÑ ¸¶ÀÌ³Ê ½ºÆå ¸±¸®ÁîÀÌ´Ù. ´«¿¡ ¶ç´Â º¯È­´Â JSTL 1.0ÀÇ µÎ°³·Î ºÐ¸®µÇÀÖ´ø ¶óÀ̺귯¸®(ÇÑ°¡Áö´Â EL¸¦ »ç¿ëÇÏ°í ÇÑ°¡Áö´Â JAVA Ç¥Çö½ÄÀ» »ç¿ëÇÏ´Â)°¡ EL°ú JAVA Ç¥Çö½Ä ¸ðµÎ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÑ°¡Áö ¶óÀ̺귯¸®·Î ÅëÇÕµÈ °ÍÀÌ´Ù.

JSTL 1.1ÀÇ ¶óÀ̺귯¸®µéÀº ´ÙÀ½°ú °°Àº ÁöÁ¤ÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. 1.0°ú ´Ù¸£´Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù.

LibraryURIPrefix
Core http://java.sun.com/jsp/jstl/core c
XML processing http://java.sun.com/jsp/jstl/xml x
I18N formatting http://java.sun.com/jsp/jstl/fmt fmt
Database access http://java.sun.com/jsp/jstl/sql sql
Functions http://java.sun.com/jsp/jstl/functions fn

JSTL 1.0À» »ç¿ëÇß¾ú´Ù¸é, ¸ðµç ¶óÀ̺귯¸®ÀÇ URIÀÇ Áß°£¿¡ '/jsp' Æнº°¡ µé¾î°£ °ÍÀ» Á¦¿ÜÇÏ°í, ±âÁ¸ÀÇ ¶óÀ̺귯¸® ÁöÁ¤ÀÚ¿Í µ¿ÀÏÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ¶ÇÇÑ, JSTL 1.1ÀÌ EL Function À̶ó´Â »õ·Î¿î ¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ½µµ º¼ ¼ö ÀÖ´Ù. ÀÌ°ÍÀ» ª°Ô »ìÆ캼 °ÍÀÌ´Ù.

»õ·Î¿î EL ¿¬»êÀÚ

JSP ÆäÀÌÁö¿¡¼­ ¸Å¿ì ÀÚÁÖ ÇÊ¿äÇÑ ±â´É ÁßÀÇ Çϳª´Â ¾î¶² Á¶°ÇÀÌ true ÀÏ ¶§ ÅÛÇø´ ÅؽºÆ®¸¦ Æ÷ÇÔ½ÃÅ°´Â ±â´ÉÀÌ´Ù. JSP 1.2¿Í JSTL 1.1À» ÀÌ¿ëÇϸé, ÀÌ°ÍÀ» <c:if> ºí·ÏÀ» ÀÌ¿ëÇؼ­ ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ±×°Ç ¹«Ã´ º¹ÀâÇÑ ÇØ°áÃ¥ÀÌ´Ù. JSP 2.0Àº EL¿¡ »õ·Î¿î Á¶°Ç ¿¬»êÀÚ¸¦ Ãß°¡ÇÏ¿© ´õ¿í °í»óÇÏ°Ô ÀÌ·± ¹®Á¦¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù.

Á¶°Ç ¿¬»çÀÚ´Â ¸¹Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ Á¸ÀçÇϹǷÎ(¿¹¸¦ µé¾î JAVA, C, JavaScript µî). ÀÌ¹Ì º»ÀûÀÌ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¿¬»êÀÚ´Â ºÒ¸° Á¶°Ç°ú Á¶°ÇÀÌ ÂüÀ϶§ »ç¿ëÇÒ °ª°ú Á¶°ÇÀÌ °ÅÁþÀÏ ¶§ »ç¿ëÇÒ ¶Ç ´Ù¸¥ °ªÀ» ÃëÇÑ´Ù. ¿¹Á¦¸¦ º¸¸é ¾î¶»°Ô µ¹¾Æ°¡´ÂÁö È®½ÇÈ÷ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù:

<select name="artist">
 <option value="1" ${param.artist == 1 ? 'selected' : ''}>
 Vesica Pisces
 <option value="2" ${param.artist == 2 ? 'selected' : ''}>
 Cortical Control
 <option value="3" ${param.artist == 3 ? 'selected' : ''}>
 Vida Vierra
</select>

¿©±â¼­ ³ª´Â select ¸ñ·Ï¿¡¼­ ÀÔ·ÂµÈ °ª¿¡ ÀÏÄ¡ÇÏ´Â °ªÀ» °¡Áö´Â option¿¡ selected ¼Ó¼ºÀ» ÁöÁ¤Çϱâ À§ÇØ Á¶°Ç ¿¬»êÀÚ¸¦ »ç¿ëÇß´Ù. ¸¸¾à Á¶°Ç (param.artist == 1)ÀÌ trueÀ̸é, ù¹ø° °á°ú ('selected')°¡ ÆäÀÌÁö¿¡ Ãß°¡µÈ´Ù. ±×·¸Áö¾ÊÀ¸¸é µÎ¹ø° °ª(ºó ¹®ÀÚ¿­)ÀÌ Ãß°¡µÈ´Ù.

EL ÇÔ¼ö

ELÀÌ JSTL½ºÆå¿¡¼­ JSP ½ºÆåÀ¸·Î ³Ñ¾î°¡¸é¼­, »õ·Î¿î ¹¦±â¸¦ Ãß°¡Çß´Ù. ´Ù½Ã¸»ÇØ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀÌ´Ù. EL ÇÔ¼ö ¹®¹ýÀº ´Ü¼øÇÏ´Ù. ÀÎÀÚµéÀ» °ýÈ£¾È¿¡ °¡Áö°í ÀÖ´Â ÇÔ¼öÀÇ À̸§:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

${fn:length(myCollection)}

ÇÔ¼ö´Â ÅÂ±× ¶óÀ̺귯¸®¿¡ ¼ÓÇÏ´Â °ÍÀÌ°í, ÇÔ¼ö À̸§Àº °¢ ÆäÀÌÁöÀÇ ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚ¸¦ ÅëÇØ ¶óÀ̺귯¸®¿¡ ÁöÁ¤µÈ prefix¸¦ Æ÷ÇÔÇÑ´Ù.

ÅÂ±× ¶óÀ̺귯¸® ±â¼úÀÚ(TLD; Tag Library Descriptor)´Â ÇÔ¼ö À̸§À» ÇÔ¼öÀÇ ±â´ÉÀ» ±¸ÇöÇÑ Àڹ٠Ŭ·¡½ºÀÇ static ¸Þ¼Òµå·Î ¸ÅÇÎÇÑ´Ù.

<function>
<description>
Ä÷º¼ÇÀÇ ¾ÆÀÌÅÛ °¹¼ö³ª ¹®ÀÚ¿­ÀÇ ¹®ÀÚ °¹¼ö¸¦ ¸®ÅÏÇÑ´Ù.
</description>
<name>length</name>
<function-class>
org.apache.taglibs.standard.functions.Functions
</function-class>
<function-signature>
int length(java.lang.Object)
</function-signature>
</function>

¿©±â¼­ °¡Àå ÁÖÀÇÇؼ­ º¼ °ÍÀº <function-signature> ¿¤¸®¸ÕÆ®ÀÌ´Ù. ¿©±â¿¡ ÇÔ¼ö°¡ ¸®ÅÏÇÒ °ªÀÇ Çü¿¡ ´ëÇÑ ¼±¾ð, staticÀ¸·Î ±¸ÇöÇÑ ¸Þ¼ÒµåÀÇ À̸§, ±×¸®°í °ýÈ£¾È¿¡ ¸ðµç Àμö(¾ø°Å³ª 1°³ ÀÌ»ó, ½°Ç¥·Î ºÐ¸®)ÀÇ Çü ¼±¾ðÇÑ °ÍÀÌ Æ÷ÇԵȴÙ. ¸®ÅÏ Çü°ú ÀμöÀÇ ÇüÀº JAVA ¿ø½ÃÇüÀ̰ųª ¿ÏÀüÇÑ(ÆÐÅ°Áö±îÁö Æ÷ÇÔÇÑ) Çü À̸§À̾î¾ß ÇÑ´Ù.

length() ÇÔ¼ö¿¡ ´ëÇÑ static ¸Þ¼Òµå´Â Jakarta Taglibs Standard library¿¡¼­´Â ¾Æ·¡¿Í °°ÀÌ ±¸ÇöµÇ¾îÀÖ´Ù:

public static int length(Object obj) throws JspTagException {
if (obj == null)
    return 0;
if (obj instanceof String)
    return ((String)obj).length();
if (obj instanceof Collection)
    return ((Collection)obj).size();
if (obj instanceof Map)
    return ((Map)obj).size();

int count = 0;
if (obj instanceof Iterator) {
    Iterator iter = (Iterator) obj;
    count = 0;
    while (iter.hasNext()) {
        count++;
        iter.next();
    }
    return count;
}
if (obj instanceof Enumeration) {
    Enumeration enum = (Enumeration) obj;
    count = 0;
    while (enum.hasMoreElements()) {
        count++;
        enum.nextElement();
    }
    return count;
}
try {
    count = Array.getLength(obj);
    return count;
} catch (IllegalArgumentException ex) {}
    throw new JspTagException("Unsupported type");
}

¿©±â º¸µíÀÌ, º°·Î ³¸¼³°ÍÀÌ ¾ø´Ù. ÀÌ°Ç ±×³É Æò¹üÇÑ static ¸Þ¼Òµå·Î ÀμöÀÇ Æ¯Á¤ÇÑ ·±Å¸ÀÓ Çü¿¡ µû¶ó length¸¦ ±¸ÇÏ´Â °ÍÀÌ´Ù.

¿©±â¼­ ¿¹·Îµç length() ¸Þ¼Òµå ¿Ü¿¡µµ, JSTL 1.1 ÇÔ¼ö ÅÂ±× ¶óÀ̺귯¸®´Â ÀÚÁÖ »ç¿ëµÇ´Â ¸¹Àº ÇÔ¼öµéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù:

ÇÔ¼ö¼³¸í
fn:contains(string, substring) stringÀÌ substringÀ» Æ÷ÇÔÇϸé true ¸®ÅÏ.
fn:containsIgnoreCase(string, substring) ´ë¼Ò¹®ÀÚ¿¡ °ü°è¾øÀÌ, stringÀÌ substringÀ» Æ÷ÇÔÇϸé true ¸®ÅÏ.
fn:endsWith(string, suffix) stringÀÌ suffix·Î ³¡³ª¸é true ¸®ÅÏ.
fn:escapeXml(string) string¿¡ XML°ú HTML¿¡¼­ Ưº°ÇÑ Àǹ̸¦ °¡Áø ¹®ÀÚµéÀÌ ÀÖÀ¸¸é, XML ¿£Æ¼Æ¼ ÄÚµå·Î ¹Ù²ãÁØ µÚ ¹®ÀÚ¿­ ¸®ÅÏ.
fn:indexOf(string, substring) string¿¡¼­ substringÀÌ Ã³À½À¸·Î ³ªÅ¸³ª´Â À妽º ¸®ÅÏ.
fn:join(array, separator) array(¹è¿­) ¿ä¼ÒµéÀ» separator¸¦ ±¸ºÐÀÚ·Î ÇÏ¿© ¿¬°áÇؼ­ ¸®ÅÏ
fn:length(item) item ÀÌ ¹è¿­À̳ª Ä÷º¼ÇÀÌ¸é ¿ä¼ÒÀÇ °¹¼ö¸¦, ¹®ÀÚ¿­ÀÌ¸é ¹®ÀÚÀÇ °¹¼ö¸¦ ¸®ÅÏ.
fn:replace(string, before, after) string ³»¿¡ ÀÖ´Â before ¹®ÀÚ¿­À» after ¹®ÀÚ¿­·Î ¸ðµÎ ¹Ù²ã¼­ ¸®ÅÏ.
fn:split(string, separator) string ³»ÀÇ ¹®ÀÚ¿­À» separator¿¡ µû¶ó ³ª´©¾î¼­ ¹è¿­·Î ±¸¼ºÇØ ¸®ÅÏ.
fn:startsWith(string, prefix) stringÀÌ prefix·Î ½ÃÀÛÇϸé true ¸®ÅÏ.
fn:substring(string, begin, end) string¿¡¼­ begin À妽º¿¡¼­ ½ÃÀÛÇؼ­ end À妽º¿¡ ³¡³ª´Â ºÎºÐ(end À妽º¿¡ Àִ¹®ÀÚ Æ÷ÇÔ)ÀÇ ¹®ÀÚ¿­À» ¸®ÅÏ.
fn:substringAfter(string, substring) string¿¡¼­ substringÀÌ ³ªÅ¸³ª´Â ÀÌÈÄÀÇ ºÎºÐ¿¡ ÀÖ´Â ¹®ÀÚ¿­À» ¸®ÅÏ.
fn:substringBefore(string, substring) string¿¡¼­ substringÀÌ ³ªÅ¸³ª±â ÀÌÀüÀÇ ºÎºÐ¿¡ ÀÖ´Â ¹®ÀÚ¿­À» ¸®ÅÏ.
fn:toLowerCase(string) stringÀ» ¸ðµÎ ¼Ò¹®ÀÚ·Î ¹Ù²ã ¸®ÅÏ.
fn:toUpperCase(string) stringÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²ã ¸®ÅÏ.
fn:trim(string) string ¾ÕµÚÀÇ °ø¹é(whitespace)À» ¸ðµÎ Á¦°ÅÇÏ¿© ¸®ÅÏ.

¸¶¹«¸®

ÀÌ ±Û¿¡¼­, »õ·Î¿î ELÀÇ Æ¯Â¡°ú JSTL 1.1 ÇÔ¼ö ¶óÀ̺귯¸® µî JSP ½ºÆå¿¡ µµÀÔµÈ ELÀ» ´Ù·ç¾ú´Ù. ´ÙÀ½ ȸ¿¡¼­´Â JSPÀÇ ¿À·ù ÆäÀÌÁö(error-page)ÀÇ Çâ»ó°ú jsp:id ¼Ó¼ºÀÇ ÀÌÁ¡, »õ·Î¿î ¹èÄ¡ ±â¼úÀÚ(deployment descriptor)ÀÇ Çü½Ä, JSP 2.0 ÀÌ JSP¿Í XML »ç¿ëÀ» ¾î¶»°Ô ½±°Ô ¸¸µé¾îÁִ°¡, ±×¸®°í Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸®¿¡ °üÇÑ »çÇ×µéÀ» ´Ù·ê °ÍÀÌ´Ù.

JSP 2.0ÀÇ »õ·Î¿î ±â´ÉµéÀ» Á¢Çغ¸°í ½Í´Ù¸é, Apache Tomcat 5¸¦ »ç¿ëÇغ¸¶ó°í ±ÇÇÏ°í ½Í´Ù. ÅèĹÀº »õ·Î¿î JSP ½ºÆåÀ» ÃÖÃÊ·Î ±¸ÇöÇÑ JSP ÄÁÅ×À̳ÊÀÌ´Ù. Jakarta Project »çÀÌÆ®¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù.