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

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

¿ø¹® : http://www.onjava.com/pub/a/onjava/2004/04/21/JSP2part3.html

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

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

2004/04/21

´õ¿í À¯¿¬ÇØÁø JSP ¹®¼­ Æ÷¸Ë ±ÔÄ¢

JSP ½ºÆåÀº µÎ °¡Áö ÇüÅÂÀÇ JSP ÆäÀÌÁö¸¦ Áö¿øÇÑ´Ù. ¾î¶² ÇüÅÂÀÇ ÅؽºÆ®³ª ¸¶Å©¾÷ÀÌ¶óµµ Æ÷ÇÔÇÏ´Â ÀÏ¹Ý JSP ÆäÀÌÁö¿Í XHTMLÀ̳ª JSP ¿¤¸®¸ÕÆ®¿Í °°Àº À£Æûµå(Well-formed) XML ÀÎ JSP ¹®¼­(Document)ÀÌ´Ù. À£Æûµå XML ¹®¼­°¡µÇ·Á¸é JSP Áö½ÃÀÚ¿Í ½ºÅ©¸³Æ® ¿ä¼ÒµéÀÌ ÀÏ¹Ý JSP¿Í´Â ´Ù¸¥ ¹æ½ÄÀ¸·Î ±â¼úµÇ¾î¾ß ÇÑ´Ù.

ÀÏ¹Ý JSP ÆäÀÌÁö JSP ¹®¼­
<%@ page ¼Ó¼º¸ñ·Ï %> <jsp:directive.page ¼Ó¼º¸ñ·Ï />
<%@ include file="path"%> <jsp:directive.include file="path" />
<%! ¼±¾ð %> <jsp:declaration>¼±¾ð </jsp:declaration>
<%= ¼ö½Ä %> <jsp:expression>¼ö½Ä</jsp>
<% ½ºÅ©¸³Æ²¸´ %> <jsp:scriptlet>½ºÅ©¸³Æ²¸´</jsp:scriplet>

ÅÂ±× ¶óÀ̺귯¸®´Â JSP ¹®¼­¿¡¼­ XML ³×ÀÓ½ºÆäÀ̽º·Î ¼±¾ðµÈ´Ù. ¿¹¸¦µé¾î XHTML°ú JSP Ç¥ÁØ ¾×¼Ç ±×¸®°í JSTL ÄÚ¾î ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â JSP ¹®¼­´Â <html> ·çÆ® ¿¤¸®¸ÓÆ°¿¡ ´ÙÀ½°ú °°Àº ³×ÀÓ ½ºÆäÀ̽º ¼±¾ðÀ» °¡Á®¾ß ÇÑ´Ù.

<html
    xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xml:lang="en" lang="en">

xmlns ¼Ó¼ºÀº ±âº» ³×ÀÓ½ºÆäÀ̽º¸¦ XHTMLÀÇ ³×ÀÓ½ºÆäÀ̽º·Î ¼³Á¤ÇÑ´Ù. xmlns:jsp ¼Ó¼ºÀº JSP Ç¥ÁØ ¾×¼Ç¿¡ Á¤ÀÇµÈ jsp Á¢µÎ»ç¿¡ °üÇÑ °ÍÀÌ°í, xmlns:c ¼Ó¼ºÀº JSTL Core ¶óÀ̺귯¸®¿¡ ÀÇÇØ Á¤ÀÇµÈ c Á¢µÎ»ç¿¡ °üÇÑ °ÍÀÌ´Ù.

JSP ¹®¼­´Â óÀ½ºÎÅÍ JSP ¸í¼¼ÀÇ ÇÑ ºÎºÐÀ̾úÀ¸³ª Ãʱ⿡´Â ¼±ÅûçÇ×ÀÏ »ÓÀ̾ú°í ³ªÁß¿¡µµ ¸¹Àº Á¦¾àÀ» °®°í ÀÖ¾ú´Ù. JSP 2.0 Àº ´ëºÎºÐÀÇ Á¦¾àÀ» ¾ø¾Ö°í, ¸Å¿ì ½±°Ô XML°ú JSP¸¦ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ°Ô Çß´Ù.

