|
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 ÇÁ·Î´öÆ®ÀÇ ¹èÆ÷ ÅøÀ» »ç¿ëÇÏÀÚ.
¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϸé, ´ÙÀ½°ú °°Àº ÆäÀÌÁö¸¦ º¼ ¼ö ÀÖ´Ù.(ÀÌÇÏ´Â ÆäÀÌÁöÀÇ ÀϺÎÀÌ´Ù.)
º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù. °ü·Ã¹®ÀÇ : SunKorea@sun.com
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϽ÷Á¸é ¼ö½Å°ÅºÎ¸¦
Ŭ¸¯ÇØ ÁÖ¼¼¿ä.
Copyright 2004 Sun Korea, Inc. All rights reserved.
|