.
.
Core Java Technologies Technical Tips
.
2004³â 2¿ù 5ÀÏ    

Enterprise Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java 2 Platform, Enterprise Edition (J2EE)¿¡ ±â¹ÝÇÑ enterprise Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼­´Â Java 2 SDK, Standard Edition, v 1.4¿Í Java 2 SDK, Enterprise Edition, v 1.3.1 (Reference Implementation)¸¦ »ç¿ëÇÕ´Ï´Ù.

À̹ø È£¿¡¼­´Â,

.JSP 2.0 Expression Language

¸¦ ´Ù·ç°Ô µË´Ï´Ù.

ÀúÀÚ Mark Johnson

¿¹Á¦ÀÇ »ùÇà ¾ÆÄ«À̺긦 ´Ù¿î·Îµå ¹ÞÀ¸¼¼¿ä. ÄÁÅØ½ºÆ® ·çÆ®´Â ttjan2004ÀÌ°í »ùÇÃÄÚµåÀÇ »ç¿ë¹ýÀº index.html welcome file ¿¡¼­ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÄÚµåÀÇ »ç¿ë¿¡ °üÇÑ ±ÇÇÑÀ̳ª Á¤º¸´Â license terms¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.

.

JSP 2.0 EXPRESSION LANGUAGE

2003/12/22 "The JavaServer Pages Standard Tag Library (JSTL)"¿¡¼­´Â »õ·Î¿î Expression Language¸¦ Æ÷ÇÔÇØ¼­ JSP 2.0ÀÇ ¸î °¡Áö »õ·Î¿î ±â´ÉÀÇ »ç¿ë¹ýÀ» ¼³¸íÇß´Ù. À̹ø ±ÛÀº expression language¸¦ Á» ´õ ÀÚ¼¼ÇÏ°Ô ´Ù·é´Ù. ÇÏ´ÜÀÇ »ùÇà ÄÚµå´Â ´ÜÀÏ JSPÆäÀÌÁö¸¦ Æ÷ÇÔÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î, ¿©·¯ °¡Áö ŸÀÔÀÇ expression°ú »óȲ¿¡ ´ëÇØ ½Ç·Ê¸¦ µé¾î°¡¸ç ¼³¸íÇϰí ÀÖ´Ù.

¿Ö ¶Ç ´Ù¸¥ ·©±ÍÁöÀΰ¡?

JSP 2.0ÀÌÀü¿¡´Â JSP ÆäÀÌÁö¿¡ ¼­¹ö »óŸ¦ Ãâ·ÂÇÏ·Á¸é JSP expressionÀÎ scriptlet³ª Ä¿½ºÅÒ Å±׸¸À» ÀÌ¿ëÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌ·¯ÇÑ ¼Ö·ç¼ÇÀº À¯¿ëÇϱä ÇÏÁö¸¸, ¼­¹öÃø »óŸ¦ ¾×¼¼½ºÇÏ´Â °Í°ú °°Àº °£´ÜÇÑ ÀÛ¾÷À» À§ÇØ »ó´ëÀûÀ¸·Î ³Ê¹« ¸¹Àº ¾çÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇß´Ù. JSP 2.0 Àº 1.0¿¡¼­ óÀ½ ¼Ò°³µÈ Expression Language (EL)À» Ãß°¡Çß´Ù. ELÀº ¼­¹öÃø »óŸ¦ ÇÁ¸®Á¨Å×ÀÌ¼Ç Ãâ·Â¿¡ ÅëÇÕÇÏ´Â °ÍÀ» ½±°Ô ÇØÁØ´Ù. JSP expressionsÀÎ scriptlets¿Í Ä¿½ºÅÒ Å±׿¡ °üÇØ ¸ÕÀú °£´ÜÈ÷ »ìÆìº¸´Â °ÍÀ¸·Î ½ÃÀÛÇØº¸ÀÚ.