JSP 2.0 ÀÌÀü¿¡´Â JSP ¹®¼­´Â <jsp:root>¿ä¼Ò¸¦ ²À Æ÷ÇÔÇÏ¿© JSP ÄÁÅ×À̳ʿ¡°Ô ÀÌ°ÍÀÌ JSP ÆäÀÌÁöÀÓÀ» ¾Ë·ÁÁÖ¾î¾ß¸¸ Çß´Ù. JSP 2.0Àº JSP ¹®¼­ÀÓÀ» ¾Ë·ÁÁÖ´Â ´Ù¸¥ ¹æ¹ýÀ» Á¤ÀÇÇÏ¿© ÀÌ Á¦ÇÑÀ» ¾ø¾Ý´Ù. ´ÙÀ½ Á¶°Çµé Áß ÇÑ °¡Áö¸¸ ¸¸Á·Çϸé JSP ÄÁÅ×À̳ʴ ÆÄÀÏÀ» JSP ¹®¼­·Î¼­ ó¸®ÇÑ´Ù :

  1. ¿äûµÈ °æ·Î°¡ web.xml ÆÄÀÏ¿¡¼­ JSP ¼Ó¼º ±×·ìÀÇ ¼±¾ð¿¡ <is-xml> ¿ä¼Ò¸¦ true·Î ÇÏ¿© Á¤ÀÇµÈ URL ÆÐÅÏ°ú ÀÏÄ¡ÇÏ¸é µÈ´Ù. Part 2 ¿¡¼­ JSP ¼Ó¼º ±×·ìÀÇ ¼±¾ð¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ »çÇ×À» º¼ ¼ö ÀÖ´Ù.
  2. ¿äûµÈ °æ·ÎÀÇ È®ÀåÀÚ°¡ .jspxÀÌ°í, ÀÌ È®ÀåÀÚ°¡ JSP ¼Ó¼º ±×·ì ¼±¾ð¿¡¼­ <is-xml> ¿ä¼Ò¸¦ false·Î ÁöÁ¤ÇÏÁö ¾Ê¾Ò´Ù¸é JSP ¹®¼­·Î ÀνÄÇÑ´Ù. ´Ù½Ã ¸»ÇØ .jspx´Â JSP ¹®¼­ÀÇ ±âº» È®ÀåÀÚÀÌ´Ù. ÇÏÁö¸¸ ¼Ó¼º ±×·ì ¼±¾ð¿¡ ÀÇÇØ ¸í½ÃÀûÀ¸·Î ´Ù¸¥ ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
  3. ¿äûµÈ °æ·ÎÀÇ È®ÀåÀÚ°¡ .jspÀ̰ųª ȤÀº JSP ¼Ó¼º ±×·ì ¼±¾ðÀÇ URL ÆÐÅÏ¿¡ ÀÏÄ¡ÇÏ°í ÃÖ»óÀ§ ¿ä¼Ò(root element)°¡ <jsp:root>À̸é JSP ¹®¼­·Î °£ÁÖÇÑ´Ù.

ÀÌ »õ·ÎÀ± ±ÔÄ¢¿¡ ÀÇÇØ JSP ¹®¼­¸¦ <jsp:root> ¿ä¼Ò°¡ ÇÊ¿ä ¾ø´Â ÀÏ¹Ý XHTML ÆÄÀÏó·³(¹°·Ð µ¿Àû ÄÁÅÙÆ®¸¦ À§Çؼ­ JSP ¿ä¼Ò¸¦ Æ÷ÇÔÇϸ鼭) ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. JSP ¼Ó¼º ±×·ì ¼±¾ðÀ» ´ÙÀ½°ú °°ÀÌ Çϸé È®ÀåÀÚ°¡ .htmlÀÎ JSP ¹®¼­µµ °¡´ÉÇÏ´Ù :

...
<jsp-config>
  <jsp-property-group>
    <url-pattern>*.html</url-pattern>
    <is-xml>true</is-xml>
  </jsp-property-group>
</jsp-config>
...

XML ¿ä¼Ò¸¦ »ý¼ºÇÏ´Â »õ·Î¿î ¹æ½Ä

JSP 1.2 ¸í¼¼¿¡ µû¶ó JSP ¹®¼­¸¦ ÀÛ¼ºÇغ¸¾Ò´Ù¸é, °ÅÀÇ ´ëºÎºÐ XML ¿ä¼ÒÀÇ ¼Ó¼º¿¡ µ¿ÀûÀ¸·Î °ªÀ» ´ëÀÔÇÒ¶§ ¹®Á¦°¡ ÀÖÀ½À» ¹ß°ßÇßÀ» °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, XML ¿ä¼ÒÀÇ class ¼Ó¼º¿¡ »ç¿ëÀÚÀÇ ½ºÅ¸ÀÏ ¼³Á¤À» °¡Áö°í ÀÖ´Â ºó(bean) ÇÁ¶óÆÛƼ °ªÀ» ´ëÀÔÇÑ´Ù°í ÇÏÀÚ. ´ç½ÅÀº ¾Æ¸¶ ´ÙÀ½°ú °°Àº ½Ãµµ¸¦ ¸ÕÀú Çغ¼ °ÍÀÌ´Ù :

