<?xml version="1.0" encoding="euc-kr" ?>
<?xml-stylesheet type="text/xsl" href="../okjsplec_c.xsl" ?>
<lecture>
	<title>JSP Tag Library</title>
	<who>kenu</who>
	<when>2001-08-27 2:04¿ÀÀü</when>
	<what>
		<text>
		JSP Tag Library ¶õ custom tag ¸¦ ¸¸µé¾î¼­ »ç¿ëÇÏ´Â JSP ÀÇ °í±Þ±â¼úÀÌ¶ó°í ÇÒ ¼ö ÀÖ´Â °Í ÁßÀÇ ÇÏ³ªÀÔ´Ï´Ù. Bean º¸´Ù ÁøÀÏº¸µÈ °³³äÀ¸·Î MVC(Model View Control) À» ¿Ïº®ÇÏ°Ô ±¸ÇöÇØÁÝ´Ï´Ù.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		&lt;% %> ¸¦ »ç¿ëÇÏÁö ¾Ê°íµµ µ¿ÀûÀÎ Ç¥ÇöÀ» °¡´ÉÇÏ°Ô ÇÏ¹Ç·Î ¼Ò½ºÄÚµå¿¡ ´ëÇØ¼­ µðÀÚÀÌ³Ê°¡ º¸´Ù ½±°Ô Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. (^^ ¾ÆÁ÷ Àúµµ ½Ç¹«¿¡ Àû¿ëÇØº¸Áø ¾Ê¾Ò½À´Ï´Ù.)
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		¾ÆÁ÷ Àúµµ ½Ç·ÂÀÌ ¹ÌÃµÇÑ °ü°è·Î, Ã¥º¸°í °øºÎÇÑ °ÍÀ» Á¤¸® °â ÇØ¼­ ½äÀ» Ç®¾îº¸°Ú½À´Ï´Ù. »ç½Ç ¼Ò½º ¼³¸íº¸´Ù´Â ÆÄÀÏ À§Ä¡¸¸ ¾Ë·ÁÁÖ´Â Á¤µµÀÏ °ÍÀÌ´Ï ³Ê¹« ±â´ë´Â ÇÏÁö¸¶¼¼¿ä.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		ÀÏ´Ü jsp tag library ¸¦ »ç¿ëÇÏ½Ã·Á¸é jsp ¿£ÁøÀÌ jsp spec 1.1 ÀÌ»óÀÌ¾î¾ß ÇÕ´Ï´Ù. jsp 1.0 Àº tag library ¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °­ÁÂ¸¦ Å×½ºÆ®ÇÑ jsp ¿£ÁøÀº Tomcat 3.2.3 ÀÔ´Ï´Ù.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		±âÃÊÀûÀÎ ´Ü°è·Î tag ¸¦ ÀÌ¿ëÇØ¼­ ´Ü¼øÈ÷ text ¸¦ Ãâ·ÂÇÏ´Â °ÍÀ» ½ÃµµÇØº¸°Ú½À´Ï´Ù. ¼Ò½ºÀÇ ÃâÃ³´Â ManningÃâÆÇ»ç¿¡¼­ ³ª¿Â JSP Tag Libraries Ã¥ chapter3 ÀÔ´Ï´Ù. Á¦°¡ °æ·Î¶û text¸¦ ¾à°£ ¼öÁ¤ÇÑ °ÍÀÔ´Ï´Ù.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>ÀÏ´Ü tag handler class ´Â java ÆÄÀÏÀÎµ¥, javax.servlet.jsp.* À» import ÇÏ±â ¶§¹®¿¡ servlet.jar ÆÄÀÏÀÌ classpath ¿¡ ÀâÇôÀÖ¾î¾ß ÇÕ´Ï´Ù. resin ÀÏ °æ¿ì jsdk22.jar ³ª jsdk23.jar ÆÄÀÏÀÌ »óÀÀÇÕ´Ï´Ù. jakarta-tomcat/lib/ µð·ºÅä¸®¿¡ ÀÖ´Â servlet.jar ÆÄÀÏÀ» ´ÙÀ½ À§Ä¡·Î º¹»çÇØÁÝ´Ï´Ù. ±ÇÀåÀº ½Ã½ºÅÛ ÀçºÎÆÃÀÔ´Ï´Ù. ¾ÈÇØµµ ¸ÔÈ÷´Â °æ¿ì°¡ ÀÖÁö¸¸, ^^; ¾îµð±îÁö³ª ±ÇÀåÀÔ´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀº È¯°æº¯¼ö(classpath)¿¡ Ãß°¡ÇØµµ µÇ°ÚÁö¸¸ Àü ÀÌ ¹æ¹ýÀ» ´õ ¼±È£ÇÕ´Ï´Ù. ÆíÇÏ´Ï±î¿ä.
		¾î´À À§Ä¡³Ä ÇÏ¸é jdk1.3/jre/lib/ext ¾Æ·¡ÀÔ´Ï´Ù.
		</text>
		<image>classpath01.gif
		</image>
	</what>
	<what>
		<text>
		tag handler class ÀÎ OkTag.java ÆÄÀÏÀÔ´Ï´Ù. tag ¸¦ Ã³¸®(handle)ÇØÁÖ´Â °ÍÀÌÁÒ. ÆÄÀÏÀÇ À§Ä¡´Â package ¿Í °ü°èÀÖ½À´Ï´Ù. ¹°·Ð classpath ¿¡ ÀÚ½ÅÀÌ ÀÖÀ¸½Å ºÐµéÀº ÀÚÀ¯·Ó°Ô À§Ä¡½ÃÄÑÁÖ¼¼¿ä. ¾Æ´Ñ ºÐµéÀº Àý µû¶ó¿À½Ã±¸¿ä. ÀÏ´Ü ROOT µð·ºÅä¸®°¡ c:/jakarta-tomcat/webapps/ROOT ¶ó°í °¡Á¤ÇÏ°í ÀÌ°ÍÀº / ·Î Ç¥½Ã¸¦ ÇÏ°Ú½À´Ï´Ù. /WEB-INF ´Â c:/jakarta-tomcat/webapps/ROOT/WEB-INF ¿Í °°Àº ¶æÀÔ´Ï´Ù. (^^; »ç½Ç °æ·Î ºÎºÐ ¼³¸íÇÏ±â°¡ Á¦ÀÏ Èûµì´Ï´Ù.)
		ÀÌ ¼Ò½º¸¦ /WEB-INF/classes/ok/tag/OkTag.java À§Ä¡¿¡ ÀúÀåÇÕ´Ï´Ù. 

		<¼Ò½º ÆÄÀÏ¸í="OkTag.java">package ok.tag;