ServerStats Ŭ·¡½º °´Ã¼¿¡¼­ »ç¿ë Åë°è(usage statistics)¿¡ °üÇÑ Á¤º¸¸¦ °ü¸®ÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ý°¢Çغ¸ÀÚ. ServerStats Ŭ·¡½º´Â ÇöÀç ·Î±×ÀÎÇϰí ÀÖ´Â »ç¿ëÀÚÀÇ ¼ö¸¦ ¸®ÅÏÇÏ´Â getUserCount ¸Þ¼Òµå¸¦ °®´Â´Ù. ±× ¾ÖÇø®ÄÉÀ̼ÇÀº stats¶ó´Â À̸§À¸·Î ServletContext ¾ÖÆ®¸®ºäÆ® ³»¿¡ ServerStatsÀÇ ´ÜÀÏ ÀνºÅϽº¸¦ ¿î¿µÇϰí ÀÖ´Ù. »ç¿ë Åë°è¸¦ Ãâ·ÂÇϱâ À§ÇØ JSP expressionÀÎ scriptlet¸¦ »ç¿ëÇßÀ» ¶§¿Í Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇßÀ» °æ¿ì¸¦ ºñ±³Çغ¸ÀÚ.

  • Scriptlet¸¦ ÀÌ¿ëÇØ¼­ Ãâ·Â »ý¼ºÇϱâ: JSP version 1¿¡¼­´Â scriptlet¸¦ »ç¿ëÇØ¼­ ½Ã½ºÅÛ¿¡ ·Î±×ÀÎÇÑ »ç¿ëÀÚÀÇ ¼ö¸¦ Ãâ·ÂÇØ³¾ ¼ö°¡ ÀÖ¾ú´Ù. scriptlet°¡ »ý¼ºÇÏ´Â Ãâ·Â°ªÀº out ½ºÆ®¸²(out stream)¿¡ ¸í½ÃÀûÀ¸·Î ÀÛ¼ºµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¸é JSP ÆäÀÌÁö´Â ´ÙÀ½°ú °°Àº scriptlet¿Í ÅÛÇø´ ÅØ½ºÆ®¸¦ ÀÌ¿ëÇØ¼­ »ç¿ëÀÚÀÇ ¼ö¸¦ ¸®Æ÷Æ®ÇÒ ¼ö ÀÖ´Ù.
        There are currently <%
           ServerStats ss =
             (ServerStats)application.getAttribute("stats");
           out.print(ss.getUserCount());
        %> userslogged on.
    
    °á°ú´Â ´ÙÀ½°ú °°´Ù.

    There are currently 15 users logged on.

  • JSP expressionÀ¸·Î Ãâ·Â°ª »ý¼ºÇϱâ: Äڵ带 JSP expression¿¡ µÎ¸é ÀÏÀÌ ´õ ´Ü¼øÇØÁø´Ù. JSP expression³»ÀÇ expression ÅØ½ºÆ®°¡ °è»êµÇ¸é ±× °á°ú´Â °­Á¦ÀûÀ¸·Î ½ºÆ®¸µÀ¸·Î Ãâ·ÂµÈ´Ù. ÀÌ expressionÀÇ °á°ú´Â Ãâ·ÂµÈ JSPÆäÀÌÁö¿¡ expression ű׸¦ µÇµ¹·Á ³õ´Â´Ù. JSP ÆäÀÌÁöÀÇ ¾Æ¿ôDz¿¡ °á°ú°ª ÅØ½ºÆ®´Â ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù.
      
        There are currently
        <%= (ServerStats)(application.getAttribute("stats")).
              getUserCount() %> users logged on.
    
    Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀº ½¬¾îÁ³Áö¸¸, ¿©ÀüÈ÷ À̸¦ Àаí À¯ÁöÇÏ´Â °ÍÀº ¾î·Æ´Ù.

  • ¡¤ Ä¿½ºÅÒ Å±׸¦ ÀÌ¿ëÇØ¼­ Ãâ·Â°ª »ý¼ºÇϱâ: JSP 1¿¡¼­´Â Àб⠽±°í Àç»ç¿ëÇϱ⠽¬¿î ´ÙÀ̳ª¹Í ÄÁÅÙÆ®¸¦ ¸¸µé±â À§ÇØ Ä¿½ºÅÒ Å±׸¦ »ý¼ºÇß´Ù. Ä¿½ºÅÒ Å±״ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ Á¤ÀÇµÈ JSP ÆäÀÌÁö ű׵éÀÌ´Ù. ű×ÀÇ ¼Ó¼ºÀº ÅÂ±× Çڵ鷯 Ŭ·¡½º¿¡¼­ ±¸ÇöµÇ´Âµ¥ ÀÌ ¶§ ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â ¹Ýµå½Ã ÀÛ¼º(´ëºÎºÐ ÀÚ¹Ù·Î)µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ(TLD) ÆÄÀÏÀº Ä¿½ºÅÒ ÅÂ±×¿Í ±×°ÍÀÇ Çڵ鷯 Ŭ·¡½º°£ÀÇ ¿¬°ü¼ºÀ» Á¤ÀÇÇÑ´Ù. À¥ ÄÁÅ×À̳ʴ Äڵ带 ´ÙÀ̳ª¹ÍÇÏ°Ô »ý¼ºÇϱâ À§Çؼ­ TLD ÆÄÀϰú Ä¿½ºÅÒ Å±׸¦ »ç¿ëÇϴµ¥ ¿©±â¼­ Ä¿½ºÅÒ Å±״ ´õ °£°áÇÑ JSP ÆäÀÌÁö¸¦ »ý¼ºÇϰí Äڵ带 Àç»ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. °Ë»ö±â´ÉÀ» ±¸ÇöÇÏ´Â ½ÇÁ¦ ÄÚµå´Â Çڵ鷯 Ŭ·¡½º¿¡ ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. ¿¹Á¦·Î º¸´Â JSP ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
      
       There are currently <myTags:userCount/> users logged in.
    
    ¹°·Ð ÀÌ¿Í °°ÀÌ °£°áÇÑ ÇÁ¸®Á¨Å×À̼ÇÀ» ¾ò°íÀÚ ÇÑ´Ù¸é, °³¹ßÀÚ´Â Àڹ٠Ŭ·¡½º¿Í XML Æ÷¸ËÀ¸·Î µÈ TLD ÆÄÀÏÀ» ¸ðµÎ ÀÛ¼ºÇؾ߸¸ ÇÑ´Ù.