<table class="<%= user.getTableClass() %>">

JSP ¹®¼­¿¡¼­ ÀÌ·± ÇüÅÂÀÇ ÀÚ¹Ù ¼ö½ÄÀÌ JSP ¾×¼Ç ¿ä¼ÒÀÇ ¼Ó¼º °ªÀ¸·Î »ç¿ëµÉ ¼öµµ ÀÖÀ¸³ª, JSP´Â ÅÛÇø´ ÅؽºÆ®¿¡¼­´Â ÀÌ·¯ÇÑ ¹®¹ýÀ» ÀÎÁ¤ÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î ¿©±â¼­¿Í °°Àº ¹æ¹ýÀº ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.

JSP ¾×¼Ç ¿ä¼Ò¸¦ »ç¿ëÇÏ¿© ¼Ó¼º°ªÀ» Á¤ÇÏ·Á´Â ½Ãµµ ¶ÇÇÑ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù:

<table class="<c:out value="${user.tableClass}"/>">

ÀÌ°ÍÀº ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. À£Æûµå XMLÀº ¿ä¼ÒÀÇ ¼Ó¼º°ªÀ¸·Î º¸´Ù ÀÛ´Ù ±âÈ£(<)¸¦ Æ÷ÇÔÇÒ ¼ö ¾ø´Ù.

JSP 1.2¿¡¼­ À£Æûµå XMLÀ» ÁؼöÇϸ鼭 µ¿ÀûÀ¸·Î XML ¿ä¼ÒÀÇ ¼Ó¼º°ªÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº ¸Å¿ì º¸±â ¾ÈÁÁÀº CDATA ¼½¼ÇÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº XML ¿ä¼ÒÀÇ Ã³À½°ú ³¡À» ¸¶Å©¾÷ÀÌ ¾Æ´Ñ ÀÏ¹Ý ÅؽºÆ®(µ¿ÀûÀ¸·Î »ý¼ºµÈ °ªÀ¸·Î µÑ·¯ ½×ÀÎ)·Î °£ÁÖÇÑ´Ù :