import java.io.IOException;

import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.TagSupport;

public class OkTag
	extends TagSupport {
	
    public int doStartTag()
		throws JspException
    {
        try {
            pageContext.getOut().print("OKJSP ÅÂ±×¶óÀÌºê·¯¸®");
        } catch(IOException ioe) {
          throw new JspTagException("Error:  IOException while writing to the user");
        }
        return SKIP_BODY;
    }
}
		</¼Ò½º>
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		¾ÆÁÖ °¡Àå ±âº»ÀûÀÎ tag handler ÀÔ´Ï´Ù. ÀÌ »À´ë¸¦ °®°í Á¡ÁøÀûÀ¸·Î È®ÀåÀ» ÇÏ¸é¼­ ÄÚµùÀ» ÇÏ°Ô µÇÁÒ. ±âÃÊ¶ó´Â ¾ê±â´Â ¾ÆÁÖ ½±´Ù¶õ ¶æµµ ÀÖÁö¸¸, ¾ø¾î¼­´Â ¾ÈµÈ´Ù´Â ¶æµµ °®°í ÀÖ½À´Ï´Ù. ÄÚµå ÇÏ³ª ÇÏ³ª¸¦ ´«¿©°Ü º¸½Ã¸é µË´Ï´Ù. ¹¹ ±»ÀÌ ¿Ü¿ï ÇÊ¿ä±îÁö´Â... ¿Ö³ÄÇÏ¸é 3¹øÀÌ»ó ¹Ýº¹ÇÏ¸é ÀúÀý·Î ¿Ü¿öÁö°Ô µË´Ï´Ù.(*_*; ÃµÀç³Ä±¸¿ä? ¿½ Àú´Â ÃµÀç, ÆÜ# Å©Çä#$%#$,~ T_T; ÀÚ²Ù »ç¿ëÇÏ¸é ÀúÀý·Î ¿Ü¿öÁø´Ù´Â ¶æÀÓ´Ù. ±×°Ô ¿Í¶¡´Ï´Ù.)
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		ÄÄÆÄÀÏÀº µµ½ºÃ¢(cmd Ã¢) ¶ç¿ì°í cd c:/jakarta-tomcat/webapps/WEB-INF/classes/ok/tag ·Î °¡¼­, javac OkTag.java ÇÏ½Ã¸é µË´Ï´Ù.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		´ÙÀ½¿¡ ÇÊ¿äÇÑ ÆÄÀÏÀº tld(Tag Library Descriptor) ¼³¸íÆÄÀÏÀÔ´Ï´Ù. tag handler fileÀÇ À§Ä¡¿Í ÇÊ¿äÇÑ ¼Ó¼ºµéÀ» ¼³¸íÇØÁÖ´Â ÆÄÀÏÀÌÁÒ. jsp ¿£ÁøÀ¸·Î ÇÏ¿©±Ý tag handler ¸¦ »¡¸® ÀÎ½ÄÇÏµµ·Ï ÇØÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÆÄÀÏÀÔ´Ï´Ù. ¼Ò½ºÀÇ ¹®¹ýÀº xml ÀÔ´Ï´Ù. ¾î~ Àú±â °¡Áö¸¶¼¼¿ä. xml º°·Î ¾î·Á¿î °Å ¾Æ´Ï´Ï±î¿ä. ¾ÆÁÖ ±âº»ÀûÀÎ xml ±ÔÄ¢¸¸ ¾Ë°í ÀÖÀ¸¸é µË´Ï´Ù. ±×°Å º°°Å ¾ø½¿´Ù. 20ÁÙµµ ¾ÈµÊ´Ù. °íÀú ¿ì¸® ¿¬º¯¿¡¼­´Â 20ÁÙÂ¥¸® tld´Â tld Ãà¿¡µµ ¸ø³§´Ï´Ù. 100ÁÙÂ¥¸® Á¤µµ µÇ¾ß Á» ¾µ¸¸ÇÑ tld ±¸³ª¶ó°í »ý°¢ÇÕ´Ï´Ù. 10000ÁÙÂ¥¸® tld ÆÄÀÏ º¸¼Ì½¿´Ï±î. ÆÜ#@#$#!@ (^^; ÁË¼ÛÇÕ´Ï´Ù. ¼ö´Ù¸ÇÀÌ ¿äÁò ³Ê¹« ÁÁ¾Æ¼­¸®... Á» µû¶óÇØºÃ½À´Ï´Ù.)
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		<¼Ò½º ÆÄÀÏ¸í="oktags.tld">&lt;?xml version="1.0" encoding="ISO-8859-1" ?>
&lt;!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.suncom/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

&lt;taglib>
  &lt;tlibversion>1.0&lt;/tlibversion>
  &lt;jspversion>1.1&lt;/jspversion>
  &lt;shortname>oktg&lt;/shortname>
  &lt;uri> http://www.okjsp.pe.kr/ok-taglib &lt;/uri>
  &lt;info>
      A simple sample tag library
  &lt;/info>
  
  &lt;tag>
    &lt;name>oktag&lt;/name>
    &lt;tagclass>ok.tag.OkTag&lt;/tagclass>
    &lt;bodycontent>empty&lt;/bodycontent>
    &lt;info>
      Just Beginning.
    &lt;/info>
  &lt;/tag>
&lt;/taglib></¼Ò½º>
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		´ÙÀ½¿¡ ÇÊ¿äÇÑ ÆÄÀÏÀº tld(Tag Library Descriptor) ¼³¸íÆÄÀÏÀÔ´Ï´Ù. tag handler fileÀÇ À§Ä¡¿Í ÇÊ¿äÇÑ ¼Ó¼ºµéÀ» ¼³¸íÇØÁÖ´Â ÆÄÀÏÀÌÁÒ. ¶ÇÇÑ jsp ¼Ò½º¿¡¼­ »ç¿ëµÇ´Â ÀÌ¸§À» ÁöÁ¤ÇØÁÝ´Ï´Ù. oktag ¶ó´Â tag¸¦ »ç¿ëÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ¼Ò½ºÀÇ ¹®¹ýÀº xml ÀÔ´Ï´Ù. ¾î~ Àú±â °¡Áö¸¶¼¼¿ä. xml º°·Î ¾î·Á¿î °Å ¾Æ´Ï´Ï±î¿ä. ¾ÆÁÖ ±âº»ÀûÀÎ xml ±ÔÄ¢¸¸ ¾Ë°í ÀÖÀ¸¸é µË´Ï´Ù. ±×°Å º°°Å ¾ø½¿´Ù. 20ÁÙµµ ¾ÈµÊ´Ù. °íÀú ¿ì¸® ¿¬º¯¿¡¼­´Â 20ÁÙÂ¥¸® tld´Â tld Ãà¿¡µµ ¸ø³§´Ï´Ù. 100ÁÙÂ¥¸® Á¤µµ µÇ¾ß "Á» ¾µ¸¸ÇÑ tld ±¸³ª"¶ó°íµé ¸» ÇÕ´Ï´Ù. 10000ÁÙÂ¥¸® tld ÆÄÀÏ º¸¼Ì½¿´Ï±î. ÆÜ#@#$#!@ (^^; ÁË¼ÛÇÕ´Ï´Ù. ¼ö´Ù¸ÇÀÌ ¿äÁò ³Ê¹« ÁÁ¾Æ¼­¸®... Á» µû¶óÇØºÃ½À´Ï´Ù.). ÆÄÀÏÀÇ À§Ä¡´Â /WEB-INF/oktags.tld ÀÔ´Ï´Ù.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		ÆÄÀÏÀÇ À§Ä¡´Â /WEB-INF/web.xml ÀÔ´Ï´Ù. ¹®¼­ÀÇ ¸Ç Ã¹ÁÙÀº ¹Ýµå½Ã &lt;?xml version="1.0" encoding="ISO-8859-1"?> ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. ÀÌ À¥ xmlÀº tld ÆÄÀÏÀ» jsp ¿£Áø ÇÏ¿©±Ý tag handler ¸¦ »¡¸® ÀÎ½ÄÇÏµµ·Ï ÇØÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÆÄÀÏÀÔ´Ï´Ù. &lt;taglib-uri> ¿¡ °üÇØ¼­´Â jsp ¼Ò½º¿¡¼­ ÁöÁ¤ÇÏ´Â uri¿Í ¸Â¾Æ¾ßÇÕ´Ï´Ù¸¸ ÇöÀç·Î¼­´Â Àúµµ ¸íÈ®ÇÏ°Ô ÀÌÇØ¸¦ ÇÏÁö ¾ÊÀº ºÎºÐÀÔ´Ï´Ù.
		<¼Ò½º ÆÄÀÏ¸í="web.xml">&lt;?xml version="1.0" encoding="ISO-8859-1"?>

&lt;!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

&lt;web-app>
  &lt;taglib>
    &lt;taglib-uri>
      http://www.okjsp.pe.kr/ok-taglib
    &lt;/taglib-uri>
    &lt;taglib-location>
      /WEB-INF/oktags.tld
    &lt;/taglib-location>
  &lt;/taglib>
&lt;/web-app>
</¼Ò½º>
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		ÀÌ»ó 3°³ÀÇ ÆÄÀÏÀ» »ç¿ëÇÏ´Â jsp ÆÄÀÏÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» /jsptag.jsp ·Î ÀúÀå( / µð·ºÅä¸®)ÇÑ ´ÙÀ½¿¡ ºê¶ó¿ìÀú¿¡¼­ http://localhost/jsptag.jsp ¸¦ È£ÃâÇØ º¸½Ê½Ã¿À. 
		
		<¼Ò½º ÆÄÀÏ¸í="jsptag.jsp">&lt;%@ page contentType="text/html;charset=euc-kr"%>&lt;%@ taglib
    uri="http://www.okjsp.pe.kr/ok-taglib"
    prefix="jspx" %>
&lt;html>
&lt;title>&lt;jspx:oktag/>&lt;/title>
&lt;body>
Exceuting your first custom tag... &lt;b>&lt;jspx:oktag/>&lt;/b>
&lt;/body>
&lt;/html>
</¼Ò½º>
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
	<what>
		<text>
		¼º°øÇÏ¼Ì´Ù¸é Âü Àß µÇ¾ú½À´Ï´Ù¸¸, ¸¸ÀÏ Á¦´ë·Î ÄÄÆÄÀÏÀÌ µÇÁö ¾Ê°Å³ª ½ÇÇàÀÌ ¾ÈµÈ´Ù¸é ¸Þ½ÃÁö º¸½Ã°í, Àß Ç®¾î°¡¼¼¿ä.
		¿À´ÃÀº ÀÌÁ¤µµ¿¡¼­ ±×¸¸ÇÏ°Ú½À´Ï´Ù. tips ¿¡ ¿Ã¸° oktag.zip ÆÄÀÏÀ» °®°í Å×½ºÆ® ÇØº¸½Ê½Ã¿À.
		</text>
		<image>/images/spacer.gif
		</image>
	</what>
</lecture>