JSP 2.0Àº ¼­¹öÃø »óŸ¦ ¾×¼¼½ºÇϱ⠽±°Ô ¸¸µé¾îÁÖ´Â expression language¸¦ Á¦°øÇÑ´Ù. expression languageÀÇ ±¸¼ºÀº Ä¿½ºÅÒ Å±׺¸´Ù ´Ü¼øÇÏ°í ´ëºÎºÐ ÀÚ¹Ù ÄÚµå¿Í ¿¬°üÀÌ ¾øÀ» »Ó¸¸ ¾Æ´Ï¶ó ŸÀÔij½ºÆÃÀ̳ª null °ª, ¿¡·¯ ó¸® µîÀ» ÀÚµ¿À¸·Î ó¸®ÇÑ´Ù. ¶§¹®¿¡ JSP 2.0 expression language¸¦ ÀÌ¿ëÇÏ¸é ¾Õ¼­ ¼³¸íÇß´ø Á¢±Ù ¹æ¹ýº¸´Ù ½±°Ô ¼­¹öÃø »óŸ¦ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù. JSP 2.0¿¡¼­ »ç¿ëÀÚ¼ö¸¦ ³ªÅ¸³»´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°´Ù.

   There are currently ${stats.userCount} users logged in.

EL Expressions°¡ »ç¿ëµÉ ¼ö ÀÖ´Â °÷

The JSP 2.0 specification´Â expression language¸¦ ´õ ÀÚ¼¼ÇÏ°Ô ¼³¸íÇϰí ÀÖ´Ù. expression language´Â JSTL 1.0 EL¿¡ ¸î °¡Áö »õ·Î¿î ±â´ÉÀ» ÷°¡ÇÏ¿´´Ù.

JSP 2.0 EL expression´Â Ç×»ó ${°ú }»çÀÌ¿¡ ÀÛ¼ºµÈ´Ù. ±×·¯³ª JSP ÆäÀÌÁöÀÇ ÀÀ´ä¿¡¼­´Â expressionÀ» °è»êÇÑ °á°ú°¡ ÅÛÇø´ ÅØ½ºÆ®¿¡ ¾²¿©Áø expression°ú ±×°ÍÀÇ µô¸®¹ÌÅÍ(delimiters)¸¦ ´ëüÇÏ°Ô µÈ´Ù. ÅÂ±× ³»¿¡¼­ expressionsÀº ¾ÖÆ®¸®ºäÆ® °ªÀ¸·Î¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù. °¡·É, ´ÙÀ½ »ùÇà Äڵ带 º¸¸é, űװ¡ ÅÛÇø´ ÅØ½ºÆ®¿Í ¾ÖÆ®¸®ºäÆ®·Î¸¸ »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ ¿Ã¹Ù¸¥ »ç¿ëÀ̶ó ÇÒ ¼ö ÀÖ´Ù.

  <ul>
   <c:forEach var="k" items="${colors}">
     <li><font color="${k}">This line is ${k}</font>.
   </c:forEach>
   </ul>

űװ¡ À߸ø »ç¿ëµÈ ¿¹ÀÌ´Ù.

   <${tag} var="x"/> <%-- INVALID SYNTAX --%>

EL expression³»ÀÇ º¯¼öµéÀº À¥ Ƽ¾î »óÅÂÁ¤º¸À̰í page, request, session, ȤÀº application µîÀÇ ½ºÄÚÇÁ ³»ÀÇ °ªÀÌ µÉ ¼ö ÀÖ´Ù. ƯÁ¤ÇÏ°Ô ÁöÁ¤ÇÏÁö ¾Ê¾ÒÀ» °æ¿ì¿¡´Â ÆäÀÌÁö ½ºÄÚÇÁ ³»ÀÇ º¯¼öµéÀÌ´Ù.

ÀϹÝÀûÀ¸·Î EL º¯¼öÀÇ °ªÀº °´Ã¼µéÀÌ´Ù. º¯¼öÀÇ °ªÀÌ ¿£ÅÍÇÁ¶óÀÌÁî ºóÁî ·¹ÆÛ·±½ºÀÏ °æ¿ì, ¿£ÅÍÇÁ¶óÀÌÁî ºóÀ¸·ÎºÎÅÍ ¹ÞÀº µ¥ÀÌÅÍ´Â º° ¾î·Á¿ò¾øÀÌ ÆäÀÌÁö ³»¿¡ Æ÷Ç﵃ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ¼îÇÎ ¾ÖÇø®ÄÉÀ̼ÇÀº HttpSession ¾ÖÆ®¸®ºäÆ®¾È¿¡ "cart"¶ó´Â À̸§À¸·Î ShoppingCart stateful ¼¼¼Ç ºó¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ °¡Áú ¼ö ÀÖ´Ù. ±×·¯¸é ´ÙÀ½°ú °°Àº °£´ÜÇÑ ÄÚµå·Î īƮ¿¡ ´ã±ä »óǰÀÇ °³¼ö¸¦ ÇÁ¸°Æ®ÇÒ ¼ö ÀÖ´Ù.

   You have ${cart.itemCount} items in your cart.

