Articles Index

Code Conventions for the JavaServer PagesTM Version 1.x Language
By Kam Hay Fung, Java Consultant
Mark Roth, JavaServer Pages 2.0 Specification Co-Lead
February 2003
¹ø¿ª:Ç㱤³² kenu, OKJSP JSP/servlet Á¤º¸°øÀ¯ »çÀÌÆ® ¿î¿µÀÚ

March 2003

JavaServer PagesTM (JSPTM)°¡ Á¡Á¡ ³Î¸® À¥±â¹Ý ¾îÇø®ÄÉÀ̼ÇÀ¸·Î ÀÚ¸®Àâ¾Æ°¡¸é¼­, °³¹ß°ú À¯Áöº¸¼ö¿¡ Á¾»çÇÏ´Â ¸¹Àº JSP ÇÁ·Î±×·¡¸Óµé°ú À¥ °³¹ßÀÚµéÀº, ¿¹Àü¿¡ ÀÚ¹ÙÇÁ·Î±×·¡¸ÓµéÀÌ °Þ¾ú´ø °Í°ú °°Àº µô·¹¸¶¿¡ Á÷¸éÇß´Ù. "¾î¶»°Ô JSP Äڵ带 Â¥¸é Àбâ, ¾²±â, À¯Áöº¸¼öÇϱ⸦ ÀϰüÀûÀ¸·Î ½±°Ô ÇÒ ¼ö ÀÖÀ»±î?"

ÀÌ ±ÛÀº, À¥ ÄÄÆ÷³ÍÆ®¸¦ »ç¿ëÇÏ´Â ÀüÇüÀûÀÎ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡¼­ ÁؼöÇØ¾ß ÇÒ JSP(1.1 °ú 1.2¹öÀü) Ç¥ÁØ ÀÛ¼º¿ä·ÉÀ» Á¦¾ÈÇÑ´Ù. ÀÌ ¹®¼­ÀÇ ¸ðü´Â ÀÚ¹Ù ¾ð¾î ÄÚµå ÀÛ¼º¿ä·ÉÀÌ´Ù. (JSP ¿Í °ü·ÃµÈ) ÄÚµå ÀÛ¼º ¹æ¹ý ½ºÆå¿¡ ¼Ò°³µÈ ´Ù¾çÇϰí Áß¿äÇÑ ¿ä¼ÒµéÀ» È®ÀÎÇÒ ¼ö ÀÖ´Â ÅÛÇø´À¸·Î »ï¾Ò´Ù. ƯÈ÷, ÆÄÀϸí, ±¸¼º, µé¿©¾²±â, ÁÖ¼®, Áö½ÃÀÚ, ¼±¾ð¹®, ½ºÅ©¸³Æ²¸´, Ç¥Çö½Ä, °ø¹é, ¸í¸í¹ý(À̸§ Áþ´Â ¹ý), ÇÁ·Î±×·¡¹Ö ½À°ü µîÀ» ¼Ò°³ÇÑ´Ù. óÀ½À¸·Î ½ÃµµµÇ´Â JSP ÄÚµå ÀÛ¼º¿ä·ÉÀ̱⠶§¹®¿¡, ÀÌ ±Ç°í ¹®¼­¿¡ ´ëÇÑ ¿©·¯ºÐµéÀÇ °ü½É°ú Çǵå¹éÀ» ±â´Ù¸°´Ù. ¿¬¶ôó´Â jsp-codeconv-comments@sun.comÀÌ´Ù.

JSP 2.0 ½ºÆå¿¡¼­´Â 1.2 ¹öÀüÀ» ¸ðµÎ Æ÷¿ëÇÏÁö¸¸, ½ºÅ©¸³Æ®°¡ ¾ø´Â ÇÁ·Î±×·¡¹Ö ½ºÅ¸ÀÏ(¼±¾ð¹®, ½ºÅ©¸³Æ²¸´, Ç¥Çö½ÄÀÌ ¾ø´Â)À» ÁöÇâÇϰí, ¼ö¸¹Àº »õ Ư¡µéÀ» °®°í À־, ÀÌ ÀÛ¼º¿ä·ÉÀ» ´õ Áøº¸½ÃÄÑ¾ß µÉ Çʿ䰡 ÀÖ´Ù. °¡´ÉÇÑ ÇÑ, ÀÌ ¹®¼­´Â »õ·Î¿î JSP 2.0 Ư¡¿¡ µµ¿òÀ» ÁÖ´Â ÀÛ¼º¹æ½ÄÀ» ¼±ÅÃÇß´Ù.

¸¶Áö¸·À¸·Î, ÀÌ ±ÛÀ» Àд ¼öÁØÀº JSP, Java, ÀÚ¹Ù ÄÚµå ÀÛ¼º¿ä·É¿¡ Àͼ÷ÇØ¾ß Çϰí, ÀÌ¹Ì ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇÏ´Â ÆÀ¿¡ Àû¿ëÀÌ µÇ¾î ÀÖ¾î¾ß µÈ´Ù. ±×·¸Áö ¾Ê´Ù¸é, ÀÌ ¸µÅ©¸¦ ÀÐ¾î º¸±â¸¦ ÃßõÇÑ´Ù. Java ¸µÅ© JSP ¸µÅ©.

¡¡

¿Ö ÄÚµå ÀÛ¼º¿ä·ÉÀÌ ÇÊ¿äÇѰ¡? Why Have Code Conventions?

ÄÚµå ÀÛ¼º¿ä·ÉÀº ÇÁ·Î±×·¡¸Ó¿Í À¥ ÄÁÅÙÃ÷ °³¹ßÀÚ¿¡°Ô ¿©·¯ °¡Áö ÀÌÀ¯·Î Áß¿äÇÏ´Ù:

  1. ¼ÒÇÁÆ®¿þ¾î »êÃâ¹°ÀÇ °¡µ¶¼ºÀ» Çâ»ó½ÃŲ´Ù.
  2. °ß½À °ü¸®¿Í ³ë·ÂÀ» °æ°¨ÇÑ´Ù.
  3. Ç¥ÁØÈ­¿¡ ´ëÇÑ Á¶Á÷Àû Âü¿©µµ¸¦ ¹è°¡½ÃŲ´Ù.

ÆÄÀÏ À̸§°ú À§Ä¡ File Names and Locations

ÆÄÀÏ À̸§Áþ±â´Â Åø º¥´õ¿Í À¥ ÄÁÅ×À̳ʷΠÇÏ¿©±Ý ÆÄÀÏ Å¸ÀÔÀ» ÀνÄÇϰí, °¢°¢¿¡ ¸Â°Ô ÇØ¼®ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ´ÙÀ½ Å×À̺íÀº ÃßõÇÏ´Â ¹æ½ÄÀÇ ÆÄÀÏ È®ÀåÀÚ¿Í À§Ä¡ ¸ñ·ÏÀÌ´Ù. 

File Type File È®ÀåÀÚ Ãßõ À§Ä¡
JSP .jsp <context root>/<subsystem path>/
JSP fragment .jsp <context root>/<subsystem path>/
.jspf <context root>/WEB-INF/jspf/<subsystem path>/
cascading style sheet .css <context root>/css/
javascript .js <context root>/js/
HTML page .html <context root>/<subsystem path>/
web resource .gif, .jpg, etc. <context root>/images/
tag library descriptor .tld <context root>/WEB-INF/tld/

À§ Å×À̺íÀ» º¼ ¶§ ¸î °¡Áö À¯³äÇÒ °ÍÀÌ ÀÖ´Ù. ¿ì¼±, <context root> ´Â À¥ ¾îÇø®ÄÉÀ̼Ç(.war ÆÄÀÏ ³»ÀÇ ·çÆ® µð·ºÅ丮) ÄÁÅØ½ºÆ®ÀÇ ·çÆ®ÀÌ´Ù. µÑ°·Î, <subsystem path> ´Â µ¿Àû, Á¤Àû À¥ÆäÀÌÁö ÄÁÅÙÃ÷ÀÇ ³í¸®ÀûÀÎ ±×·ìÀ¸·Î ³ª´©µµ·Ï ÇÑ´Ù. ÀÛÀº À¥ ¾îÇø®ÄÉÀ̼ÇÀÏ °æ¿ì, ÀÌ°Ô ÇÊ¿äÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. (ÇÑ °÷¿¡ ¸ðµÎ ³õ¾Æµµ µÈ´Ù.)

¼¼Â°·Î, ´Ù¸¥ JSP ÆÄÀÏ¿¡ Æ÷ÇԵǴ JSP ¸¦ ¾ð±ÞÇÒ ¶§ JSP fragment (JSP ÇÁ·¡±×¸ÕÆ® Á¶°¢)¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÑ´Ù. ÁÖÀÇÇÒ °ÍÀº JSP 2.0 ¿¡¼­´Â "JSP fragment" ¿ë¾î°¡ °ãÄ¡±â ¶§¹®¿¡ "JSP ¼¼±×¸ÕÆ®(JSP segment)" ¿ë¾î°¡ ´ë½Å »ç¿ëµÈ´Ù. JSP fragment ´Â È®ÀåÀÚ·Î .jsp ¶Ç´Â .jspf ¸¦ »ç¿ëÇϰí, /WEB-INF/jspf³ª ´Ù¸¥ Á¤ÀûÀÎ ÄÁÅÙÃ÷¿Í ÇÔ²² °¢°¢ À§Ä¡ÇÏ¸é µÈ´Ù. ºÒ¿ÏÀüÇÑ JSP fragment´Â ¾ðÁ¦³ª .jspf È®ÀåÀÚ¸¦ »ç¿ëÇϰí, /WEB-INF/jspf¿¡ À§Ä¡ÇØ¾ß µÈ´Ù. ³×°·Î, JSP ½ºÆå¿¡¼­´Â JSP fragment È®ÀåÀÚ·Î .jspf¿Í .jsp ¾çÂÊ ¸ðµÎ¸¦ ±ÇÀåÇÏÁö¸¸, ÃßõÇÏ´Â °ÍÀº .jspf Àε¥, .jsf ´Â JavaServer Faces™ ½ºÆå¿¡¼­ »ç¿ëµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù.

³¡À¸·Î, ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ ÆÄÀÏÀ̳ª ´Ù¸¥ ºñ°ø°³ÀûÀÎ ÄÁÅÙÃ÷´Â WEB-INF/ ¶Ç´Â ÀÌ ÇÏÀ§ µð·ºÅ丮¿¡ ³õ¾ÆµÎ´Â °ÍÀº º¸ÆíÀûÀ¸·Î ÁÁÀº ½À°üÀÌ´Ù. À¥ ÄÁÅ×À̳ʴ WEB-INF/ ¾Æ·¡ ÀÖ´Â ¾î¶² ÆÄÀϵµ ¼ÛÃâÇÏÁö ¾Ê±â ¶§¹®¿¡, ÀÌ ¹æ¹ýÀ» »ç¿ëÇϸé, Ŭ¶óÀÌ¾ðÆ®°¡ Á¢±ÙÇϰųª º¼ ¼ö ¾ø°Ô µÈ´Ù.

¹èÄ¡ ¼³¸íÀÚ(web.xml)ÀÇ welcome-file ¿¤¸®¸ÕÆ®¿¡ ¼±¾ðµÇ¾î ÀÖ´Â À£ÄÄ ÆÄÀÏÀÇ À̸§Àº µ¿ÀûÀÎ ÄÁÅÙÃ÷¸¦ »ý¼ºÇÏ·Á¸é, index.jsp °¡ µÇ¾î¾ß µÇ°í, Á¤ÀûÀÎ À£ÄÄ ÆäÀÌÁö¶ó¸é index.html ·Î ÇØ¾ß ÇÑ´Ù. 

JSP ÆÄÀÏÀ» ´Ù±¹¾î·Î ÀÛ¼ºÇÒ ¶§, ·ÎÄÉÀÏ¿¡ µû¶ó µð·ºÅ丮¸¦ ³ª´©¾î ±×·ì Áþ±â¸¦ ÃßõÇÑ´Ù. ¿¹¸¦ µé¾î¼­ index.jsp ÀÇ US English ¹öÀüÀº /en_US/index.jsp ¿¡, °°Àº ÆÄÀÏÀÇ ÀϺ»¾îÆÇÀº /ja_JP/index.jsp  ¿¡ ÀÖ°Ô ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÀÚ¹Ù ÄÚµåÀÇ ±¹Á¦È­¿¡ °üÇÑ Ãß°¡ÀûÀÎ Á¤º¸´Â Java Tutorial ¿¡ ÀÖ°í, À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ ±¹Á¦È­¿¡ ´ëÇÑ Á¤º¸´Â Designing Enterprise Applications with the J2EETM Platform Ã¥¿¡ ³ª¿ÍÀÖ´Ù.

ÆÄÀÏ ±¸Á¶ File Organization

±¸Á¶°¡ Àß °®ÃçÁø ¼Ò½º ÄÚµå ÆÄÀÏÀº Àб⠽±°í, ÆÄÀÏ »çÀÌ¿¡ Á¤º¸¸¦ ´õ »¡¸® ³õ¾ÆµÑ ¼ö ÀÖ´Ù. ÀÌ ¼½¼Ç¿¡¼­, JSP¿Í ÅÂ±× ¶óÀ̺귯¸® µð½ºÅ©¸³ÅÍ ÆÄÀÏ ¸ðµÎ¸¦ À§ÇÑ ±¸Á¶¸¦ ¼Ò°³ÇÏ·ÁÇÑ´Ù.

