JSP Tag Library

kenu
2001-08-27 2:04¿ÀÀü

JSP Tag Library ¶õ custom tag ¸¦ ¸¸µé¾î¼­ »ç¿ëÇÏ´Â JSP ÀÇ °í±Þ±â¼úÀ̶ó°í ÇÒ ¼ö ÀÖ´Â °Í ÁßÀÇ ÇϳªÀÔ´Ï´Ù. Bean º¸´Ù ÁøÀϺ¸µÈ °³³äÀ¸·Î MVC(Model View Control) À» ¿Ïº®ÇÏ°Ô ±¸ÇöÇØÁÝ´Ï´Ù.

<% %> ¸¦ »ç¿ëÇÏÁö ¾Ê°íµµ µ¿ÀûÀΠǥÇöÀ» °¡´ÉÇÏ°Ô ÇϹǷΠ¼Ò½ºÄڵ忡 ´ëÇØ¼­ µðÀÚÀ̳ʰ¡ º¸´Ù ½±°Ô Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. (^^ ¾ÆÁ÷ Àúµµ ½Ç¹«¿¡ Àû¿ëÇØº¸Áø ¾Ê¾Ò½À´Ï´Ù.)

¾ÆÁ÷ Àúµµ ½Ç·ÂÀÌ ¹ÌõÇÑ °ü°è·Î, Ã¥º¸°í °øºÎÇÑ °ÍÀ» Á¤¸® °â ÇØ¼­ ½äÀ» Ç®¾îº¸°Ú½À´Ï´Ù. »ç½Ç ¼Ò½º ¼³¸íº¸´Ù´Â ÆÄÀÏ À§Ä¡¸¸ ¾Ë·ÁÁÖ´Â Á¤µµÀÏ °ÍÀÌ´Ï ³Ê¹« ±â´ë´Â ÇÏÁö¸¶¼¼¿ä.

ÀÏ´Ü jsp tag library ¸¦ »ç¿ëÇϽ÷Á¸é jsp ¿£ÁøÀÌ jsp spec 1.1 ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù. jsp 1.0 Àº tag library ¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °­Á¸¦ Å×½ºÆ®ÇÑ jsp ¿£ÁøÀº Tomcat 3.2.3 ÀÔ´Ï´Ù.

±âÃÊÀûÀÎ ´Ü°è·Î tag ¸¦ ÀÌ¿ëÇØ¼­ ´Ü¼øÈ÷ text ¸¦ Ãâ·ÂÇÏ´Â °ÍÀ» ½ÃµµÇغ¸°Ú½À´Ï´Ù. ¼Ò½ºÀÇ Ãâó´Â ManningÃâÆÇ»ç¿¡¼­ ³ª¿Â JSP Tag Libraries Ã¥ chapter3 ÀÔ´Ï´Ù. Á¦°¡ °æ·Î¶û 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 ¾Æ·¡ÀÔ´Ï´Ù.

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;
    }
}
		