EL Syntax

EL expressions´Â ¹®ÀÚ(literals), ¿¬»êÀÚ, º¯¼ö·Î ±¸¼ºµÈ´Ù. ExpressionsÀº ÇÔ¼öµµ Æ÷ÇÔÇÒ ¼ö ÀÖÁö¸¸, ¿©±â¿¡¼­´Â ´Ù·çÁö ¾Êµµ·Ï ÇϰڴÙ. ÀÚ¼¼ÇÑ Á¤º¸´Â JSP 2.0 specifications ¿Í the J2EE 1.4 Tutorial¸¦ Âü°íÇÑ´Ù.

¹®ÀÚ·Î ¿Ã ¼ö ÀÖ´Â °¡´ÉÇÑ Å¸ÀÔÀº boolean ("true" ȤÀº "false"), integer, floating point, stringÀÌ´Ù. ÅäÅ« "null"Àº null literal¸¦ ¸»ÇÑ´Ù.

EL expressions´Â ´ÙÀ½°ú °°Àº ¿¬»êÀÚ¸¦ Á¦°øÇÑ´Ù. ¿©±â¼­ °ýÈ£´Â ±×·ìÀ» ´Ü¼øÈ÷ ¹­±â À§ÇØ ¾²¿´´Ù.

  • ´ÜÇ× ³í¸® ¿¬»êÀÚ
    (<, <=, ==, >=, >, lt, le, eq, ge, gt)

  • ÀÌÇ× »ê¼ú ¿¬»êÀÚ
    (+, -, *, /, div, %, mod)

  • »öÀÎ ¿¬»êÀÚ
    (.) °ú ([])

  • (µî°¡) ´ÜÇ× ºÎÁ¤ ¿¬»êÀÚ
    (!, not)

  • »ê¼ú ´ÜÇ× ¸¶À̳ʽº
    (-)

  • expressionÀÌ null·Î °è»êµÇ°Å³ª ÄÁÅ×ÀÌ³Ê °´Ã¼¿¡ ¾ÆÀÌÅÛÀÌ Çϳªµµ ¾ø´Â °ÍÀ¸·Î Æò°¡µÉ ¶§ true·Î °è»êÇÏ´Â (empty) ¿¬»êÀÚ

  • if-then-elseÀÇ ´Ü¼øÇüÀÎ »ïÇ× ¿¬»êÀÚ
    (?:)

  • °è»ê ¼ø¼­¸¦ Á¤Çϱâ À§ÇÑ °ýÈ£

°¡Àå ¿ì¼±ÀûÀ¸·Î °è»êµÇ´Â ¿¬»êÀÚ´Â "[]" °ú "." ±×¸®°í ()¼øÀ̰í ÀÌ¿ÜÀÇ ³ª¸ÓÁö ¿¬»êÀÚµéÀÇ °è»ê ¼ø¼­´Â ¼öÇп¡¼­¿Í °°´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº JSP 2.0 specifications¸¦ Âü°íÇϱ⠹ٶõ´Ù.

Literal Expressions

¹®ÀÚ¿Í ¿¬»êÀÚ¸¸À» Æ÷ÇÔÇÏ´Â ½ÄÀº »ê¼ú½ÄÀ¸·Î(arithmetic expressions) °è»êµÈ´Ù. »ùÇà ÆäÀÌÁöÀÇ ¿¹Á¦¸¦ »ìÆìº¸ÀÚ.

Expression Value
${1} 1
${1==1} true
${1==2} false
${22/7} 3.1428...
${123*234} 27872

Ç÷§ÆûÀÇ ¸î °¡Áö Áß¿äÇÑ º¯È­´Â ´ÙÀ½°ú °°´Ù.

expressions¿¡¼­ º¯¼öÀÇ À̸§µéÀº ¿¬»êÀÌ Á¦´ë·Î ¼öÇàµÉ ¼ö ÀÖµµ·Ï ÀûÀýÇÑ Å¸ÀÔÀÇ °ªÀ¸·Î °è»êµÈ´Ù. °¡·É, ½Ä ${x + 1}¿¡¼­ x´Â µ¡¼ÀÀÌ ¼öÇàµÇ±â Àü¿¡ ¼ýÀÚ·Î ¹Ù²ï´Ù.

EL º¯¼ö