JSP ÆÄÀÏ / JSP Fragment ÆÄÀÏ

JSP ÆÄÀÏÀº ´ÙÀ½ÀÇ ¼½¼ÇµéÀÌ ³ª¿­ÇÑ ¼ø¼­´ë·Î ±¸¼ºµÈ´Ù:

  1. µµÀÔ ÁÖ¼®
  2. JSP ÆäÀÌÁö Áö½ÃÀÚ(directive)
  3. ¼±ÅÃÀû ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚ
  4. ¼±ÅÃÀû JSP ¼±¾ð¹®
  5. HTML °ú JSP ÄÚµå

µµÀÔ ÁÖ¼® Opening Comments

JSP ÆÄÀÏ ¶Ç´Â ÇÁ·¡±×¸ÕÆ® ÆÄÀÏÀº ¼­¹öÃø ÁÖ¼®À¸·Î ½ÃÀÛÇÑ´Ù:

<%--
  - ÀÛ¼ºÀÚ:
  - ÀÏÀÚ:
  - ÀúÀÛ±Ç Ç¥½Ã:
  - @(#)
  - ¼³¸í:
  --%>

ÀÌ ÁÖ¼®Àº ¼­¹öÃø¿¡¼­¸¸ º¼ ¼ö ÀÖ´Ù. JSP º¯È¯ °úÁ¤¿¡¼­ Á¦°ÅµÇ±â ¶§¹®ÀÌ´Ù. ¿©±â¿¡´Â À¥ °³¹ßÀÚ¸¦ À§ÇÑ JSP¿¡ ´ëÇÑ ÀÛ¼ºÀÚ, ÀÏÀÚ, °³Á¤ÆÇÀÇ ÀúÀÛ±Ç, Áõ¸í°ú ¼³¸íÀÌ Æ÷ÇԵȴÙ. "@(#) " ¹®ÀÚ Á¶ÇÕÀº Áõ¸íÀÇ ½ÃÀÛÀ» Áö½ÃÇÏ´Â °ÍÀ¸·Î ¾î¶² ÇÁ·Î±×·¥¿¡¼­ ÀνĵȴÙ. ÀÌ·± Ç¥½ÄÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µéÀº ¸¹ÀÌ »ç¿ëµÇÁö ¾ÊÁö¸¸, À־ ÇØ°¡ µÉ °ÍÀº ¾ø´Ù. Ãß°¡·Î, ÀÌ Á¶ÇÕÀº ¶§¶§·Î "$Id$" ¸¦ µ¡ºÙ¿©¼­, ¾î¶² Á¾·ùÀÇ ¹öÀü °ü¸® ÇÁ·Î±×·¥¿¡¼­´Â ÀÚµ¿À¸·Î Áõ¸í Á¤º¸¸¦ JSP¿¡ ±â·ÏÇϵµ·Ï ÇÑ´Ù. ¼³¸í ºÎºÐÀº JSPÀÇ ¸ñÀû¿¡ °üÇÑ Ãà¾àµÈ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ÇÑ ¹®´Ü ÀÌ»ó ³Ñ¾î°¡Áö ¾Êµµ·Ï ÇÑ´Ù.

¾î¶² »óȲ¿¡¼­´Â, µµÀÔ ÁÖ¼®ÀÌ JSP º¯È¯°úÁ¤À» Áö³ª¼­ Ãâó°¡ È®½ÇÇÏ´Ù´Â ¶æ°ú ¹ýÀûÀÎ ¸ñÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®ÀÇ ºê¶ó¿ìÀú¿¡ º¸¿©Áú Çʿ䰡 ÀÖ´Ù. ÀÌ·² °æ¿ì ÁÖ¼® ºÎºÐÀ» µÎ°³·Î ³ª´²¼­ ¿ì¼± Ŭ¶óÀ̾ðÆ®Ãø ½ºÅ¸ÀÏÀÇ ÁÖ¼®À» ´Ü´Ù:

<!--
  - Author(s):
  - Date:
  - Copyright Notice:
  --%>

±×¸®°í ³ª¼­ ª¾ÆÁø ³ª¸ÓÁö ¼­¹öÃø ½ºÅ¸ÀÏÀÇ ÁÖ¼®À» ´Ü´Ù:

<%--
  - @(#)
  - Description:
  --%>

JSP ÆäÀÌÁö Áö½ÃÀÚ JSP Page Directive(s)

JSP ÆäÀÌÁö Áö½ÃÀÚ´Â JSP º¯È¯ ½ÃÁ¡¿¡ °ü·ÃµÈ ¼Ó¼ºÀ» Á¤ÀÇÇÑ´Ù. JSP ½ºÆåÀº °°Àº ÆäÀÌÁö¿¡ JSP ÆäÀÌÁö Áö½ÃÀÚÀÇ ¼ö·®À» Á¦ÇÑÇÏÁö ¾Ê´Â´Ù. ±×·¡¼­ ´ÙÀ½ µÎ °³ÀÇ ÄÚµå ¿¹Á¦´Â ¶È°°´Ù.(´Ù¸¥ Á¡ÀÌ Àִµ¥, ù ¿¹Á¦´Â Ãâ·Â½Ã¿¡ ¸Ç À§¿¡ µÎ °³ÀÇ ºó ÁÙÀÌ Æ÷ÇԵȴÙ):

ÄÚµå ¿¹Á¦ 1:

<%@ page session="false" %>
<%@ page import="java.util.*" %>
<%@ page errorPage="/common/errorPage.jsp" %>

ÆäÀÌÁö Áö½ÃÀÚ °°ÀÌ Áö½ÃÀÚÀÇ ±æÀ̰¡ ÀϹÝÀûÀÎ JSP Æø(80 ¹®ÀÚ)À» ³Ñ¾î°¥ °æ¿ì ¿©·¯ ÁÙ·Î ³ª´²Áø´Ù:

ÄÚµå ¿¹Á¦ 2:

<%@ page    session="false"
            import="java.util.*"
            errorPage="/common/errorPage.jsp"
%>

ÀϹÝÀûÀ¸·Î, ÄÚµå ¿¹Á¦ 2´Â ÄÚµå ¿¹Á¦ 1º¸´Ù Áñ°Ü »ç¿ëµÈ´Ù. ¿¹¿Ü°¡ Àִµ¥, ¸Å¿ì ±ä import ¼Ó¼ºÀ» ¾²°Ô µÇ´Â, ¿©·¯ °³ÀÇ ÀÚ¹Ù ÆÐŰÁö°¡ JSPÆäÀÌÁö¿¡¼­ ÇÊ¿äÇÒ °æ¿ìÀÌ´Ù:

<%@ page    session="false"
               import="java.util.*,java.text.*,
                   com.mycorp.myapp.taglib.*,
                       com.mycorp.myapp.sql.*, ..."
...
%>

ÀÌ·± °æ¿ì, ÆäÀÌÁö Áö½ÃÀÚ¸¦ ´ÙÀ½°ú °°ÀÌ ³ª´©´Â °ÍÀÌ Áñ°Ü»ç¿ëµÈ´Ù:

<%-- import¸¦ Á¦¿ÜÇÑ ¸ðµç ¼Ó¼º --%>
<%@ page
...
%>
<%-- import ¼Ó¼ºµéÀº ¿©±âºÎÅÍ ½ÃÀÛ --%>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
...

ÁÖÀÇÇÒ Á¡Àº, ÀϹÝÀûÀ¸·Î import¹®Àº ÀÚ¹ÙÀÇ Áö¿ª ÄÚµå ÀÛ¼º¿ä·ÉÀ» ÁؼöÇÑ´Ù. ¿¹¸¦ µé¾î, °°Àº ÆÐŰÁö¿¡¼­ ¼¼ °³ÀÇ Å¬·¡½º±îÁö¸¸ »ç¿ëµÇ¸é, import ´Â ÆÐŰÁö¸¦ ¼±¾ðÇϱ⠺¸´Ù´Â, Ŭ·¡½º¸¦ ÀÏÀÏÀÌ ¼±¾ðÇÑ´Ù. ¼¼ °³¸¦ ³Ñ¾î°¡¸é, Ŭ·¡½º¸¦ ÀÏÀÏÀÌ ÁöÁ¤ÇÒ °ÍÀÎÁö ¾Æ´Ï¸é, ".*" Ç¥½Ã¸¦ »ç¿ëÇÒ °ÍÀÎÁö´Â À¥ °³¹ßÀÚ ¸¶À½ÀÌ´Ù. ÀüÀÚÀÇ °æ¿ì, ¿ÜºÎ Ŭ·¡½º°¡ ¹«¾ùÀÌ »ç¿ëµÇ´ÂÁö¸¦ ½±°Ô ¾Ë¼ö ÀÖ´Ù. ƯÈ÷ ¹ö±×°¡ ¸¹Àº Ŭ·¡½º¸¦ À§Ä¡½ÃŰ·Á°í Çϰųª, JSP °¡ ÀÚ¹Ù ÄÚµå¿Í ¾î¶»°Ô »óÈ£ÀÛ¿ëÇÏ´ÂÁö¸¦ ÀÌÇØÇÏ·ÁÇÒ °æ¿ì¿¡ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î¼­, ¾Æ·¡Ã³·³ ÀÓÆ÷Æ®ÇÑ ÀÚ¹Ù ÆÐŰÁöµé¿¡ °üÇØ ¾ËÁö ¸øÇϸé, À¥ °³¹ßÀÚ´Â Customer Ŭ·¡½º¸¦ ã±â À§Çؼ­ ÀÌ ¸ðµç ÆÐŰÁöµéÀ» °Ë»öÇØºÁ¾ß µÈ´Ù:

<%@ page import="com.mycorp.bank.savings.*" %>
<%@ page import="com.thirdpartycorp.cashmanagement.*" %>
<%@ page import="com.mycorp.bank.foreignexchange.*" %>
...

ÈÄÀÚÀÇ °æ¿ì, ÀÛ¼ºµÈ JSP °¡ ±ò²ûÇÏÁö¸¸, »ç¿ëÇÑ Å¬·¡½º°¡ ¹«¾ùÀÎÁö ¾Æ´Â °ÍÀº ¾î·Á¿öÁø´Ù. ÀϹÝÀûÀ¸·Î, JSP ¿¡ ÀÓÆ÷Æ® Áö½ÃÀÚ°¡ ³Ê¹« ¸¹À¸¸é, ÀÚ¹Ù Äڵ尡 ³Ê¹« ¸¹ÀÌ µé¾î°¡ Àֱ⠽±´Ù. º¸´Ù ³ªÀº ¼±ÅÃÀº JSP ű׸¦ ´õ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.(ÈÄ¿¡ ¾ð±ÞÇϰڴÙ).

¼±ÅÃÀû ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚ Optional Tag Library Directive(s)

ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚ´Â JSP ¿¡¼­ »ç¿ëÇÏ´Â Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸®¸¦ ¼±¾ðÇÑ´Ù. ªÀº Áö½ÃÀÚ´Â ÇϳªÀÇ ÁÙ¿¡ ¼±¾ðÇÒ ¼ö ÀÖ´Ù. ¿©·¯ °³ÀÇ ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚµéÀº JSP ÀÇ ÇÑ °÷¿¡ °°ÀÌ ¸ð¾ÆµÐ´Ù:

<%@ taglib uri="URI1" prefix="tagPrefix1" %>
<%@ taglib uri="URI2" prefix="tagPrefix2" %>
...

ÆäÀÌÁö Áö½ÃÀÚó·³, ÅÂ±× ¶óÀ̺귯¸® Áö½ÃÀÚÀÇ ±æÀ̰¡ ÀϹÝÀûÀÎ JSP Æø(80 ¹®ÀÚ)À» ³Ñ¾î°¥ °æ¿ì ¿©·¯ ÁÙ·Î ³ª´²Áø´Ù:

<%@ taglib
    uri="URI2"
    prefix="tagPrefix2"
%>

¿ÀÁ÷ ÆäÀÌÁö¿¡¼­ »ç¿ëÇÏ´Â ÅÂ±× ¶óÀ̺귯¸®¸¸ ÀÓÆ÷Æ®µÇ¾î¾ß ÇÑ´Ù.

JSP 1.2 ºÎÅÍ, À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ JSP¿¡ JSTL;JSP Ç¥ÁØ ÅÂ±× ¶óÀ̺귯¸®»ç¿ëÇϱ⸦ Àû±Ø ±ÇÀåÇÑ´Ù. ÆäÀÌÁö¿¡¼­ JSP ½ºÅ©¸³Æ²¸´ »ç¿ëÇÒ Çʿ並 ÁÙ¿©Áֱ⠶§¹®ÀÌ´Ù. ÀϹÝÀûÀ¸·Î, JSTLÀ» »ç¿ëÇÏ´Â ÆäÀÌÁö´Â ¼Ò½ºÀбâ¿Í À¯Áöº¸¼ö°¡ º¸´Ù ÆíÇÏ´Ù.

¼±ÅÃÀû JSP ¼±¾ð¹® Optional JSP Declaration(s)

JSP ¼±¾ð¹®Àº JSP¿¡¼­ ¼Ò¼ÓµÈ ¸Þ¼Òµå¿Í º¯¼ö¸¦ ¼±¾ðÇÑ´Ù. ÀÌµé ¸Þ¼Òµå¿Í º¯¼ö´Â ÀÚ¹Ù ÇÁ·Î±×·¥¿¡¼­ÀÇ ¼±¾ð¹®°ú ´Ù¸¦¹Ù ¾ø´Ù. ±×·¡¼­ ÀûÀýÇÑ ÄÚµå ÀÛ¼º¿ä·ÉÀ» µû¸£±â¸¸ ÇÏ¸é µÈ´Ù. ¼±¾ð¹®Àº <%! ... %> JSP ¼±¾ð¹® ºí·Ï Çϳª¿¡ ¸ðµÎ ¸ô¾Æ¼­ ÇÑ °÷¿¡ ÁýÁßÇØ ³õ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¸é:

´Ù¸¥ ¼±¾ð¹® ºí·Ïµé ¹Ù¶÷Á÷ÇÑ ¼±¾ð¹® ºí·Ï
    <%! private int hitCount; %>
    <%! private Date today; %>
    ...
    <%! public int getHitCount() {
            return hitCount;
        }
    %>
    
    <%!
        private int hitCount;
        private Date today;

        public int getHitCount() {
            return hitCount;
        }
    %>

HTML °ú JSP ÄÚµå HTML and JSP Code

ÀÌ ¼½¼ÇÀº JSP ÄÚµå¿Í HTML ÀÌ ¼¯¿©ÀÖ´Â ÆäÀÌÁö¿¡ ´ëÇØ ¼³¸íÇÑ´Ù. JSP Ç¥Çö½Ä, ½ºÅ©¸³Æ²¸´, ÀÚ¹ÙºóÁî Áö½ÃÀÚ µîÀÌ ÇØ´çµÈ´Ù.

ÅÂ±× ¶óÀ̺귯¸® ¼³¸í¼­ Tag Library Descriptor

ÅÂ±× ¶óÀ̺귯¸® ¼³¸í¼­(TLD)´Â Àû´çÇÑ XML¼±¾ð°ú ¿Ã¹Ù¸¥ DTD ¹®À¸·Î ½ÃÀÛÇÑ´Ù. ¿¹¸¦ µé¾î¼­, JSP 1.2 TLD ´Â ´ÙÀ½°ú °°ÀÌ ½ÃÀÛÇØ¾ß µÈ´Ù:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

¹Ù·Î µÚÀÌ¾î ¼­¹öÃø ÁÖ¼®°ú °°Àº ½ºÅ¸ÀÏÀÇ ÁÖ¼®À» ±âÀÔÇÑ´Ù. ÀÛ¼ºÀÚ, ÀÏÀÚ, ÀúÀÛ±Ç, Áõ¸í Á¤º¸, ¶óÀ̺귯¸®¿¡ ´ëÇÑ ÂªÀº ¼³¸íÀÌ´Ù:

<!--
  - ÀÛ¼ºÀÚ:
  - ÀÏÀÚ:
  - ÀúÀÛ±Ç Ç¥½Ã:
  - @(#)
  - ¼³¸í:
  -->
 

¿©±â¿¡ °üÇÑ ±ÔÄ¢°ú °¡À̵å¶óÀÎÀº JSP ÆÄÀÏ/ÇÁ·¡±×¸ÕÆ® ÆÄÀÏ¿¡¼­ Á¤ÀÇµÈ °Í°ú µ¿ÀÏÇÏ´Ù.

ÅÂ±× ¶óÀ̺귯¸® ÆÄÀÏÀÇ ³ª¸ÓÁö´Â ´ÙÀ½¿¡ ³ª¿À´Â ¼ø¼­´ë·Î ÀÌ·ç¾îÁ® ÀÖ´Ù:

TLD ¿¡¼­ ¿¤¸®¸ÕÆ® ¸¶Áö¸·¿¡ ¼±ÅÃÀû ¼­ºê ¿¤¸®¸ÕÆ®¸¦ Ç×»ó µ¡ºÙÀ̱⸦ ÃßõÇÑ´Ù. ÀÌ ¼±ÅÃÀû ¼­ºê ¿¤¸®¸ÕÆ®´Â ÅÂ±× µðÀÚÀ̳ʰ¡ TLDÀÇ ½À¼º°ú Ãß°¡ÀûÀÎ Á¤º¸¸¦ ¹®¼­È­ÇÒ Àå¼Ò¸¦ Á¦°øÇÑ´Ù. À̰ÍÀº À¥ ÄÄÆ÷³ÍÆ® °³¹ßÀڵ鿡°Ô´Â º¸ÀÌÁö ¾Ê°Ô µÈ´Ù.

TLD Element JSP 1.2 Recommended
Sub-element
JSP 1.1 Recommended
Sub-element
attribute (JSP 1.2) description  
init-param (JSP 1.2) description  
tag display-name, description, example name, info
taglib uri, display-name, description uri, info
validator (JSP 1.2) description  
variable (JSP 1.2) description  

µé¿©¾²±â Indentation

µé¿©¾²±â´Â ¹Ýµå½Ã °ø¹é¹®ÀڷΠä¿ö¾ßÇÑ´Ù. ÅÇÀº »ç¿ëÇÏ´Â ¿¡µðÅ͸¶´Ù Ç¥½ÃÇÏ´Â °ø¹éÀÇ ¼ö°¡ ´Ù¸£±â ¶§¹®¿¡ JSP ³»¿¡¼­ µé¿©¾²±â·Î »ç¿ëÇϱ⿡´Â ÀûÇÕÇÏÁö ¾Ê´Ù. Ưº°È÷ ÅëÇÕ°³¹ßȯ°æ(IDE) Åø¿¡¼­ Á¦ÇѵÇÁö ¾Ê¾Ò´Ù¸é, ±âº» µé¿©¾²±â ´ÜÀ§´Â 4°³ÀÇ °ø¹é¹®ÀÚ·Î ÇÑ´Ù. ´ÙÀ½Àº ±× »ç¿ë¿¹ÀÌ´Ù:

<myTagLib:forEach var="client" items="${clients}">
    <myTagLib:mail value="${client}" />
</myTagLib:forEach>

¿¬¼Ó µé¿©¾²±â´Â ÀÌÀü ÁÙÀÇ Àû´çÇÑ ÁöÁ¡¿¡¼­ ½ÃÀÛÇÑ´Ù. ¿¬¼Ó µé¿©¾²±âÀÇ °ø¹éÀº ±âº» µé¿©¾²±â °ø¹éÀÇ ¹è¼öÀÌ´Ù. (4°³ÀÇ °ø¹é¹®ÀÚÀÇ ¹è¼ö):

<%@ page    attribute1="value1"
            attribute2="value2"
            ...
            attributeN="valueN"
%>

½ºÅ©¸³Æ® ¿¤¸®¸ÕÆ®ÀÇ µé¿©¾²±â Indentation of Scripting Elements

JSP ½ºÅ©¸³Æ® ¿¤¸®¸ÕÆ®(¼±¾ð¹®, ½ºÅ©¸³Æ²¸´, Ç¥Çö½Ä°ú °°Àº)°¡ ÇÑ ÁÙ¿¡ ¸ÂÁö ¾Ê´Â °æ¿ì, ½ºÅ©¸³Æ® ¾ð¾îÀÇ µé¿©¾²±â ÀÛ¼º¿ä·ÉÀÌ ¿¤¸®¸ÕÆ® ³»¿¡ Àû¿ëµÈ´Ù. ¸öü´Â ¿¤¸®¸ÕÆ®ÀÇ ¿©´Â ±âÈ£ <%=¿Í °°Àº ÁÙ¿¡¼­ ½ÃÀÛÇÑ´Ù. ´ÙÀ½ÁÙÀÇ ±âÁصµ ¿©´Â ±âÈ£ <%=°¡ µÈ´Ù. ¸öüÀÇ ³¡Àº ´Ù¸¥ ÁÙ¿¡ ÀÖ´Â ¿¤¸®¸ÕÆ®ÀÇ ´Ý´Â ±âÈ£(%>)·Î ¸¶¹«¸®µÈ´Ù. ¿¹Á¦ÀÌ´Ù:

<%= (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)
        = Calendar.SUNDAY) ?
    "Sleep in" :
    "Go to work"
%>

ùÁÙ°ú ¸¶Áö¸· ÁÙÀ» Á¦¿ÜÇÑ ¸öüÀÇ °¡¿îµ¥ ÁÙµéÀº ´ÜÀ§ µé¿©¾²±â °ø¹é(¾Õ ¿¹Á¦¿¡¼­  ·Î º¸ÀδÙ)ÀÌ ¾Õ¿¡ Àֱ⠶§¹®¿¡ ³ª¸ÓÁö JSP º¸´Ù È®¿¬È÷ µå·¯³ª°Ô µÈ´Ù.

JSP, HTML, JAVAÀÇ º¹ÇÕ µé¿©¾²±â Compound Indentation with JSP, HTML and Java

ÀÚ¹ÙÀÇ ½ºÅ©¸³Æ® ÄÚµå¿Í ÅÛÇø´ ÅØ½ºÆ®(HTML)°¡ ¼¯¿©ÀÖ´Â JSP ¿¤¸®¸ÕÆ®¸¦ À§Çؼ­ º¹ÇÕ µé¿©¾²±â°¡ ÇÊ¿äÇÑ ÀÌÀ¯´Â JSP ¼Ò½º¸¦ ÀÌÇØÇϱâ À§ÇØ µå´Â ³ë·ÂÀ» ´ú¾îÁÖ±â À§Çؼ­ÀÌ´Ù. ±âÁ¸ÀÇ µé¿©¾²±â ¿ä·ÉÀº JSP ¼Ò½ºÆÄÀÏÀ» ´õ ¾Ë¾Æº¸±â ¾î·Æ°Ô ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. º¸ÆíÀûÀÎ ±ÔÄ¢¿¡ µû¶ó¼­, ´Ù¸¥ ¼Ò½º »çÀÌ¿¡ ³¢¾î ÀÖÀ» °æ¿ì¸¶´Ù º¸Åë µé¿©¾²±â¿¡ Ưº°ÇÑ ´ÜÀ§¸¦ ÇÒ´çÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡ º¸¿©Áö´Â µé¿©¾²±â¿¡ ¿µÇâÀ» ÁØ´Ù. Ãß°¡ÀûÀÎ µé¿©¾²±â´Â (ºê¶ó¿ìÀú¿¡ ÀÇÇØ) º¸Åë ¹«½ÃµÇ°í, ºê¶ó¿ìÀú¿¡ ³ªÅ¸³ª´Â °á°ú´Â Â÷À̰¡ ¾ø´Ù. ¿¹¸¦ µé¾î, <TABLE> ÅÂ±× ¾Õ¿¡ °ø¹éÀÌ ¸î °³ ´õ Ãß°¡µÈ´Ù°í ÇØ¼­, ºê¶ó¿ìÀú¿¡¼­ º¸¿©Áö´Â Å×À̺íÀÇ À§Ä¡°¡ ´Þ¶óÁö´Â °ÍÀº ¾Æ´Ï´Ù. ±×·¡¼­ ÀÌ·¯ÇÑ ÀÛ¼º¿ä·ÉÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁ¾Æ º¸ÀδÙ:

    <table>
        <%  if { tableHeaderRequired ) { %>
            <tr>
                <th>Last Name</th>
                <th>First Name</th>
            </tr>
        <%  } %>
        <c:forEach var="customer" items="${customers}">
            <tr>
                <td><c:out value="${customer.lastName}"/></td>
                <td><c:out value="${customer.firstName}"/></td>
            </tr>
        </c:forEach>
    </table>

À§ ¹æ½Äº¸´Ù´Â ¾Æ·¡ ¹æ½ÄÀÌ ³´´Ù:

    <table>
        <%  if { tableHeaderRequired ) { %>
        <tr>
            <th>Last Name</th>
            <th>First Name</th>
        </tr>
        <% } %>
        <c:forEach var="customer" items="${customers}">
        <tr>
            <td><c:out value="${customer.lastName}"/></td>
            <td><c:out value="${customer.firstName}"/></td>
        </tr>
        </c:forEach>
    </table>

ÁÖ¼® Comments

ÁÖ¼®Àº Ãß°¡ Á¤º¸ Àü´ÞÀ̳ª Äڵ带 µÑ·¯½Ò ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù. ¿©±â¼­´Â JSP¿¡¼­ »ç¿ëÇÏ´Â µÎ°¡Áö ÇüÅÂÀÇ ÁÖ¼®À» º¼ °ÍÀÌ´Ù: JSP Ãø°ú Ŭ¶óÀÌ¾ðÆ® Ãø ÁÖ¼®ÀÌ´Ù.

JSP ÁÖ¼® JSP Comments

JSP ÁÖ¼®(¶Ç´Â ¼­¹ö Ãø ÁÖ¼®)Àº ¼­¹ö¿¡¼­¸¸ º¼ ¼ö ÀÖ´Ù(Áï, Ŭ¶óÀÌ¾ðÆ®·Î ÀüÆÄµÇÁö ¾Ê´Â´Ù). ¼ø¼ö JSP ÁÖ¼®À» ½ºÅ©¸³ÆÃ ¾ð¾î¿Í ¼¯¿©ÀÖ´Â JSP ÁÖ¼®º¸´Ù Áñ°Ü »ç¿ëÇÑ´Ù. ÀüÀÚ°¡ ±â¹Ý ½ºÅ©¸³Æ® ¾ð¾î¿¡ ´ú Á¾¼ÓÀûÀ̱⠶§¹®À̰í, JSP 2.0 À¸·Î ÁøÈ­Çϱ⠴õ ½±±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ µµÇ¥´Â À̰ÍÀ» ¼³¸íÇÑ´Ù:

Line JSP ½ºÅ©¸³Æ²¸´°ú ½ºÅ©¸³Æ® ¾ð¾î ÁÖ¼® ¼ø¼ö JSP ÁÖ¼®
ÇÑ ÁÙ
    <% /**  ...  */ %>
    <% /*  ...  */ %>
    <% //  ...  %>
    
    <%--  ...  --%>
    
¿©·¯ ÁÙ
    <%
    /*
     *
    ...
     *
     */
    %>
    
    <%--
      -
     ...
      -
      -- %>
    <%
    //
    //
    ...
    //
    %>
    

Ŭ¶óÀÌ¾ðÆ® Ãø ÁÖ¼® Client Side Comments

Ŭ¶óÀÌ¾ðÆ® Ãø ÁÖ¼®(<!-- ... -->)Àº ÀÀ´ä¿¡ ´ëÇØ¼­ ºÎ°¡ÀûÀÎ Á¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®·Î º¸³»±â À§ÇØ ÀÀ´ä¿¡ ÁÖ¼®À» ´Ù´Â °ÍÀÌ´Ù. ¼­¹ö ¾îÇø®ÄÉÀ̼ÇÀÇ ÇൿÀ̳ª ³»ºÎÀûÀÎ ±¸Á¶¿¡ ´ëÇÑ °Í°ú ÀÀ´ä ³»¿ëÀ» »ý¼ºÇÏ´Â Äڵ尡 Æ÷ÇԵǾ´Â ¾ÈµÈ´Ù.

Ŭ¶óÀ̾ðÆ®/»ç¿ëÀÚÀÇ ÀÔÀå¿¡¼­ ¼­¹ö¿¡¼­ º¸³»¿Â ÀÀ´äÀ» ÇØ¼®Çϱâ À§Çؼ­ ÀÌ·± Á¾·ùÀÇ ÁÖ¼®À» Á÷Á¢ º¼ Çʿ䰡 ¾ø±â ¶§¹®¿¡, Ŭ¶óÀÌ¾ðÆ® Ãø ÁÖ¼®Àº º¸ÆíÀûÀ¸·Î »ç¿ëµÇÁö ¾Ê´Â´Ù. ¾Õ¼­ ¾ê±âÇÑ´ë·Î Áõ¸íÀ̳ª, ÀúÀÛ±Ç Á¤º¸ µîÀÇ ¹ýÀûÀÎ ¸ñÀûÀÇ Áõ¸í¿¡ »ç¿ëµÉ °æ¿ì´Â ¿¹¿Ü°¡ µÇ°Ú´Ù. ´Ù¸¥ ¿¹¿ÜÀûÀÎ °æ¿ì´Â HTML ÀúÀÛµµ±¸µéÀÌ HTML ¹®¼­ ±¸Á¶ÀÇ Æ²À» Àâ¾ÆÁÖ±â À§ÇØ ÀÛÀº ¾çÀÇ HTML ÁÖ¼®µéÀ» »ç¿ëÇÏ´Â °æ¿ì°¡ µÇ°Ú´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù:

<!-- Åø¹Ù ¼½¼Ç -->
    ...
<!-- ¿ÞÂÊ ³×ºñ°ÔÀÌ¼Ç ¸Þ´º -->
    ...
<!-- main body -->
    ...
<!-- footer -->
    ...

¿©·¯ ÁÙÀÇ ÁÖ¼® Multiline Comment Block

JSP ¶Ç´Â Ŭ¶óÀÌ¾ðÆ® Ãø ¸ðµÎ, ¿©·¯ ÁÙÀÇ ÁÖ¼®Àº ´ë½Ã ¹®ÀÚ "-" ·Î ²Ù¸çÁø´Ù. XML ½ºÆå¿¡¼­, ´õºí-´ë½Ã ¹®ÀÚ¿­ "--"Àº XML ÁÖ¼® ¹® ³»¿¡ Çã¿ëµÇÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î, ÀÌ ½ºÆå¿¡ ȣȯ¼º°ú Àϰü¼ºÀ» °®±â À§Çؼ­, ´õºí-´ë½Ã ¹®ÀÚ¿­Àº ¿©·¯ÁÙÀÇ ÁÖ¼®¹® ³»¿¡ »ç¿ëµÇ¸é ¾ÈµÈ´Ù. ´ÙÀ½ µµÇ¥´Â Ŭ¶óÀÌ¾ðÆ® Ãø ¿©·¯ ÁÙ ÁÖ¼® »ç¿ë¹ýÀ» º¸¿©ÁØ´Ù:

±ÇÀå XML°ú ¸ÂÁö ¾Ê´Â ¹ý
    <!--
      - line 1
      - line 2
    ...
      -->
    
    <!--
      -- line 1
      -- line 2
    ...
      -->
    

JSP ¼±¾ð¹® JSP Declarations

ÀÚ¹Ù ÄÚµå ÀÛ¼º¿ä·É¿¡ µû¶ó¼­, °°Àº ŸÀÔÀÇ º¯¼ö ¼±¾ð¹®Àº ´Ù¸¥ ÁÙ¿¡¼­ ÀÌ·ç¾îÁ®¾ß µÈ´Ù:

ºñ Ãßõ Ãßõ
    <%! private int x, y; %>
    
    <%! private int x; %>
    <%! private int y; %>
    

ÀÚ¹ÙºóÁî´Â <jsp:useBean> ¾×¼Ç ű׸¦ »ç¿ëÇÏ´Â ´ë½Å, JSP ¼±¾ð¹®À» ÅëÇØ¼­ ¼±¾ðµÇ°í ÀνºÅϽºÈ­µÇ¸é ¾ÈµÈ´Ù.

ÀϹÝÀûÀ¸·Î, º¯¼ö¸¦ À§ÇÑ JSP ¼±¾ð¹®Àº ±× ÀÚü°¡ ½ºÅ©¸³Æ® ¾ð¾îÀÇ »ç¿ëÀ» ºÎÃß±â±â ¶§¹®¿¡ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù. JSP ´Â ÇÁ¸®Á¨Å×ÀÌ¼Ç ¸ñÀûÀ¸·Î ¼³°èµÇ¾ú´Âµ¥, ¿©±â¿¡ ºñÁö´Ï½º ·ÎÁ÷°ú ÀÚ¹ÙÄڵ带 ¼¯¾î³õ±â ¶§¹®ÀÌ´Ù. ±×¸®°í, º¯¼öÀÇ ½ºÄÚÇÁ °ü¸®¿¡ µû¸¥ ºÎ´ãµµ »ý±â°Ô µÈ´Ù.

JSP ½ºÅ©¸³Æ²¸´ JSP Scriptlets

°¡±ÞÀû, ű׶óÀ̺귯¸®·Î µ¿ÀÏÇÑ ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸é, JSP ½ºÅ¬¸³Æ²¸´Àº ÇÇÇϱ⠹ٶõ´Ù. ÀÌ·¸°Ô ÇÏ¸é ÆäÀÌÁö °¡µ¶¼ºµµ ³ôÀ̰í, À¯Áöº¸¼öµµ ½¬¿öÁø´Ù. ºñÁö´Ï½º ·ÎÁ÷À» ÇÁ¸®ÁøÅ×ÀÌ¼Ç ·ÎÁ÷¿¡¼­ ºÐ¸®Çϴµ¥ ÀÏÁ¶Çϸç, JSP 2.0 ½ºÅ¸ÀÏÀÇ ÆäÀÌÁö·Î ½±°Ô ¿Å°Ü°¥ ¼ö ÀÖ´Ù(JSP 2.0 µµ ½ºÅ©¸³Æ²¸´À» Áö¿øÇÏÁö¸¸ ´ú °­Á¶ÇÑ´Ù). ´ÙÀ½ ¿¹Á¦´Â customers Ç¥½Ã ¹æ¹ýÀÌ µ¥ÀÌÅÍ Çü¿¡ µû¶ó¼­ ´Ù¸¥ ½ºÅ©¸³Æ²¸´À» »ç¿ëÇÏ´Â °ÍÀ» º¸¿©ÁØ´Ù:

customers ´Â CustomersÀÇ ¹è¿­

    <table>
        <%  for ( int i=0; i<customers.length; i++ ) { %>
            <tr>
                <td><%= customers[i].getLastName() %></td>
                <td><%= customers[i].getFirstName() %></td>
            </tr>
        <%  } %>
    </table>

customers ´Â Enumeration Çü

    <table>
        <%  for ( Enumeration e = customers.elements();
                e.hasMoreElements(); ) {
                Customer customer = (Customer)e.nextElement();
        %>
            <tr>
                <td><%= customer.getLastName() %></td>
                <td><%= customer.getFirstName() %></td>
            </tr>
        <%  } %>
    </table>

±×·¯³ª, °øÅë ű׶óÀ̺귯¸®¸¦ »ç¿ëÇϸé, customers ÀÇ µ¥ÀÌÅÍ ÇüÀÌ ´Þ¶óµµ º¸´Ù ³ôÀº À¯¿¬¼ºÀÌ »ý±ä´Ù. ¿¹¸¦ µé¾î¼­, JSTL ¿¡¼­´Âcustomers ¸¦ ³ªÅ¸³»±â À§Çؼ­ ¹è¿­°ú Enumeration ¾çÂÊ ¸ðµÎ Áö¿øÇÏ´Â ´ÙÀ½°ú °°Àº ÄÚµå·Î Ç¥½ÃÇÒ ¼ö ÀÖ´Ù:

    <table>
        <c:forEach var="customer" items="${customers}">
            <tr>
                <td><c:out value="${customer.lastName}"/></td>
                <td><c:out value="${customer.firstName}"/></td>
            </tr>
        </c:forEach>
    </table>

ºñÁö´Ï½º ·ÎÁ÷°ú ÇÁ¸®Á¨Å×ÀÌ¼Ç Ãþ°úÀÇ °áÇÕµµÀ» ÁÙÀ̱â À§ÇÑ ¸ðµ¨-ºä-ÄÁÆ®·Ñ·¯(MVC) µðÀÚÀÎ ÆÐÅÏÀ» Àû¿ëÇÏ·Á°í ÇÑ´Ù¸é, JSP ½ºÅ©¸³Æ²¸´Àº ºñÁö´Ï½º ·ÎÁ÷À» ±¸ÇöÇϱâ À§Çؼ­ »ç¿ëµÇ¾î¼­´Â ¾ÈµÈ´Ù. ¿ÀÈ÷·Á, JSP ½ºÅ©¸³Æ²¸´Àº Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ó¸®ÇÑ µÚ¿¡ ³ª¿À´Â µ¥ÀÌÅÍ("°¡Ä¡ °´Ã¼ value objects"·Î ºÒ¸®´Â)¸¦ ÀûÀýÇÑ Å¬¶óÀ̾ðÆ®ÀÇ ÁغñµÈ Çü½Ä¿¡ Àü¼ÛÇϱâ À§ÇØ ÇÊ¿äÇÏ´Ù¸é »ç¿ëµÈ´Ù. ½ÉÁö¾î ±×·² °æ¿ì¿¡µµ, ÇÁ·ÐÆ® ÄÁÆ®·Ñ·¯ ¼­ºí¸´À̳ª Ä¿½ºÅÒ Å±׷ΠÇÏ´Â °Ô ´õ ³´´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½ÀÇ ÄÚµå´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ Á÷Á¢ customers ÀÇ À̸§À» °¡Á®¿Í Ŭ¶óÀÌ¾ðÆ®¿¡ º¸¿©ÁØ´Ù:

<%
    // ½ºÅ©¸³Æ²¸´À» ÀÌ¿ëÇÏ´Â °ÍÀº ÃßõÇÏÁö ¾ÊÀ½!

    Connection conn = null;
    try {
        // Get connection
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource)ctx.lookup("customerDS");
        conn = ds.getConnection();

        // Get customer names
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT name FROM customer");

        // Display names
        while ( rs.next() ) {
            out.println( rs.getString("name") + "<br>");
        }
    } catch (SQLException e) {
        out.println("Could not retrieve customer names:" + e);
    } finally {
        if ( conn != null )
            conn.close();
    }
%>

´ÙÀ½ÀÇ JSP ÄÚµå´Â µ¥ÀÌÅͺ£À̽º 󸮺κÐÀ» ³»ºÎÀûÀ¸·Î µ¥ÀÌÅͺ£À̽º ÄÚµåÀÇ ÀÇÁ¸¼ºÀ» ¼û±â°í ĸ½¶È­ÇÑ Ä¿½ºÅÒű×myTags:dataSource¿¡ À§ÀÓÇϰí Àֱ⠶§¹®¿¡ ´õ º¸±â ÁÁ´Ù:

<myTags:dataSource
    name="customerDS"
    table="customer"
    columns="name"
    var="result" />
<c:forEach var="row" items="${result.rows}">
    <c:out value="${row.name}" />
    <br />
</c:forEach>

result ´Â Ä¿½ºÅÒ ÅÂ±× myTags:dataSource°¡ customer µ¥ÀÌÅͺ£À̽º¿¡¼­ customerÀÇ À̸§µé »Ì¾Æ³½ °á°ú¸¦ ´ãÀ¸·Á°í ¸¸µé¾î ³½ ½ºÅ©¸³ÆÃ º¯¼öÀÌ´Ù. JSP ÄÚµå´Â Ŭ¶óÀ̾ðÆ®ÀÇ ¿ä±¸¿¡ µû¶ó µ¿ÀûÀ¸·Î ´Ù¸¥ Á¾·ùÀÇ Ãâ·Â(HTML, XML, WML)À» »ý¼ºÇϱâ À§ÇØ È®ÀåÇÒ ¼ö ÀÖ´Ù. ±×°Íµµ ¹é¿£µå ÄÚµå(dataSource ű׸¦ À§ÇÑ)¸¦ º¯°æÇÏÁö ¾Ê°íµµ °¡´ÉÇÏ´Ù. ´õ ³ªÀº ¼±ÅÃÀº À̰ÍÀ» ÇÁ·ÐÆ® ÄÁÆ®·Ñ·¯ ¼­ºí¸´¿¡ À§ÀÓÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¼­ºí¸´Àº µ¥ÀÌÅ͸¦ ºÒ·¯¿Í¼­ ±× °á°ú¸¦ request ½ºÄÚÇÁÀÇ ¼Ó¼ºÀ» ÅëÇØ¼­ JSP¿¡ Á¦°øÇÑ´Ù. ¿¹Á¦´Â ÀÚ¹Ù BluePrintÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¼½¼ÇÀ» Âü°íÇϱ⠹ٶõ´Ù.

¿ä¾àÇϸé :

JSP Ç¥Çö½Ä JSP Expressions

JSP Ç¥Çö½ÄÀº JSP ½ºÅ©¸³Æ²¸´Ã³·³ °¡´ÉÇÏ¸é »ï°¡´Â °ÍÀÌ ÁÁ´Ù. µ¿ÀÏÇÑ ÀÛ¾÷À» ¼öÇàÇÏ´Â ´ÙÀ½ 3°¡Áö ¿¹Á¦°¡ Àß ¼³¸íÇØÁØ´Ù:

Example 1 (ÀÚ¹Ù ÄÚµå »ç¿ë):

    <%= myBean.getName() %>

Example 2 (JSP ÅÂ±× »ç¿ë):

    <jsp:getProperty name="myBean" property="name" />

Example 3 (JSTL ÅÂ±× »ç¿ë):

    <c:out value="${myBean.name}" />

Example 1 Àº myBean À̶ó´Â ½ºÅ©¸³Æ® º¯¼ö°¡ ¼±¾ðµÈ °ÍÀ̶ó°í °¡Á¤ÇÑ´Ù. ´Ù¸¥ µÎ ¿¹Á¦¿¡¼­ myBeanÀº ¾î¶² ½ºÄÚÇÁÀÇ ¼Ó¼ºÀ¸·Î PageContext.findAttribute()À» ÅëÇØ¼­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. µÎ ¹øÂ° ¿¹Á¦´Â ¶ÇÇÑ <jsp:useBean> ¿¡ ÀÇÇØ¼­ ÆäÀÌÁö¿¡ ¼Ò°³µÈ myBeanÀ̶ó°í °¡Á¤ÇÑ´Ù.

¼Â Áß¿¡¼­ JSTL ÅÂ±× ¿¹Á¦°¡ ³´´Ù. JSP Ç¥Çö½Ä ¸¸Å­ ª°í, °¡µ¶¼ºµµ ÁÁ°í, À¯Áöº¸¼öÇϱ⵵ º¸´Ù ÆíÇÏ´Ù. ±×¸®°í, ÀÚ¹Ù ½ºÅ©¸³Æ²¸´¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â´Ù(½ºÅ©¸³Æ²¸´Àº ÀÚ¹Ù ¾ð¾î¿Í API ÇÔ¼öµé¿¡ Àͼ÷ÇØ¾ß ´Ù·ê ¼ö ÀÖ´Ù.) ´õ¿ì±â, JSP 2.0 ½ºÅ¸ÀÏ ÇÁ·Î±×·¥À¸·Î ½±°Ô À̵¿ÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ¾î¶² ¼±ÅÃÀÌ Ã¤Åõǵç, ¸ðµç °³¹ßÀÚµéÀÇ µ¿ÀǸ¦ ¾ò¾î¼­, °°Àº ÇÁ·ÎÁ§Æ®¿¡ ÀÖ´Â JSP °á°ú¹°µéÀº ÀüüÀûÀ¸·Î ÀϰüµÈ ¹æ½ÄÀ» »ç¿ëÇØ¾ß µÈ´Ù.  ÁÖÀÇÇÒ Á¡Àº, JSTL ¿¹Á¦´Â ·ÎÄà ÀÚ¹Ù ½ºÅ©¸³Æ® º¯¼ö·ÎºÎÅͰ¡ ¾Æ´Ñ, page ÄÁÅØ½ºÆ®·ÎºÎÅÍ myBean ÀÇ °ªÀ» °¡Á®¿Â´Ù´Â °ÍÀÌ ½ÇÁúÀûÀ¸·Î Á¶±Ý ´Ù¸¥ Á¡ÀÌ´Ù.

¸¶Áö¸·À¸·Î, JSP Ç¥Çö½ÄÀº ±â¹Ý ½ºÅ©¸³ÆÃ ¾ð¾îÀÇ ¹®¹ý¿¡ ÀÇÁ¸ÇÏ´Â, °°Àº ±â´ÉÀÇ JSP ½ºÅ©¸³Æ²¸´º¸´Ù ³´´Ù. ¿¹¸¦ µé¾î,

    <%= x %>

·Î ÇÏ´Â °Ô ¾Æ·¡ ¹æ¹ýº¸´Ù ÁÁ´Ù.

    <% out.print( x ); %>

°ø¹é White Space

ÄÚµåÀÇ ÀÌÇØ¿Í À¯Áöº¸¼ö¿¡ µå´Â ³ë·ÂÀ» ÁÙÀ̱â À§Çؼ­ JSP Äڵ带 º¸±â ÁÁ°Ô µé¿©¾²±âÇϴµ¥ °ø¹éÀ» »ç¿ëÇÑ´Ù. ƯÈ÷, ºó ÁÙ°ú °ø¹éÀº ÇÊ¿äÇÑ °÷¿¡¼­ JSP ÀÇ ¿©·¯ °÷¿¡ »ðÀԵǾî¾ß ÇÑ´Ù.

ºó ÁÙ Blank Lines

ºó ÁÙÀº Ãâ·Â¿¡ ¿øÇÏÁö ¾Ê´Â ¿µÇ⸸ ÁÖÁö ¾Ê´Â´Ù¸é JSPÀÇ °¡µ¶¼ºÀ» ³ôÀ̱â À§Çؼ­ °¡²û »ç¿ëµÈ´Ù. ¾Æ·¡ ¿¹Á¦¿¡¼­, HTML <PRE> ºí·Ï ³»¿¡ µÎ °³ÀÇ JSP Ç¥Çö½Ä »çÀÌ¿¡ ÀÖ´Â ºó ÁÙÀº Ŭ¶óÀ̾ðÆ®ÀÇ ºê¶ó¿ìÀú¿¡ HTML Ãâ·Â °á°ú¿¡¼­ ÇÑÁÙ ´õ »ý±â°Ô ¸¸µç´Ù. ±×·¯³ª ºó ÁÙÀÌ <PRE> ºí·Ï »çÀÌ¿¡ ÀÖÁö ¾Ê´Ù¸é, ºê¶ó¿ìÀúÀÇ Ãâ·Â¿¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù.

JSP ±¸¹® Ŭ¶óÀ̾ðÆ®ÀÇ HTML Ãâ·Â
    <pre>
    <%= customer.getFirstName() %>
    <%= customer.getLastName() %>
    </pre>
    
    Joe
    Block
    
    <pre>
    <%= customer.getFirstName() %>

    <%= customer.getLastName() %>
    </pre>
    
    Joe

    Block
    
    <%= customer.getFirstName() %>

    <%= customer.getLastName() %>
    
    Joe Block
    

ºó ¹®ÀÚ¿­ Blank Spaces

°ø¹é ¹®ÀÚ( ; ¿ªÀÚÁÖ:°ø¹éÀº ±æÀ̰¡ 1, ºó ¹®ÀÚ¿­Àº ""ó·³ ±æÀ̰¡ 0)´Â JSP ÅÂ±×¿Í ¸öü »çÀÌ¿¡ ¾²¿©Á®¾ß µÈ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½

    <%= customer.getName() %>

ÄÚµå´Â ¾Æ·¡ °Íº¸´Ù ÁÁ´Ù.

    <%=customer.getName()%>

JSP ÁÖ¼® ÅÂ±×¿Í ÁÖ¼®À» ºÐ¸®ÇÏ´Â °ø¹é ¹®ÀÚµéÀÌ ÀÖ¾î¾ß µÈ´Ù:

<%--
  - ¿©·¯ ÁÙÀÇ ÁÖ¼®ÀÌ ³ª´µ¾îÁö¸é, °¢°¢ÀÇ ÁÙÀº
  - ÇÑ ÁÙ¾¿ Â÷ÁöÇÑ´Ù.
  --%>
<%-- ÂªÀº ÁÖ¼® --%>

À̸§Áþ´Â ¿ä·É Naming Conventions

À̸§Áþ´Â ¿ä·ÉÀ» Àû¿ëÇϸé, ÇÁ·ÎÁ§Æ® ³»ÀÇ À¥ ÄÄÆ÷³ÍÆ® ¿¤¸®¸ÕÆ®µéÀ» ½±°Ô È®ÀÎ, ºÐ·ù, ÅëÇÕÇÒ ¼ö ÀÖ´Ù. ÀÌ ¼½¼Ç¿¡¼­, JSP¿¡ ÀûÇÕÇÑ ¿ä·ÉÀ» »ìÆìº¸ÀÚ.

JSP À̸§ JSP Names

JSP (ÆÄÀÏ) À̸§Àº ¾ðÁ¦³ª ¼Ò¹®ÀÚ·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù. ¿©·¯ °³ÀÇ ´Ü¾î·Î ±¸¼ºµÉ ¼ö ÀÖ°í, ÀÌ·¯ÇÑ °æ¿ì ´Ü¾îµéÀº ¸ðµÎ ºÙ¿©¾²°í, À̾îÁö´Â ´Ü¾îÀÇ Ã¹±ÛÀÚ´Â ´ë¹®ÀÚ·Î ¾´´Ù. JSP À̸§Àº °£´ÜÇÑ ¸í»ç³ª ªÀº ¹®ÀåÀÌ µÉ ¼ö ÀÖ´Ù. µ¿»ç»ÓÀÎ JSP ¸íÀº °³¹ßÀÚ¿¡°Ô ÃæºÐÇÑ Àǹ̸¦ Àü´ÞÇÏÁö ¸øÇϱ⠶§¹®¿¡, ÇÇÇϵµ·Ï ÇÑ´Ù. ¿¹¸¦ µé¸é:

    perform.jsp

ÆÄÀÏÀº ´ÙÀ½ ÆÄÀϺ¸´Ù ¸íÈ®ÇÏÁö ¾Ê´Ù.

    performLogin.jsp

JSP À̸§¿¡ µ¿»ç°¡ µé¾î°¡´Â °æ¿ì, Àº¿¬ Áß¿¡ µÞÂÊ¿¡¼­ ó¸®Çϰí Àִٴ ǥ½Ã·Î ÇöÀçÇüÀ» ¾´´Ù:

    showAccountDetails.jsp

·Î ¾²´Â °Ô ¾Æ·¡ ÆÄÀÏ¸í º¸´Ù ÁÁ´Ù

    showingAccountDetails.jsp

ÅÂ±× À̸§ Tag Names

ÅÂ±× Çڵ鷯¿Í °ü·ÃµÈ Ŭ·¡½º¿¡ ´ëÇÑ À̸§Áþ´Â ¿ä·ÉÀº ´ÙÀ½°ú °°´Ù:

¼³¸í Ŭ·¡½º ¸í
XXX tag extra info (javax.servlet.jsp.tagext.TagExtraInfo¸¦ »ó¼ÓÇÔ) XXXTEI
XXX tag library validator (javax.servlet.jsp.tagext.TagLibraryValidator¸¦ »ó¼ÓÇÔ) XXXTLV
XXX tag handler interface (javax.servlet.jsp.tagext.Tag/IterationTag/BodyTag¸¦ »ó¼ÓÇÔ) XXXTag
XXX tag handler implementation XXXTag

µ¡ºÙ¿©, ÅÂ±× À̸§Àº ÀÚ¹Ù¿¡ °ü·ÃµÈ ÄÚµåÀÛ¼º¹ý¿¡¼­ Á¤ÇÑ Å¬·¡½º¿Í ÀÎÅÍÆäÀ̽º À̸§ Áþ´Â ¿ä·ÉÀ» µû¶ó¼­ Á¤ÇØ¾ß µÈ´Ù.

ÅÂ±× °ü·ÃµÈ Ŭ·¡½º¿Í ´Ù¸¥ Ŭ·¡½º¿Í ´õ ºÐ¸íÇÏ°Ô ±¸ºÐÇϱâ À§Çؼ­, ÆÐŰÁö Á¢¹Ì»ç(tags ¶Ç´Â taglib)¸¦ Ŭ·¡½ºÀÇ ÆÐŰÁö¸í¿¡ Àû¿ëÇÑ´Ù. ¿¹¸¦ µé¸é:

    com.mycorp.myapp.tags.XXXTag

ÅÂ±× prefix À̸§ Tag Prefix Names

ÅÂ±× prefix ´Â ªÁö¸¸ Àǹ̰¡ ´ã±ä ¸í»ç¸¦ »ç¿ëÇØ¾ß Çϰí, ù¹®ÀÚ´Â ¼Ò¹®ÀÚ·Î ÇØ¾ßÇÑ´Ù. ÅÂ±× prefix ´Â ¾ËÆÄºª ¹®ÀÚ¸¸ Æ÷ÇÔÇØ¾ß µÈ´Ù. ¸î °¡Áö ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù:

¿¹ OK?
mytaglib no
myTagLib yes
MyTagLib no
MyTagLib1 no
My_Tag_Lib no
My$Tag$Lib no

XML ¹®¹ýÀÇ JSP ÆäÀÌÁö JSP Pages in XML Syntax

JSP ´Â µÎ°¡Áö ´Ù¸¥ ¹®¹ýÀ» Á¦°øÇÑ´Ù: JSP ÆäÀÌÁö¸¦ ÀÛ¼ºÇÏ´Â 'Ç¥ÁØ ¹®¹ý'°ú JSP¸¦ XML¹®¼­·Î ÀÛ¼ºÇÏ´Â 'XML ¹®¹ý'ÀÌ ÀÖ´Ù. Ç¥ÁØ ¹®¹ýÀ» »ç¿ëÇÏ´Â JSP ÆäÀÌÁöµéÀÌ 'JSP ÆäÀÌÁö'·Î ¸¹ÀÌ ¾²ÀδÙ. XML ¹®¹ýÀ¸·Î ÀÛ¼ºµÈ JSP´Â 'JSP ¹®¼­'¶ó°í ÀÏÄ´´Ù. ÀÌ ±â»ç´Â ¿ì¼±ÀûÀ¸·Î JSP ÆäÀÌÁö¸¦ ¼Ò°³ÇÏÁö¸¸, ¸¹Àº ºÎºÐÀÇ °³³äµéÀÌ JSP ¹®¼­¿¡µµ ¿ª½Ã Àû¿ëµÉ ¼ö ÀÖ´Ù. XMLÀÌ Á» ´õ À¯ÇàÇϸé JSP ¹®¼­ »ç¿ëµµ ¸¹¾ÆÁú °ÍÀ̶ó°í ±â´ëµÈ´Ù. JSP 2.0 ½ºÆå¿¡¼­´Â ´õ ¸¹Àº XML ¹®¹ý ģȭÀûÀÎ °ÍµéÀÌ ¼Ò°³µÉ °ÍÀÌ´Ù.

ÁÖÀÇÇÒ °ÍÀº XML ¹®¹ýÀ» ÀÌ¿ëÇØ¼­ JSP¸¦ ¸¸µå´Â °Í°ú JSP·Î XML °á°ú(view)¸¦ ¸¸µé¾î ³»´Â °Í°ú È¥µ¿Çؼ­´Â ¾ÈµÈ´Ù. ÆäÀÌÁö Á¦ÀÛµµ±¸´Â JSP¸¦ ¸¸µé±â À§ÇØ Ç¥ÁØ ¶Ç´Â XML ¹®¹ýÀ» »ç¿ëÇÑ´Ù. ±×¸®°í ³ª¼­ ÄÁÅ×À̳ʴ JSP¸¦ XML °á°ú·Î º¯È¯Çϰí, À̰ÍÀº ÅÂ±× ¶óÀ̺귯¸® ¹ë¸®µ¥ÀÌÅÍ(À¯È¿¼º °ËÁõ±â)¿¡¼­ È®ÀÎÇÑ´Ù.

JSP ¹®¼­ ±¸Á¶ JSP Document Structure

JSP ¹®¼­´Â ´ÙÀ½°ú °°Àº ±âº» ±¸Á¶¸¦ °®´Â´Ù:

    <? xml version="1.0" ?>
    <!--
      - Author(s):
      - Date:
      - Copyright Notice:
      - @(#)
      - Description:
      -->
    <jsp:root   xmlns:jsp="http://java.sun.com/JSP/Page"
                xmlns:prefix1="URI-for-taglib1"
                xmlns:prefix2="URI-for-taglib2"
                version="1.2">
        JSP Document ...
    </jsp:root>

ù ÁÙÀº, ÀÌ ÆäÀÌÁö°¡ XML ¹®¼­¶ó°í Á¤ÀÇÇÏ´Â ¼±ÅÃÀû XML ÇÁ·Ñ·Î±×ÀÌ´Ù. ´ÙÀ½À¸·Î ¿À´Â °ÍÀº ¹®¼­¿¡ ´ëÇÑ ÁÖ¼®ÀÌ´Ù. <jsp:root> ¿¤¸®¸ÕÆ®´Â À̰ÍÀÌ JSP ¹®¼­ÀÓÀ» Á¤ÀÇÇϰí, ¹Ýµå½Ã ÀÌ ¿¤¸®¸ÕÆ®°¡ ·çÆ® ¿¤¸®¸ÕÆ®·Î ³ªÅ¸³ª¾ß µÈ´Ù. jsp À̸§°ø°£Àº ¹Ýµå½Ã °¡Á®¿Í¾ß µÇ°í, ¸ðµç ÅÂ±× ¶óÀ̺귯¸®´Â ÀÌ ·çÆ® ¿¤¸®¸ÕÆ®¸¦ »ç¿ëÇØ¼­ °¡Á®¿Í¾ß µÈ´Ù. ¹öÀü ¼Ó¼ºÀÌ ÇÊ¿äÇϰí, ¾î¶² ¹öÀüÀ» »ç¿ëÇÒ Áö¸¦ Á¤ÇØÁØ´Ù. JSP ¹®¼­ÀÇ ½ÇÁ¦ ³»¿ëÀº <jsp:root> ¿¤¸®¸ÕÆ®ÀÇ ¼­ºê¿¤¸®¸ÕÆ®¿¡ ³ªÅ¸³­´Ù. Ç¥ÁØ XML µé¿©¾²±â ·ê¿¡ µû¶ó¼­ ¹®¼­ ÀüüÀûÀ¸·Î ÀϰüµÇ°Ô Àû¿ëÇÏ´Â µé¿©¾²±â ´ÜÀ§´Â 4°³ÀÇ °ø¹é¹®ÀÚÀÌ´Ù.

JSP ¹®¼­´Â Çü½ÄÀÌ Àß °®ÃçÁø XML ¹®¼­À̱⠶§¹®¿¡, <% %> ¿Í °°Àº ¿¤¸®¸ÕÆ®´Â <jsp:scriptlet /> °°ÀÌ XML·Î ¹Ù²ã¼­ Ç¥±âÇØ¾ß µÈ´Ù. ÀÚ¼¼ÇÑ °ÍÀº JSP ½ºÆåÀ» º¸±â ¹Ù¶õ´Ù.

XML ÁÖ¼® XML Comments

JSP ½ºÆåÀº XML ½ºÅ¸ÀÏÀÇ ÁÖ¼®À» ¾î¶»°Ô ó¸®ÇÒ Áö¿¡ ´ëÇØ ºÒºÐ¸íÇϱ⠶§¹®¿¡, ÁÖ¼®ÀÌ Å¬¶óÀÌ¾ðÆ®·Î ¾ÈÀüÇÏ°Ô Àü´ÞµÇ±â À§Çؼ­´Â, <jsp:text>·Î ´ÙÀ½°ú °°ÀÌ °¨½ÎÁÖ¾î¾ß µÈ´Ù:

    ...
    <jsp:text><![CDATA[
        <!--
          - Multiline comment
          - to be sent to client.
          -->
    ]]></jsp:text>
    ...

JSP ¹®¼­ ³»ÀÇ ÀÚ¹Ù ÄÚµå Java Code in JSP Documents

¼±¾ð¹®, ½ºÅ©¸³Æ²¸´, Ç¥Çö½Ä¿¡¼­ ÀÚ¹Ù Äڵ带 ¾²·Á°í ÇÒ ¶§, Äڵ尡 ¹®¼­ÀÇ ±¸Á¶¸¦ ¸Á°¡¶ß¸®Áö ¾Ê´Â´Ù¸é, CDATA¿¤¸®¸ÕÆ®¸¦ »ç¿ëÇÑ´Ù.

    ...
    <jsp:scriptlet>
        for( int level = 0; level < 3; level++ ) {
    </jsp:scriptlet>
    <tr>
        <td>
            <jsp:expression><![CDATA[
                "<h" + level + ">Text</h" + level + ">"
            ]]></jsp:expression>
        </td>
    </tr>
    <jsp:scriptlet>
        }
    </jsp:scriptlet>
    ...

Ç¥ÁØ ¹®¹ý¿¡¼­¿Í ´Ù¸£°Ô, XML µé¿©¾²±â ¹ýÄ¢Àº ¿¤¸®¸ÕÆ®ÀÇ ³»¿ë°ú »ó°ü¾øÀÌ ÁؼöµÇ¾î¾ß ÇÑ´Ù.

ÇÁ·Î±×·¡¹Ö ½À°ü Programming Practices

ÀϹÝÀûÀ¸·Î, ´ÙÀ½°ú °°Àº ÀÌÀ¯·Î JSP ÆäÀÌÁö¿¡ ÀÚ¹Ù ÄÚµå(¼±¾ð¹®, ½ºÅ©¸³Æ²¸´, Ç¥Çö½Ä) ¾²±â¸¦ ÇÇÇÑ´Ù:

ÀÚ¹Ù BluePrintsÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ¼½¼Ç¿¡ ÀÖ´Â ´õ ÀÚ¼¼ÇÑ Á¤º¸¿Í °¡À̵å¶óÀÎÀ» Âü°íÇϱ⠹ٶõ´Ù.

ÀÚ¹ÙºóÁî ÃʱâÈ­ JavaBeans Initialization

JSP´Â JavaBeanTMÀÇ ÇÁ·ÎÆÛƼ·Î Áõ¸íµÇ´Â ¸ðµç PropertyDescriptor¸¦ ÃʱâÈ­Çϱâ À§ÇØ Æí¸®ÇÑ ¿¤¸®¸ÕÆ®¸¦ Á¦°øÇÑ´Ù. ¿¹¸¦ µé¸é:

    <jsp:setProperty name="bankClient" property="*"/>

±×·¯³ª, ÁÖÀÇÇØ¼­ »ç¿ëÇØ¾ß ÇÑ´Ù. ù°·Î, ºóÀÌ ÇÁ·ÎÆÛƼ¸¦ °®°í ÀÖ´Ù, Áï amount ÇÁ·ÎÆÛƼ°¡ ÀÖ´Ù°í Çϰí, ÇöÀç ServletRequest °´Ã¼¿¡ ÆÄ¶ó¹ÌÅÍ(amount)°¡ ¾ø°Å³ª ÆÄ¶ó¹ÌÅÍ °ªÀÌ ""¶ó°í ÇÑ´Ù¸é, ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù: JSP´Â ºóÀÇ Æ¯Á¤ ÇÁ·ÎÆÛƼ¿¡ null¸¦ ÇÒ´çÇÏÁöµµ ¾Ê´Â´Ù. bankClient ºó¿¡ amountÀÇ ±âÁ¸ °ªÀÌ ¹«¾ùÀ̵çÁö °£¿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù. µÑ°·Î, PropertyEditors¸¦ ¼±¾ðÇÏÁö ¾ÊÀº ºñ-¿ä¼ÒÀûÀÎ ÇÁ·ÎÆÛƼ´Â ServletRequest °´Ã¼ÀÇ ½ºÆ®¸µ °ª¿¡¼­ ¾Ï¹¬ÀûÀ¸·Î ÃʱâÈ­ µÇÁö ¾Ê±â ¶§¹®¿¡, ¸í½ÃÀûÀÎ º¯È¯ÀÌ ÇÊ¿äÇÏ´Ù. ¼¼Â°·Î, ¸¸ÀÏ ¾îÇø®ÄÉÀ̼ÇÀÌ ÁÖÀÇ ±í°Ô ¼³°èµÇÁö ¾Ê¾Ò´Ù¸é, ¾ÇÀǸ¦ °¡Áø »ç¿ëÀÚ´Â Ãß°¡ÀûÀ¸·Î ¿äû ÆÄ¶ó¹ÌÅ͸¦ µ¡ºÙ¿©¼­ ºóÀÇ »ç¿ëÇÏÁö ¸»¾Æ¾ßÇÒ ÇÁ·ÎÆÛƼ °ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

±ò²ûÇÑ Äڵ带 À§Çؼ­ jsp:setProperty ű׿¡ property="*"¸¦ »ç¿ëÇÑ´Ù¸é, jsp:setProperty ÅÂ±× ÀÌÀü¿¡ ServletRequest °´Ã¼¸¦ ÅëÇØ¼­ ¹Þ¾Æ¿Í¾ß ÇÒ, ºóÀ» ÃʱâÈ­Çϱâ À§ÇÑ ÆÄ¶ó¹ÌÅ͵鿡 ´ëÇØ ÁÖ¼®À» ´Þ±â¸¦ ±ÇÇÑ´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼­´Â bankClient ºóÀ» ÃʱâÈ­Çϱâ À§Çؼ­ firstName¿Í lastName ÆÄ¶ó¹ÌÅͰ¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀ» ÁÖ¼®¿¡¼­ ÀÐÀ» ¼ö ÀÖ´Ù:

<%--
  -  ServletRequest¿¡¼­ firstName¿Í lastName¸¦ ¿ä±¸
  --%>
<jsp:setProperty name="bankClient" property="*" />

JSP ³»Àå °´Ã¼ JSP Implicit Objects

API È£ÃâÀ» ÅëÇØ¼­ °´Ã¼¸¦ ÂüÁ¶Çϱ⠺¸´Ù´Â JSP ³»Àå °´Ã¼¸¦ Á÷Á¢ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¡¼­ ServletContext ÀνºÅϽº¿¡ ÀÇÇØ Á¦°øµÇ´Â ÃÊ±â ÆÄ¶ó¹ÌÅÍ¿¡ Á¢±ÙÇϱâ À§ÇØ ´ÙÀ½À» ¾²´Â ´ë½Å¿¡

    getServletConfig().getServletContext().getInitParameter("param")

±âÁ¸ ³»Àå °´Ã¼¸¦ »ç¿ëÇÏ´Â °Ô ³´´Ù:

    application.getInitParameter("param")

ÃÊ±â ÆÄ¶ó¹ÌÅÍ °ªÀÌ Ãâ·ÂÀÌ µÇ¾î¾ß ÇÏ´Â °æ¿ì¿¡´Â, JSTL·Î Á¢±ÙÇØ¼­ Ãâ·ÂÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù:

    <c:out value="${initParam['param']}" />

ÀοëºÎÈ£ Quoting

ÀÏÁ¤ÇÑ ÀοëºÎÈ£ÀÇ »ç¿ëÀ» äÅÃÇÑ´Ù. ÀοëºÎÈ£´Â ÀÛÀºµû¿ÈÇ¥ ' ´ë½Å Å«µû¿ÈÇ¥ " ¸¦ »ç¿ëÇÑ´Ù.

ºÒ±ÔÄ¢ÇÑ ÀοëºÎÈ£ ÁÁÀº ÀοëºÎÈ£ »ç¿ë
<%@ page import='javabeans.*'%>
<%@ page import="java.util.*" %>
<%@ page import="javabeans.*" %>
<%@ page import="java.util.*" %>

¿¹¿ÜÀûÀÎ °æ¿ì´Â ÀÛÀºµû¿ÈÇ¥°¡ ÇÊ¿äÇÒ ¶§ÀÌ´Ù. ¿¹¸¦ µé¾î¼­ ½ºÅ©¸³Æ® ¾ð¾î¿¡¼­ Å«µû¿ÈÇ¥¸¦ »ç¿ëÇÏ´Â °æ¿ì¸¦ µé ¼ö ÀÖ´Ù:

    <jsp:include page='<%= getFoodMenuBar("Monday") %>' />

Ä¿½ºÅÒ ÅÂ±× »ç¿ëÇϱâ Using Custom Tags

¸¸ÀÏ Ä¿½ºÅÒűװ¡ ¸öü°¡ ¾ø´Ù¸é, ÄÁÅÙÆ®´Â (»ý·«Çؼ­ "JSP" ±âº»°ªÀ¸·Î ÇÏÁö ¸»°í) empty¶ó°í ¸íÈ®ÇÏ°Ô ¼±¾ðµÇ¾î¾ß ÇÑ´Ù. ÅÂ±× ¶óÀ̺귯¸® ¼³¸í¼­¿¡¼­ ´ÙÀ½°ú °°ÀÌ Á¤ÇØÁØ´Ù:

<tag>
    <name>hello</name>
    <tag-class>com.mycorp.util.taglib.HelloTagSupport</tag-class>
    <body-content>empty</body-content>
    ...
</tag>

ÀÌ·¸°Ô Çϸé JSP ÄÁÅ×À̳ʴ ÅÂ±× ¸öü°¡ ¹«Á¶°Ç ºñ¾î¾ß µÇ¸ç ÆÄ½ÌÇÒ ¾î¶² JSP ¹®¹ýµµ Æ÷ÇÔÇÏÁö ¾Ê¾Æ¾ß µÈ´Ù°í ÀνÄÇÑ´Ù. È¿°ú´Â ºó ¸öü¸¦ ÆÄ½ÌÇϱâ À§Çؼ­ ºÒÇÊ¿äÇÏ°Ô ÀÚ¿øÀÇ ÇÒ´çÀÌ ÀÌ·ïÁö´Â °ÍÀ» Á¦°ÅÇÑ´Ù.

ºó ű״Â, °¡µ¶¼ºÇâ»óÀ» À§ÇØ ¿­°í ´Ý´Â XML ¿¤¸®¸ÕÆ® ½ÖÀ¸·Î Ç¥½ÃÇϱ⺸´Ù´Â, ªÀº XML ¿¤¸®¸ÕÆ®·Î Ç¥½ÃÇÑ´Ù. ±×·¡¼­

    <myTag:hello />

¶ó°í Ç¥±âÇÏ´Â °ÍÀÌ ¾Æ·¡º¸´Ù ³´´Ù.

    <myTag:hello></myTag:hello>

TagExtraInfo¿Í TagLibraryValidator »ç¿ë Use of TagExtraInfo and TagLibraryValidator

¶§¶§·Î, ÅÂ±× ¶óÀ̺귯¸®¸¦ »ç¿ëÇϴµ¥ TLD Çϳª·Î À¯È¿¼ºÀ» °ËÁõÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù. ±× ¶§´Â TLD¿¡ µî·ÏµÈ TagExtraInfo Ŭ·¡½º³ª TagLibraryValidator Ŭ·¡½º¸¦ »ç¿ëÇØ¼­, º¯È¯ÇÒ ¶§ ÅÂ±× ¶óÀ̺귯¸®¿¡ ÀÖ´Â ¿¡·¯¸¦ Àâ¾Æ³¾ ¼ö ÀÖ´Ù.

ÀÚ¹Ù½ºÅ©¸³Æ® »ç¿ë Use of JavaScriptTM

½ºÅ©¸³Æ®°¡ Á¦´ë·Î µ¹¾Æ°¡±â À§Çؼ­´Â ÀÚ¹Ù½ºÅ©¸³Æ®´Â ºê¶ó¿ìÀú ŸÀÔÀÇ Æ¯¼º°ú °ü°è¾ø¾î¾ß µÈ´Ù.

µ¿ÀÛÀ» ÇÑ´Ù¸é, JSP¿¡¼­ ÀÚ¹Ù½ºÅ©¸³Æ® Äڵ带 µ¶¸³ÀûÀÎ ÆÄÀÏ·Î ºÐ¸®Çϰí, ´ÙÀ½°ú °°ÀÌ JSP¿¡¼­ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ºÒ·¯¾²´Â ¹æ½ÄÀº ÁÁÀº »ý°¢ÀÌ´Ù:

<script language=javascript src="/js/main.js">

ÀÌ·¸°Ô Çϸé ÀÚ¹Ù½ºÅ©¸³Æ®ÀÇ Àç»ç¿ë¼ºµµ Çâ»óµÇ°í, ¿©·¯ JSP »çÀÌ¿¡ ÀϰüµÈ ½À¼ºÀÇ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ À¯ÁöÇÒ ¼ö ÀÖ°í, JSPÆäÀÌÁöÀÇ º¹À⼺À» ÁÙ¿©ÁØ´Ù.

ij½ºÄÉÀ̵ù ½ºÅ¸ÀÏ ½ÃÆ® CSS Cascading Style Sheets

CSS¸¦ »ç¿ëÇØ¼­ Çìµù, Å×ÀÌºí µîÀÇ °øÅëÀûÀΠƯ¼ºÀ» Áß¾Ó¿¡¼­ Á¦¾îÇϵµ·Ï ÇÑ´Ù. ÀÌ ¹æ¹ýÀº »ç¿ëÀڵ鿡°Ô ÇÁ¸®Á¨Å×À̼ÇÀÇ Àϰü¼ºÀ» Çâ»ó½Ã۰í, À¯Áöº¸¼ö ³ë·Â°ú JSP ÆäÀÌÁöÀÇ ÄÚµå »çÀÌÁ ÁÙ¿©ÁØ´Ù. ±×·¡¼­, ´ÙÀ½°ú °°ÀÌ HTML ű׿¡¼­ ½ºÅ¸ÀÏ Á¤º¸¸¦ ³¢¾î¾²Áö ¸»°í:

<H1><FONT color="blue">Chapter 1</FONT></H1>
...
<H1><FONT color="blue">Chapter 2</FONT></H1>
...

ÇϳªÀÇ ½ºÅ¸ÀÏ ½ÃÆ® ÆÄÀÏmyJspStyle.css¿¡ ´ÙÀ½°ú °°Àº ½ºÅ¸ÀÏ Á¤º¸¸¦ Á¤ÀÇÇÑ´Ù:

H1 { color: blue }

±×¸®°í JSP ÆäÀÌÁö¿¡ ½ºÅ¸ÀÏ ½ÃÆ®¸¦ Àû¿ëÇÑ´Ù:

<link rel="stylesheet" href="css/myJspStyle.css" type="text/css">
...
<H1>Chapter 1</H1>
...
<H1>Chapter 2</H1>
...

ÄÄÆ÷Áþ ºä ÆÐÅÏ »ç¿ë Use of Composite View Patterns

¿©·¯ JSP ÆäÀÌÁö¿¡¼­ ¹Ýº¹µÇ´Â °íÁ¤µÇ°í º¹ÀâÇÑ ±¸Á¶°¡ ¿ä±¸µÉ ¶§, À̰ÍÀ» ´Ù·ç´Â ¹æ¹ýÀ¸·Î ÄÄÆ÷Áþ ºä ÆÐÅÏ(Composite View pattern;ÀÚ¹Ù Blueprints ÀÇ ÆÐÅÏ ¼½¼Ç Âü°í)À» »ç¿ëÇØ¼­, Á¶°¢Á¶°¢À¸·Î ³ª´²¼­ ó¸®ÇÏ´Â ¹ýÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î, ÇÁ¸®Á¨Å×ÀÌ¼Ç ±¸Á¶¿¡¼­ JSP ´Â ¶§¶§·Î ´ÙÀ½°ú °°Àº ·ÎÁ÷ ·¹À̾ƿôÀ» °®°í ÀÖ´Ù:

header
menu bar main body
footnote
footer

ÀÌ·± ¹æ½ÄÀ¸·Î, ÄÄÆ÷Áþ JSP ´Â °¢°¢ ºÐ¸®µÈ JSP·Î ±¸ÇöµÇ´Â ´Ù¸¥ ¸ðµâ·Î ³ª´· ¼ö ÀÖ´Ù. ±¸¼º¼ººÐÀÌ µÇ´Â JSP´Â ¼­ºí¸´À¸·Î º¯È¯ÇÒ ¶§³ª ¿äû½Ã¿¡ include JSP ű׸¦ »ç¿ëÇØ¼­ ÄÄÆ÷Áþ JSP ÀÇ Àû´çÇÑ À§Ä¡¿¡ ³õÀÌ°Ô µÈ´Ù. º¸ÆíÀûÀ¸·Î, µ¶¸³ÀûÀ¸·Î ¿äûµÇÁö ¾Ê´Â ÆäÀÌÁö¸¦ ºÒ·¯¾²´Â, Á¤ÀûÀÎ include Áö½ÃÀÚ¸¦ »ç¿ëÇÒ ¶§´Â .jspf È®ÀåÀÚ¸¦ »ç¿ëÇϰí, À¥ ¾îÇø®ÄÉÀÌ¼Ç (war)¿¡¼­ /WEB-INF/jspf/ µð·ºÅ丮¿¡ ³õ¾ÆµÑ °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù:

<%@ include file="/WEB-INF/jspf/header.jspf" %>
...
<%@ include file="/WEB-INF/jspf/menuBar.jspf" %>
...
<jsp:include page="<%= currentBody %>" />
...
<%@ include file="/WEB-INF/jspf/footnote.jspf" %>
...
<%@ include file="/WEB-INF/jspf/footer.jspf" %>
...

´Ù¸¥ Ãßõ»çÇ× Other Recommendations

ÀÌ ¹®¼­¿¡¼­, JSP ÄÚµå¿Í À¥ ÄÄÆ÷³ÍÆ®¸¦ ÀÛ¼ºÇϴµ¥ º¸´Ù À¯Áöº¸¼öÇϱ⠽±°í, ÀϰüµÈ Ãßõ ÄÚµå ÀÛ¼º¹ý ÇÑ ¼¼Æ®¸¦ Á¦½ÃÇß´Ù. ÀÌ ÁÖÁ¦¿¡ º¸´Ù ´õ °ü½ÉÀÖ´Ù¸é, ´õ ¸¹Àº ÃÖ°íÀÇ ÀÛ¼º¹ýÀÌ Á¸ÀçÇÑ´Ù. ¿¹¸¦ µé¾î, JSP 1.2 ½ºÆå¿¡¼­´Â ´ÙÀ½À» ÃßõÇÑ´Ù:

µ¡ºÙ¿©¼­, ÀÚ¹Ù BluePrints ´Â ´õ Å« ½ºÄÉÀÏ¿¡¼­ ÃÖ°íÀÇ ÀÛ¼º¹ýÀ» Á¦°øÇÑ´Ù. (ÆÐÅÏ ¼½¼Ç¿¡¼­ º¸¿©Áö´Â) ¸ðµ¨-ºä-ÄÁÆ®·Ñ·¯ ÆÐÅϰú °°Àº °ÍÀ» ¿¹·Î µé ¼ö ÀÖ´Ù.

¿ì¸®´Â ÀÌ ¹®¼­¿¡¼­ Á¦½ÃÇÑ ÀÛ¼º¿ä·É¿¡ ´ëÇÑ ¿©·¯ºÐÀÇ Àǰ߿¡ °ü½ÉÀÌ ÀÖ½À´Ï´Ù. JSP ÄÚµå ÀÛ¼º¿ä·É¿¡ ´ëÇØ¼­ ¿©·¯ºÐÀÇ ´Ù¸¥ ÀǰßÀÌ ÀÖ´Ù¸é ³ª´©¸é ÁÁ°Ú½À´Ï´Ù. Çǵå¹éÀº ¿©±â·Î º¸³»±â ¹Ù¶ø´Ï´Ù. jsp-codeconv-comments@sun.com.

¾Æ·¡¿¡, À§¿¡¼­ ¼³¸íÇÑ ÄÚµå ÀÛ¼º¿ä·ÉÀ» Àû¿ëÇØ ³õÀº ¿ÏÀüÇÑ À¥ ¾îÇø®ÄÉÀ̼ÇÀÇ ¼Ò½º¸¦ ¼Ò°³ÇÑ´Ù. ÀÌ ¾îÇø®ÄÉÀ̼ÇÀÇ WAR ÆÄÀÏÀ» ¿©±â ¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Ù.

ÄÚµå ¿¹Á¦ Code Examples

¿©±â¿¡ ÀÖ´Â À¥ ¾îÇø®ÄÉÀÌ¼Ç ¿¹Á¦´Â ÀÌ ¹®¼­¿¡ ÀÖ´Â ³»¿ëÀÌ ¾î¶»°Ô Àû¿ëµÇ´ÂÁö º¸¿©ÁÖ±â À§ÇÑ °ÍÀÌ´Ù. .war ÆÄÀÏ¿¡´Â ´ÙÀ½ÀÇ ¼Ò½ºÄÚµå ÆÄÀϰú µð·ºÅ丮 ±¸Á¶·Î µÇ¾î ÀÖ´Ù:

/index.jsp
/WEB-INF/classes/codeconv/GetResultsTag.class
/WEB-INF/jspf/footer.jspf
/WEB-INF/lib/jstl.jar
/WEB-INF/lib/standard.jar
/WEB-INF/tld/lotterylib.tld
/WEB-INF/web.xml

index.jsp ÆäÀÌÁö¿¡¼­´Â ¿À´Ã±îÁö Æ÷ÇÔµÈ À̹ø ´ÞÀÇ ¸ðÀÇ º¹±Ç Ãß÷°á°ú¸¦ º¸¿©ÁÖ´Â Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸®( lotterylib.tld )¸¦ »ç¿ëÇÑ´Ù. ±×¸®°í, HTML ¿¡ º¸¿©Áú °á°ú¸¦ Çü½ÄÈ­Çϰí, ¹Ýº¹Çϱâ À§Çؼ­ JSTLÀ» »ç¿ëÇÑ´Ù.

¿¹Á¦´Â JSP 1.2 °ú JSTL 1.0 À» »ç¿ëÇÑ´Ù.

/index.jsp ÆÄÀÏ ¼Ò½º

<%--
  - Author: Mark Roth
  - Date: January 17, 2003
  -
  - Copyright 2003 Sun Microsystems, Inc.  All Rights Reserved.
  -
  - This software is the proprietary information of
  - Sun Microsystems, Inc.
  - Use is subject to license terms.
  -
  - @(#)
  - Description: Renders fake lottery results for the current month.
  --%>

<%@ taglib prefix="c"
    uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="fmt"
    uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="lottery"
    uri="http://codeconv/lotterylib" %>

<html>
    <head>
        <title>Fake Lottery Results for this Month
        </title>
    </head>
    <body>
        <jsp:useBean id="now" class="java.util.Date" />
        <h1>
            Fake Lottery Results for
            <fmt:formatDate value="${now}"
                pattern="MMMM yyyy" />
        </h1>
        <hr />
        <table border="1" cellpadding="5">
            <%-- Store current month and year --%>
            <c:set var="currentMonth">
                <fmt:formatDate value="${now}" pattern="M" />
            </c:set>
            <c:set var="currentYear">
                <fmt:formatDate value="${now}"
                    pattern="yyyy" />
            </c:set>

            <%-- Determine last day to report results for --%>
            <c:set var="endDay">
                <fmt:formatDate value="${now}" pattern="d" />
            </c:set>

            <%-- Display one row for each day --%>
            <c:forEach var="day" begin="1" end="${endDay}">
                <%-- Construct date --%>
                <c:set var="dateString">
                    <c:out value="${currentMonth}/${day}/${
                        currentYear}" />
                </c:set>

                <fmt:parseDate  var="date"
				    value="${dateString}"
                        pattern="M/d/yyyy" />
                <jsp:useBean id="date" class="java.util.Date"
                    />

                <tr>
                    <td>
                        <c:out value="${dateString}" />
                    </td>
                    <%-- Retrieve and display fake results
                            for this day --%>
                    <lottery:getResults var="numbers"
                        date="<%= date %>" />
                    <c:forEach var="number" items="${numbers}">
                        <td>
                            <c:out value="${number}" />
                        </td>
                    </c:forEach>
                </tr>
            </c:forEach>
        </table>
        <%@ include file="/WEB-INF/jspf/footer.jspf" %>
    </body>
</html>

/WEB-INF/classes/codeconv/GetResultsTag.java ¼Ò½º

/*
 * codeconv.GetResultsTag
 *
 * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
 *
 * This software is the proprietary information of
 * Sun Microsystems, Inc.
 * Use is subject to license terms.
 *
 * Version: @(#)
 *
 * Date: January 13, 2003
 *
 */

package codeconv;

import java.util.Date;
import java.util.Random;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * Retrieves fake lottery results for the given date and
 * returns the result in the given attribute
 *
 * @version @(#)
 * @author Mark Roth
 */
public class GetResultsTag extends TagSupport {

    /** The maximum number that can be drawn */
    private static final int MAX_NUMBER = 58;

    /** The number of numbers that are drawn */
    private static final int NUMBER_COUNT = 6;

    /** The variable to store results to */
    private String var;

    /** The date on which the numbers were drawn */
    private Date date;

    /** The PageContext, used to return the result */
    private PageContext pageContext;

    /**
     * Remember the PageContext so it can be used later
     * to return the result.
     *
     * @param pageContext The page context of the calling page
     */
    public void setPageContext( PageContext pageContext ) {
        this.pageContext = pageContext;
    }

    /**
     * Returns fake lottery results for the given date.
     *
     * @return EVAL_PAGE so the rest of the page is evaluated.
     */
    public int doEndTag() throws JspException {
        // Generate the (fake) results.
        Random random = new Random( this.date.getTime() );
        int[] result = new int[NUMBER_COUNT];
        for( int i = 0; i < NUMBER_COUNT; i++ ) {
            result[i] = random.nextInt( MAX_NUMBER ) + 1;
        }

        // Place the result in the scoped attribute named by 'var'.
        pageContext.setAttribute( this.var, result );

        return EVAL_PAGE;
    }

    /**
     * Setter for date
     *
     * @param date The fake date on which the lottery numbers
     * were drawn
     */
    public void setDate( Date date ) {
        this.date = date;
    }

    /**
     * Getter for date
     *
     * @return The fake date on which the lottery numbers
     * were drawn
     */
    public Date getDate() {
        return this.date;
    }

    /**
     * Setter for var
     *
     * @param var The name of the variable to store the result in
     */
    public void setVar( String var ) {
        this.var = var;
    }

    /**
     * Getter for var
     *
     * @return The name of the variable to restore the result in
     */
    public String getVar() {
        return this.var;
    }
}

/WEB-INF/jspf/footer.jspf ¼Ò½º

<%--
  - Author: Mark Roth
  - Date: January 17, 2003
  -
  - Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
  -
  - This software is the proprietary information of
  - Sun Microsystems, Inc.
  - Use is subject to license terms.
  -
  - @(#)
  - Description: Sample Footer that can be included on pages.
  - Assumes JSTL fmt taglib is imported.
  --%>
<!-- common footer -->
<hr />
<jsp:useBean id="footerNow" class="java.util.Date" />
<i>
    Last Updated:
    <fmt:formatDate type="both" value="${footerNow}"
                    dateStyle="full" timeStyle="full" />
</i>

/WEB-INF/tld/lotterylib.tld ÆÄÀÏ ¼Ò½º

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<!--
  - Author: Mark Roth
  - Date: January 17, 2003
  -
  - Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
  -
  - This software is the proprietary information of
  - Sun Microsystems, Inc.
  - Use is subject to license terms.
  -
  - @(#)
  - Description: Tag Library for fake lottery results.
  -->

<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>lottery</short-name>
    <uri>http://codeconv/lotterylib</uri>
    <display-name>FakeLotteryTaglib</display-name>
    <description>
        Tag Library for fake lottery results.
    </description>

    <tag>
        <name>getResults</name>
        <tag-class>codeconv.GetResultsTag</tag-class>
        <body-content>empty</body-content>
        <display-name>getResults</display-name>
        <description>
            Retrieve an array of fake lottery results for the given
            date and store them in the given scoped attribute.
        </description>
        <variable>
            <name-from-attribute>var
                </name-from-attribute>
            <declare>true</declare>
            <description>
                The fake lottery results for the given date.
            </description>
        </variable>
        <attribute>
            <name>var</name>
            <required>true</required>
            <description>
                The name of the variable to store the results in.
            </description>
        </attribute>
        <attribute>
            <name>date</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.util.Date</type>
            <description>
                The date on which the fake lottery numbers
                    were drawn.
            </description>
        </attribute>
        <example><![CDATA[
            <lottery:getResults var="numbers"
                date="${date}" />
        ]]></example>
    </tag>
</taglib>

/WEB-INF/web.xml ¼Ò½º

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<!--
  - Author: Mark Roth
  - Date: January 17, 2003
  -
  - Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
  -
  - This software is the proprietary information of
  - Sun Microsystems, Inc.
  - Use is subject to license terms.
  -
  - @(#)
  - Description: Web Deployment Descriptor for JSP 1.2 fake
  - lottery example
  -->

<web-app>
    <display-name>FakeLotteryExample</display-name>
    <description>
        JSP 1.2 example application that illustrates correct JSP
        coding style.
    </description>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <taglib>
        <taglib-uri>http://codeconv/lotterylib</taglib-uri>
        <taglib-location>/WEB-INF/tld/lotterylib.tld
            </taglib-location>
    </taglib>
</web-app>

°¨»çÀÇ ¸» Acknowledgments

ÀÌ ¹®¼­ÀÇ ÀÌÀü µå·¡ÇÁÆ®¿¡ ¼ÒÁßÇÑ Á¶¾ðÀ» Á¦°øÇØ ÁֽŠGregory Murray (Java BluePrints Team), Damian Fauth (Sun Java Center), Kate Morris (Sun Java Center) ´Ôµé²² °¨»çµå¸³´Ï´Ù.

References

  1. Code Conventions for the Java Programming Language.
  2. JSP best practices.
  3. Hans's Top Ten JSP Tips.
  4. JavaServer Pages Specification version 1.2.
  5. Alur D., Crupi J., Malks D., Core J2EE Patterns: Best Practices and Design Strategies, Sun Microsystems Press, Prentice Hall Inc., 2001.
  6. Naming Conventions for Enterprise Applications.
  7. JavaServer Pages Standard Tag Library.
  8. Gamma E., Helm R., Johnson R., Vlissides J., Design Patterns: Elements of Reusable Software, Addison-Wesley, 1995.
  9. JavaServerTM Faces Technology.
  10. Java BluePrints.
  11. Designing Enterprise Applications with the J2EETM Platform, 2nd ed..