<jsp:text><!CDATA[<table class="]]></jsp:text>
<c:out value="${user.tableClass}""/>
<jsp:text>[CDATA[">]]</jsp:text>

JSP 2.0Àº ¸Å¿ì °£´ÜÇÑ ÇØ°áÃ¥À» Á¦½ÃÇØ ÁØ´Ù. ÅÛÇø´ ÅؽºÆ® Áß°£¿¡ EL Ç¥Çö½ÄÀ» »ç¿ëÇϰųª ¿ä¼Ò¸¦ »ý¼ºÇÏ´Â »õ·Î¿î Ç¥ÁØ ¾×¼ÇÀ» »ç¿ëÇÏ¸é µÈ´Ù. EL Ç¥Çö½ÄÀ¸·Î ¿¹Á¦¸¦ ¹Ù²ã ¾²¸é ´ÙÀ½°ú °°´Ù:

<table class="${user.tableClass}">

JSP 2.0 ÄÁÅ×À̳ʴ ¾×¼ÇÀÇ ¼Ó¼ºÀº ¹°·Ð ÅÛÇø´ ÅؽºÆ® »çÀÌÀÇ EL Ç¥Çö½ÄÀ» Æò°¡(°è»ê)ÇÑ´Ù. ±×·¯¹Ç·Î °ÅÀÇ ¸ðµç °æ¿ì¿¡ ÀÌ°ÍÀÌ °¡Àå ÈǸ¢ÇÑ ÇØ°áÃ¥ÀÌ µÈ´Ù.

EL Ç¥Çö½ÄÀ¸·Î ´ëÀÔÇÏ°íÀÚ ÇÏ´Â °ªÀ» Æò°¡ÇÒ ¼ö ¾ø´Ù¸é, ±× ´ë½Å¿¡ 3°³ÀÇ »õ·Î¿î Ç¥ÁØ ¾×¼Ç°ú ¼Ó¼º°ªÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â ¾Æ¹« JSP Äڵ峪 ÇÔ²² ÀÌ¿ëÇÏ¿© µ¿ÀûÀ¸·Î XML ¿ä¼Ò¸¦ ¸¸µé¾î³¾ ¼ö ÀÖ´Ù:

<jsp:element name="table">
  <jsp:attribute name="class">
    <c:out value="${user.tableClass}"/>
  </jsp:attribute>
  <jsp:body>
   ....
  </jsp:body>
</jsp:element>

<jsp:element> ¾×¼ÇÀº XML ¿ä¼Ò¸¦ ¸¸µé°í °Å±â Æ÷ÇÔµÈ <jsp:attribute> ¿ä¼Ò´Â ¿ä¼ÒÀÇ ¼Ó¼ºÀ» ¸¸µç´Ù. ¼Ó¼ºÀÇ °ªÀº <jsp:attribute>ÀÇ ¹ÙµðÀÇ Æò°¡ °á°ú·Î ¼³Á¤µÈ´Ù. ±×·¯¹Ç·Î ÀÌ ¿¹¿¡¼­ »ç¿ëÇÑ <c:out>À» ¾´ °Í ó·³ ¿ä¼Ò °ªÀ» »ý¼ºÇÏ´Â »ç¿ëÀÚ Á¤ÀÇ ¾×¼ÇÀ» »ç¿ëÇÏ¿©µµ µÈ´Ù. À¯»çÇÏ°Ô <jsp:body> ¿ä¼Ò¿¡ Æ÷ÇÔµÈ °ªÀ» Æò°¡ÇÏ¿© »ý¼ºµÉ ¿ä¼ÒÀÇ °ªÀ¸·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

XML ¼±¾ðÀ» À§ÇÑ »õ·Î¿î Ç¥ÁØ ¾×¼Ç

XML ¹®¼­´Â ¹®¼­ÀÇ ¸Ç À§¿¡ XML ¼±¾ðÀ» °¡Áú ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ±× µÚ¿¡ DOCTYPE ¼±¾ðÀÌ µÚµû¸¥´Ù. JSP 2.0 ¿¡¼­´Â <jsp:output> Ç¥ÁØ ¾×¼ÇÀ» ÀÌ¿ëÇÏ¿© ÀÌ µÎ°¡Áö ¼±¾ðÀÇ »ý¼ºÀ» Á¶ÀýÇÒ ¼ö ÀÖ´Ù.

JSP ¹®¼­°¡ ÃÖ»óÀ§ ¿ä¼Ò·Î <jsp:root> ¿ä¼Ò¸¦ °¡Áö°í ÀÖÁö ¾ÊÀº ÀÌ»ó(ȤÀº ÀÌ ½Ã¸®ÁîÀÇ ´ÙÀ½ ±â»ç¿¡¼­ ´Ù·ê tag ÆÄÀÏÀ» ³ªÅ¸³»°Å³ª), JSP ÄÁÅ×À̳ʴ ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°Àº XML ¼±¾ðÀ» »ý¼ºÇÑ´Ù:

<? xml version="1.0" encoding="encodingValue" ?>

encoding ¼Ó¼ºÀÇ °ªÀº JSP page Áö½ÃÀÚÀÇ contentType ¼Ó¼º¿¡ ÀÇÇØ ÁöÁ¤µÈ ¹®ÀÚ ÀÎÄÚµùÀÌ µÇ°Å³ª ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÏÁö ¾Ê¾ÒÀ» °æ¿ì¿¡´Â UTF-8ÀÌ µÈ´Ù. XML ¼±¾ðÀÌ »ý¼ºµÇ´Â °ÍÀ» ¸·°í ½ÍÀ» ¶§(¾Æ¸¶µµ JSP ¹®¼­°¡ ´Ù¸¥ JSP ÆäÀÌÁö¿¡ Æ÷Ç﵃ °æ¿ì¿¡), JSP ¹®¼­¿¡¼­ <jsp:output> ¾×¼Ç ¿ä¼Ò¸¦ »ç¿ëÇØ JSP ÄÁÅ×À̳ʸ¦ ¼³µæÇÒ ¼ö ÀÖ´Ù :

<jsp:output omit-xml-declaration="true" />

¼±¾ð »ý¼ºÀ» ¸·±â À§ÇØ ¼Ó¼ºÀÇ °ªÀ» 'true'³ª 'yes'·Î ÁöÁ¤ÇÏ°í, ±×·¸Áö ¾Ê´Ù¸é 'false'³ª 'no'¸¦ »ç¿ëÇÑ´Ù.

DOCTYPE ¼±¾ðÀº XML Æļ­(ºê¶ó¿ìÀú¿¡¼­ »ç¿ëµÇ´Â °Í°ú °°Àº)¿¡°Ô ÀÌ ¹®¼­°¡ ¾î¶² Document Type Declaration(DTD)¸¦ µû¸£´ÂÁö¸¦ ¾Ë·ÁÁØ´Ù. Æļ­´Â ÀÌ Á¤º¸¸¦ ÀÌ¿ëÇؼ­ ¿ÀÁ÷ DTD¿¡ ÀÇÇØ ¼±¾ðµÈ XML ¿ä¼Ò¸¸À» Æ÷ÇÔÇÏ°í ÀÖ´Â ¹®¼­ÀÎÁö¸¦ °Ë»çÇÑ´Ù. JSP ¹®¼­¿¡ ÀÇÇØ »ý¼ºµÉ ¹®¼­¿¡ ´ëÇÑ DOCTYPE ¼±¾ðÀ» ³Ö¾î¼­´Â ¾ÈµÈ´Ù. ±×·¸°Ô Çϸé JSP ¹®¼­ ÀÚ½ÅÀÌ ±× DTD¿¡ µû¸¥´Ù°í ÁöÁ¤ÇÏ´Â °ÍÀÌ µÇ¾î¹ö¸°´Ù. ´ë½Å <jsp:output> ¾×¼ÇÀ» »ç¿ëÇÏ¿© JSP ¹®¼­¿¡ ÀÇÇØ »ý¼ºµÉ °á°ú ¹®¼­ÀÇ DTD ¼±¾ðÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù :

<jsp:output doctype-root-element="html"
  doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
  doctype-system="http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<jsp:directive.page contentType="text/html" />

ÀÌ ¿¹¿¡¼­¿Í °°ÀÌ »ç¿ëÇϸé <jsp:output> ¾×¼ÇÀº °á°ú·Î XHTMLÀ» À§ÇÑ DOCTYPE ¼±¾ðÀ» Ãß°¡ÇÑ´Ù :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

³ª´Â ¶ÇÇÑ ÀÌ ¿¹Á¦¿¡¼­ ºê¶ó¿ìÀú°¡ °á°ú ÄÁÅÙÆ®¸¦ ¾î¶»°Ô ´Ù·ï¾ß ÇÒÁö¸¦ ÆÇ´ÜÇÏ°Ô Çϱâ À§ÇØ, <jsp:directive.page> ¼±¾ð¿¡ contentType ¼Ó¼ºÀ» text/html MIME ŸÀÓÀ¸·Î ÁöÁ¤ÇÏ¿© Æ÷ÇÔ½ÃÄ×´Ù. Âü°í·Î XHTML¿¡ ¸Â´Â Á¤È®ÇÑ MIME ŸÀÔÀº application/xhtml+xmlÀε¥, ¸î¸î ÃֽŠºê¶ó¿ìÀú(ƯÈ÷ Internet Explorer 6)Àº ±×°ÍÀ» ÀνÄÇÏÁö ¸øÇÑ´Ù. text/htmlÀº ´ëºÎºÐÀÇ ºê¶ó¿ìÀúµéÀÌ ¾î¶»°Ô ´Ù·ï¾ß ÇÒÁö¸¦ ¾Æ´Â XHTMLÀ» À§ÇÑ MIME ŸÀÔÀ¸·Î Åë¿ëµÈ´Ù.

¸¶¹«¸®

Áö±Ý±îÁö º¸¾ÒµíÀÌ JSP 2.0Àº ¸Å¿ì ½±°Ô JSP ÆäÀÌÁö¸¦ XML ¹®¼­·Î ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ÀÌ ½Ã¸®ÁîÀÇ ¸¶Áö¸· ÆíÀº Ä¿½ºÅÒ ÅÂ±× ¶óÀ̺귯¸®¿¡ °üÇÑ »õ·Î¿î Ư¡µéÀ» ¾Ë¾Æº¼ °ÍÀÌ´Ù : »õ·Î¿î ÅÂ±× ÆÄÀÏ Çü½Ä°ú °£´ÜÇÑ ÅÂ±× API.

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