º¯¼ö´Â À̸§À¸·Î ¾×¼¼½ºµÈ´Ù. ŸÀÔ °­Á¦ º¯È¯(Type coercion)Àº º¯¼öÀÇ ÃÖÃÊ Å¸ÀÔ¿¡¼­ ¿äûµÈ ¿¬»ê°ú ȣȯµÉ ¼ö Àִ ŸÀÔÀ¸·Î ÀÚµ¿ÀûÀ¸·Î º¯È¯µÇ´Â °ÍÀ» ¸»ÇÑ´Ù. º¯¼ö´Â ÆäÀÌÁö¿¡ ÀÇÇØ Á¤Àǵǰųª, JSP ¹¬½Ã °´Ã¼(implicit object)°¡ µÉ ¼ö ÀÖ´Ù. (¹¬½Ã °´Ã¼ÀÇ ¸®½ºÆ®´Â JSP 2.0 specifications °úJ2EE 1.4 Æ©Å丮¾óÀ» Âü°íÇϱ⠹ٶõ´Ù.)

º¯¼ö À̸§Àº "." °ú "[]"¿¬»êÀÚ¸¦ Æ÷ÇÔÇÏ´Â ½ÄÀ¸·Î ±¸¼ºµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¿¬»êÀÚ´Â ¸ðµç Ä÷º¼Ç ŸÀÔ»Ó¸¸ ¾Æ´Ï¶ó, Java language arrays, maps, lists, ±×¸®°í ÀÚ¹ÙºóÁîÀÇ ÇÁ·ÎÆÛƼ Á¢±ÙÀÚ¿¡µµ ÀÛµ¿ÇÑ´Ù. ÀÌ·¯ÇÑ ¿¬»êÀÚµéÀº »ç¿ëÀÚµéÀÌ ÀÚ¹ÙºóÁ ¿£ÅÍÇÁ¶óÀÌÁî ºóÁîÀÇ ³×Æ®¿öÅ©¸¦ À̵¿ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ¸Å¹ø »ç¿ëÀÚ°¡ ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÒ ¶§¸¶´Ù ´Ü¼øÈ÷ ¹øµéÀÇ ¼Ó¼º Áß Çϳª¸¦ ÂüÁ¶Çϰųª À妽º·Î »ç¿ëÇÔÀ¸·Î½á ÇϳªÀÇ ºó¿¡¼­ ´Ù¸¥ ºóÀ¸·Î À̵¿ÇÒ ¼ö ÀÖ´Ù.

"." ¿¬»êÀÚ

"." ¿¬»êÀÚ´Â ÀÌ ¿¬»êÀÚÀÇ ¿À¸¥ÂÊ¿¡ ÀÛ¼ºµÈ ¼Ó¼º¿¡ Á¢±ÙÇϱâ À§ÇÑ JavaBeans property accessorÀ» ª°Ô ºÎ¸£´Â ¹æ¹ýÀÌ´Ù. »ùÇà ÆäÀÌÁöÀÇ ´ÙÀ½ ½ÄÀ» º¸¸é,

   ${pageContext.servletContext.servletContextName}

ÀÌ´Â ½ÇÁ¦·Î ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ½ÇÇàµÈ´Ù.

   pageContext.getServletContext().getServletContextName()

ELÀº expressionÀÇ null °ª¿¡ °üÇØ¼­´Â ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾îº¸´Ù ´õ °ü´ëÇÏ´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­´Â a.getB()°¡ nullÀ» ¸®ÅÏÇϸé, a.getB().getC() ´Â NullPointerException¸¦ ¹ß»ý½ÃŲ´Ù. ÇÏÁö¸¸ EL¿¡¼­´Â ¸¸¾à ${a.b}°¡ nullÀ̸é EL expression ${a.b.c}´Â nullÀ» ¸®ÅÏÇÏ°í ¿¹¿Ü¸¦ ¹ß»ý½ÃŰÁö ¾Ê´Â´Ù. ÀÌ´Â ½ÄÀ» ½±°Ô ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. Null¿¡ ´ëÇØ Á» ´õ ¸íÄèÇÏ°Ô ÀÌÇØÇϰíÀÚ ÇÑ´Ù¸é, empty¿¬»êÀÚ¸¦ »ç¿ëÇϰųª ==¸¦ ÀÌ¿ëÇØ¼­ ½Ä°ú nullÀ» ºñ±³Çغ¸°Å³ª, is Ű¿öµå¸¦ »ç¿ëÇØº¼ ¼ö ÀÖ´Ù.

   <c:if test="${a.b is null}">
   <c:if test="${empty a.b}">
   <c:if test="${a.b == null}">

°¡·É, ¾×¼¼½º µÇ°í ÀÖ´Â °´Ã¼°¡ MapÀ̶ó¸é, "."¿¬»êÀÚ´Â ¿À¸¥ÆíÀÇ À̸§°ª¿¡ ½ºÆ®¸µ ¹®ÀÚ¸¦ ¹Þ°í ±×°ÍÀ» °á°ú¸¦ ºÒ·¯³¾ ¶§ Ű·Î »ç¿ëÇÑ´Ù. »ùÇà Äڵ忡¼­ ´ÙÀ½°ú °°Àº µÎ°³ÀÇ ½ÄÀ» ÅëÇØ À̸¦ ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÀÌ µÎ°³ÀÇ ½ÄÀº µ¿ÀÏÇÏ´Ù. (µÑ ´Ù host HTTP header¸¦ ¸»ÇÑ´Ù.)

   ${header["host"]}
   ${header.host}