¾ÆÁÖ °¡Àå ±âº»ÀûÀÎ tag handler ÀÔ´Ï´Ù. ÀÌ »À´ë¸¦ °®°í Á¡ÁøÀûÀ¸·Î È®ÀåÀ» Çϸ鼭 ÄÚµùÀ» ÇÏ°Ô µÇÁÒ. ±âÃʶó´Â ¾ê±â´Â ¾ÆÁÖ ½±´Ù¶õ ¶æµµ ÀÖÁö¸¸, ¾ø¾î¼­´Â ¾ÈµÈ´Ù´Â ¶æµµ °®°í ÀÖ½À´Ï´Ù. ÄÚµå Çϳª Çϳª¸¦ ´«¿©°Ü º¸½Ã¸é µË´Ï´Ù. ¹¹ ±»ÀÌ ¿Ü¿ï ÇÊ¿ä±îÁö´Â... ¿Ö³ÄÇϸé 3¹øÀÌ»ó ¹Ýº¹Çϸé ÀúÀý·Î ¿Ü¿öÁö°Ô µË´Ï´Ù.(*_*; õÀç³Ä±¸¿ä? ¿½ Àú´Â õÀç, ÆÜ# Å©Çä#$%#$,~ T_T; ÀÚ²Ù »ç¿ëÇϸé ÀúÀý·Î ¿Ü¿öÁø´Ù´Â ¶æÀÓ´Ù. ±×°Ô ¿Í¶¡´Ï´Ù.)

ÄÄÆÄÀÏÀº µµ½ºÃ¢(cmd â) ¶ç¿ì°í cd c:/jakarta-tomcat/webapps/WEB-INF/classes/ok/tag ·Î °¡¼­, javac OkTag.java ÇÏ½Ã¸é µË´Ï´Ù.

´ÙÀ½¿¡ ÇÊ¿äÇÑ ÆÄÀÏÀº tld(Tag Library Descriptor) ¼³¸íÆÄÀÏÀÔ´Ï´Ù. tag handler fileÀÇ À§Ä¡¿Í ÇÊ¿äÇÑ ¼Ó¼ºµéÀ» ¼³¸íÇØÁÖ´Â ÆÄÀÏÀÌÁÒ. jsp ¿£ÁøÀ¸·Î ÇÏ¿©±Ý tag handler ¸¦ »¡¸® ÀνÄÇϵµ·Ï ÇØÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÆÄÀÏÀÔ´Ï´Ù. ¼Ò½ºÀÇ ¹®¹ýÀº xml ÀÔ´Ï´Ù. ¾î~ Àú±â °¡Áö¸¶¼¼¿ä. xml º°·Î ¾î·Á¿î °Å ¾Æ´Ï´Ï±î¿ä. ¾ÆÁÖ ±âº»ÀûÀÎ xml ±ÔÄ¢¸¸ ¾Ë°í ÀÖÀ¸¸é µË´Ï´Ù. ±×°Å º°°Å ¾ø½¿´Ù. 20ÁÙµµ ¾ÈµÊ´Ù. °íÀú ¿ì¸® ¿¬º¯¿¡¼­´Â 20ÁÙÂ¥¸® tld´Â tld Ãà¿¡µµ ¸ø³§´Ï´Ù. 100ÁÙÂ¥¸® Á¤µµ µÇ¾ß Á» ¾µ¸¸ÇÑ tld ±¸³ª¶ó°í »ý°¢ÇÕ´Ï´Ù. 10000ÁÙÂ¥¸® tld ÆÄÀÏ º¸¼Ì½¿´Ï±î. ÆÜ#@#$#!@ (^^; Á˼ÛÇÕ´Ï´Ù. ¼ö´Ù¸ÇÀÌ ¿äÁò ³Ê¹« ÁÁ¾Æ¼­¸®... Á» µû¶óÇØºÃ½À´Ï´Ù.)

oktags.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.suncom/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>oktg</shortname>
  <uri> http://www.okjsp.pe.kr/ok-taglib </uri>
  <info>
      A simple sample tag library
  </info>
  
  <tag>
    <name>oktag</name>
    <tagclass>ok.tag.OkTag</tagclass>
    <bodycontent>empty</bodycontent>
    <info>
      Just Beginning.
    </info>
  </tag>
</taglib>


´ÙÀ½¿¡ ÇÊ¿äÇÑ ÆÄÀÏÀº 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 ÀÔ´Ï´Ù.

ÆÄÀÏÀÇ À§Ä¡´Â /WEB-INF/web.xml ÀÔ´Ï´Ù. ¹®¼­ÀÇ ¸Ç ùÁÙÀº ¹Ýµå½Ã <?xml version="1.0" encoding="ISO-8859-1"?> ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù. ÀÌ À¥ xmlÀº tld ÆÄÀÏÀ» jsp ¿£Áø ÇÏ¿©±Ý tag handler ¸¦ »¡¸® ÀνÄÇϵµ·Ï ÇØÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÆÄÀÏÀÔ´Ï´Ù. <taglib-uri> ¿¡ °üÇØ¼­´Â jsp ¼Ò½º¿¡¼­ ÁöÁ¤ÇÏ´Â uri¿Í ¸Â¾Æ¾ßÇÕ´Ï´Ù¸¸ ÇöÀç·Î¼­´Â Àúµµ ¸íÈ®ÇÏ°Ô ÀÌÇØ¸¦ ÇÏÁö ¾ÊÀº ºÎºÐÀÔ´Ï´Ù.
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

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

<web-app>
  <taglib>
    <taglib-uri>
      http://www.okjsp.pe.kr/ok-taglib
    </taglib-uri>
    <taglib-location>
      /WEB-INF/oktags.tld
    </taglib-location>
  </taglib>
</web-app>


ÀÌ»ó 3°³ÀÇ ÆÄÀÏÀ» »ç¿ëÇÏ´Â jsp ÆÄÀÏÀº ´ÙÀ½°ú °°½À´Ï´Ù. ÀÌ ÆÄÀÏÀ» /jsptag.jsp ·Î ÀúÀå( / µð·ºÅ丮)ÇÑ ´ÙÀ½¿¡ ºê¶ó¿ìÀú¿¡¼­ http://localhost/jsptag.jsp ¸¦ È£ÃâÇØ º¸½Ê½Ã¿À.
jsptag.jsp
<%@ page contentType="text/html;charset=euc-kr"%><%@ taglib
    uri="http://www.okjsp.pe.kr/ok-taglib"
    prefix="jspx" %>
<html>
<title><jspx:oktag/></title>
<body>
Exceuting your first custom tag... <b><jspx:oktag/></b>
</body>
</html>


¼º°øÇϼ̴ٸé Âü Àß µÇ¾ú½À´Ï´Ù¸¸, ¸¸ÀÏ Á¦´ë·Î ÄÄÆÄÀÏÀÌ µÇÁö ¾Ê°Å³ª ½ÇÇàÀÌ ¾ÈµÈ´Ù¸é ¸Þ½ÃÁö º¸½Ã°í, Àß Ç®¾î°¡¼¼¿ä. ¿À´ÃÀº ÀÌÁ¤µµ¿¡¼­ ±×¸¸ÇϰڽÀ´Ï´Ù. tips ¿¡ ¿Ã¸° oktag.zip ÆÄÀÏÀ» °®°í Å×½ºÆ® ÇØº¸½Ê½Ã¿À.

°ü·Ã »çÀÌÆ®
xml-typed document
http://okjsp.pe.kr