"[]" ¿¬»êÀÚ

[]¿¬»êÀÚ´Â Maps°ú Lists¸¦ Æ÷ÇÔÇÑ Ä÷¢¼Ç°ú ¹è¿­ÀÇ »öÀÎÀ» ¸¸µå´Âµ¥ »ç¿ëµÇ´Â ´Ù¿ëµµ(polymorphic) ã¾Æº¸±â ¿¬»êÀÚ(indexing operator)ÀÌ´Ù. °ýÈ£ ¾ÈÀÇ °ªÀº map¿¡ ´ëÇÑ Å°, List ȤÀº ¹è¿­ »öÀÎ(array index)À¸·Î¼­ »ç¿ëµÈ´Ù. ¿¹Á¦¿¡¼­ [] ¿¬»êÀÚ´Â List¿Í MapÀ» ¾×¼¼½ºÇϴµ¥ ÀÌ¿ëµÈ´Ù.

${colors[1]} orange
${colors[5]} violet
${colors[1] > colors[5]} false
${colors[1024]}  
${colors[1024] == null} true

${colors[1024]}´Â °ªÀ» °®Áö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé ÀÌ ¹è¿­ÀÇ ±æÀ̰¡ ±×¸¸Å­ ±æÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ÀÌ ½ÄÀº "out of bounds" ¿¡·¯°¡ ¾Æ´Ñ nullÀ» »êÃâÇÑ´Ù.

¶ÇÇÑ [] ¿¬»êÀÚ´Â JavaBeans property accessors¸¦ È£ÃâÇÏ´Â µ¥¿¡µµ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì¿¡ °ýÈ£ ¾ÈÀÇ ½ºÆ®¸µÀº ¼Ó¼ºÀÇ À̸§ÀÌ µÈ´Ù. ¿¹¸¦ µé¾î JavaBean a°¡ ÁÖ¾îÁö¸é, ${a["b"]} °ú ${a.b}´Â ¸ðµÎ ÀÚ¹Ù ¸Þ¼Òµå È£ÃâÀÎ a.getB()·Î °£ÁֵȴÙ.

"." ¿Í []¿¬»êÀÚ´Â ¿ÏÀüÈ÷ µ¿ÀÏÇÏÁö´Â ¾ÊÁö¸¸ MapsÀ» ¾×¼¼½ºÇÑ´Ù´Â µ¥¿¡ À־ °øÅëÁ¡À» °®´Â´Ù. ÇÏÁö¸¸ ÀÌ µÎ ¿¬»êÀÚÀÇ Â÷ÀÌÁ¡Àº ´ÙÀ½°ú °°´Ù.

${header["host"]} localhost:8080
${header.host} localhost:8080
${header["user-agent"]} Mozilla/5.0 (Macintosh;...)
${header.user-agent} 0

${header["host"]} °ú ${header.host} ´Â ¸ðµÎ header¶ó ºÒ¸®´Â Map ¾È¿¡¼­ host ۸¦ °Ë»öÇϴµ¥, ¿©±â¼­ header´Â ¿äûÀ» À§ÇÑ HTTP headers¸¦ Æ÷ÇÔÇÏ´Â JSP implicit objectÀÌ´Ù. ÇÏÁö¸¸, ${header["user-agent"]}°¡ ºê¶ó¿ìÀúÀÇ À̸§À» »ý¼ºÇÏ´Â ¹Ý¸é, ${header.user-agent}´Â 0À» »ý¼ºÇÑ´Ù. À̰ÍÀÌ ÀǹÌÇÏ´Â ¹Ù´Â ¹«¾ùÀϱî?

¿©±â¼­ ¹®Á¦´Â user-agent °¡ ¿Ã¹Ù¸¥ ÀÚ¹Ù ½Äº°ÀÚ°¡ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. expression evaluator´Â ÀÌ ½ÄÀ» º¯¼ö header["user"] ¸¶À̳ʽº(-) Á¸ÀçÇÏÁö ¾Ê´Â º¯¼ö agent ÀÇ Â÷ÀÌ·Î ±¸ºÐÇϱ⠶§¹®¿¡ °ªÀº 0ÀÌ´Ù. ÀÌ °ªµéÀº ¸ðµÎ nullÀ̱⠶§¹®¿¡ °á°ú ¶ÇÇÑ 0ÀÌ µÈ´Ù.(ÀÌ´Â specification¿¡¼­ Á¤ÀÇÇÏ´Â ±ÔÄ¢¿¡ ÀÇÇÑ´Ù.) ¿©±â¼­ ¾Ë¾ÆµÎ¾î¾ß ÇÒ °ÍÀº MapsÀ» À妽Ì(indexing)ÇÒ ¶§¿¡´Â Ç×»ó []À» ÀÌ¿ëÇϰí property accessorsÀ» È£ÃâÇÒ ¶§¿¡´Â "."À» ÀÌ¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù.

¸¶Áö¸·À¸·Î "[]" °ú "."ÀÇ ´Ù¸¥ Á¡Àº ½ÄÀÇ °ªÀÌ "[]"À» ÀÌ¿ëÇØ¼­ À̸§À» ÁöÁ¤ÇÏ´Â µ¥ ¾²¿©Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. »ùÇà ÄÚµåÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°´Ù.

   <c:set var="headerName" value="host"/>
   ${header[headerName]}

ÀÌ ºí·ÏÀÇ °á°ú´Â "localhost:8080"À¸·Î host header¸¦ °Ë»öÇϱâ À§ÇÑ ¿¹·Î À§¿¡¼­ ¼³¸íÇÑ 2°³ÀÇ ½Ä¿¡¼­¿Í °°´Ù. ù¹øÂ° ¶óÀÎÀº ÆäÀÌÁö º¯¼ö headerName ¸¦ ½ºÆ®¸µÀÎ host ·Î ¼³Á¤ÇÏ°í µÎ¹øÂ° ¶óÀÎÀº HTTP header host¸¦ °Ë»öÇϱâ À§ÇØ º¯¼öÀÇ °ªÀ» ÀÌ¿ëÇÑ´Ù. ºñ·Ï ÀÌ ÄÚµå´Â ´Ü¼øÈ÷ ÇÑ °³ÀÇ º¯¼ö À̸§À» »ç¿ëÇϰí ÀÖÁö¸¸, "[]"ÀÇ ÄÁÅÙÃ÷´Â HTTP headerÀÇ À̸§À» ³ªÅ¸³»´Â ¾î¶² EL expressionÀÌ´øÁö »ó°üÀÌ ¾ø´Ù.

º¯¼ö ½ºÄÚÇÁ Á¶Á¤Çϱâ

´Ù¸£°Ô Á¤ÀǵÇÁö ¾Ê´Â ÇÑ, ´ëÀÔ¿¬»êÀÚ(assignment operator) "="³ª JSTL <c:set> ű׸¦ ÀÌ¿ëÇØ¼­ ÆäÀÌÁö¿¡ Á¤ÀÇµÈ º¯¼öµéÀº ÆäÀÌÁö ½ºÄÚÇÁ ³»¿¡ Á¸ÀçÇÑ´Ù. (´Ù½Ã ¸»ÇÏÀÚ¸é PageContext ¾ÖÆ®¸®ºäÆ®µéÀÌ´Ù.) º¯¼ö°¡ ½ºÄÚÇÁ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, expression evaluator´Â page, request, session, application scope ³»¿¡¼­ ¾ÖÆ®¸®ºäÆ®¸¦ °Ë»öÇϰí ù¹øÂ°·Î ãÀº °ªÀ» ¸®ÅÏÇÑ´Ù. ±× À̸§¿¡ ´ëÇÑ º¯¼ö°¡ ¾øÀ¸¸é ½ÄÀº null·Î °è»êµÈ´Ù.

¸í½ÃÀû ½ºÄÚÇÁ ³»ÀÇ º¯¼ö´Â 4°³ÀÇ ¹¬½ÃÀû ½ºÄÚÇÁ °´Ã¼µé(pageScope, requestScope, sessionScope, applicationScope)ÁßÀÇ Çϳª¸¦ ÀÌ¿ëÇØ¼­ ¾×¼¼½ºµÈ´Ù. °¡·É, ${sessionScope.myVariable}´Â ¼¼¼Ç ¾ÖÆ®¸®ºäÆ®ÀÎ myVariableÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù. º¯¼öÀÇ ½ºÄÚÇÁ´Â ´ÙÀ½°ú °°ÀÌ <c:set>ÀÇ ½ºÄÚÇÁ ¾ÖÆ®¸®ºäÆ®¸¦ ÀÌ¿ëÇØ¼­ Á¤ÀÇµÉ ¼ö ÀÖ´Ù.

   <c:set var="myVariable" value="1" scope="session"/>

µðÆúÆ® °ª Á¤ÀÇÇϱâ

´Ù¸¥ ¸¹Àº ½ºÅ©¸³Æ® ¾ð¾î¿Í ¸¶Âù°¡Áö·Î ELÀº null °ª¿¡ °ü´ëÇÏ´Ù. °¡´ÉÇϸé ELÀº empty stringÀ̳ª zero´ë½Å ´Ü¼øÈ÷ nullÀ» ¾´´Ù. ÇÏÁö¸¸ »ç¿ëÀÚ°¡ °ªÀÌ nullÀÏ ¶§ Ưº°ÇÑ µ¿ÀÛÀ» ¿øÇÏ´Â °æ¿ì¿¡´Â ÀÌ·¯ÇÑ µ¿ÀÛÀÌ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.

JSTLÀ» ÀÌ¿ëÇϸé, ±¸ÇϰíÀÚ ÇÏ´Â °ªÀÌ nullÀÏ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Â µðÆúÆ® ¾ÖÆ®¸®ºäÆ®¸¦ °®´Â <c:out>ű׸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. »ùÇà ÆäÀÌÁöÀÇ ¿¹Á¦¸¦ ÅëÇØ »ç¿ë¹ýÀ» »ìÆìº¼ ¼ö ÀÖ´Ù.

   <c:out value="${colors[1024]}" default="transparent"/>

°á°ú´Â ½ºÆ®¸µ transparentÀÌ´Ù. ¼ø¼ö EL¸¦ ÀÌ¿ëÇÑ´Ù¸é 3Áø¼ö ?:¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

   ${colors[1024] == null ? "transparent" : colors[1024]}

°°Àº ÀÌÀ¯·Î ÀÌ ½ÄÀº transparent À» ¸®ÅÏÇÑ´Ù.

MapsÀÇ ¹Ýº¹ ¿¬»ê

MapÀÇ °ªµé¿¡ ¹Ýº¹¿¬»êÇϱâ À§Çؼ­ JSTL ÅÂ±× <c:forEach>¸¦ ÀÌ¿ëÇÒ ¶§, ¹Ýº¹ º¯¼ö(iteration)´Â java.util.Map.Entry ŸÀÔÀÌ´Ù. map entryÀÇ Å°¿Í °ªÀ» ¾×¼¼½ºÇϱâ À§Çؼ­´Â ¹Ýº¹º¯¼öÀ̸§¿¡ .key ¿Í .entry À» »ç¿ëÇÏ¸é µÈ´Ù.

»ùÇà ÆäÀÌÁö¿¡¼­ ÀÌ¿Í °ü·ÃÇÑ ¿¹Á¦¸¦ º¸ÀÚ.

   <c:forEach var="hdr" items="${header}">
     ${hdr.key}=${hdr.value}<br>
   </c:forEach>
.
.

»ùÇà ÄÚµå ½ÇÇàÇϱâ

»ùÇà Äڵ带 À§ÇÑ »ùÇà ¾ÆÄ«À̺긦 ´Ù¿î·Îµå ¹ÞÀÚ. ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÄÁÅØ½ºÆ® ·çÆ®´Â ttjan2004ÀÌ´Ù. ´Ù¿î·ÎµåµÈ ear ÆÄÀÏÀº ¿Ï¼ºµÈ ¼Ò½º Äڵ嵵 Æ÷ÇÔÇϰí ÀÖ´Ù.

deploytoolÇÁ·Î±×·¥À̳ª ¾îµå¹Î ÄܼÖÀ» ÀÌ¿ëÇØ¼­ J2EE 1.4 Application Server¿¡ ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÄ«À̺ê(ttjan2004.ear)¸¦ ¹èÆ÷ÇÒ ¼ö ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó ´ÙÀ½°ú °°ÀÌ asadmin Ä¿¸Çµå¸¦ ÀÔ·ÂÇØ¼­ À̸¦ ¹èÆ÷ÇÒ ¼öµµ ÀÖ´Ù.

asadmin deploy install_dir/ttjan2004.ear

install_dir¸¦ earÆÄÀÏÀ» ÀνºÅçÇÑ µð·ºÅ丮·Î ¹Ù²ÙÀÚ.

http://localhost:8000/ttjan2004¿¡¼­ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.

J2EE 1.4 Application Serverº¸´Ù J2EE 1.4¿¡ ¸Â´Â ±¸ÇöÀ» ÇϰíÀÚ ÇÑ´Ù¸é Ç÷§Æû¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷Çϱâ À§ÇØ J2EE ÇÁ·Î´öÆ®ÀÇ ¹èÆ÷ ÅøÀ» »ç¿ëÇÏÀÚ.

¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϸé, ´ÙÀ½°ú °°Àº ÆäÀÌÁö¸¦ º¼ ¼ö ÀÖ´Ù.(ÀÌÇÏ´Â ÆäÀÌÁöÀÇ ÀϺÎÀÌ´Ù.)

samplepage

.
.
.

Reader Feedback

  ¸Å¿ì ÁÁ´Ù    ÁÁ´Ù    ±×Àú ±×·¸´Ù 

 

ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀÌ ±Ã±ÝÇϼ¼¿ä? Java Online SupportÀ» Âü°íÇϼ¼¿ä.

.
.

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù. °ü·Ã¹®ÀÇ : SunKorea@sun.com
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϽ÷Á¸é ¼ö½Å°ÅºÎ¸¦ Ŭ¸¯ÇØ ÁÖ¼¼¿ä.

Copyright 2004 Sun Korea, Inc. All rights reserved.

Sun Microsystems, Inc.
.
.