¼Ò¼³°°ÀºJSP2ºÎ  7Àå Custom Tag & JavaMail  03 ÅÂ±× Çڵ鷯 Ŭ·¡½º  

 

7.3 ÅÂ±× Çڵ鷯 Ŭ·¡½º(Tag Handler Class)

 

ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â À§¿¡¼­ ¸»ÇßµíÀÌ Ä¿½ºÅÒ Å±×ÀÇ µ¿ÀÛÀ» Á¤ÀÇÇϰí Àִ Ŭ·¡½ºÀÔ´Ï´Ù. Áï JSP ÆäÀÌÁö¿¡¼­ űװ¡ ³ªÅ¸³¯ ¶§, ±× űװ¡ ¾î¶² ÀÏÀ» ÇÒ °ÍÀÎÁö¸¦ Á¤ÀÇÇÏ¿© ³õÀº °ÍÀÔ´Ï´Ù. ÅÂ±× Çڵ鷯´Â javax.servlet.jsp.tagext.Tag³ª javax.servlet.jsp.tagext.BodyTag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¼­ ¸¸µé¾îÁý´Ï´Ù. ¶ÇÇÑ À§ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¹Ì ±¸ÇöÇÑ TagSupport³ª BodyTagSupport Ŭ·¡½º¸¦ »ó¼ÓÇØ¼­ ¸¸µé±âµµ ÇÕ´Ï´Ù.

 

 

±×¸² 7-3 Tag HandlerÀÇ Å¬·¡½ºµé

 

n        Tag ÀÎÅÍÆäÀ̽º

Tag ÀÎÅÍÆäÀ̽º´Â JSP ÆäÀÌÁö¿Í ÅÂ±× Çڵ鷯 »çÀ̸¦ ¿¬°áÇÏ´Â ±âº»ÀûÀÎ ÇÁ·ÎÅäÄݰú ¸Þ¼­µå¸¦ Á¤ÀÇÇÕ´Ï´Ù. À̰ÍÀº ´Ü¼øÇÏ°í ±âº»ÀûÀÎ Ä¿½ºÅÒ Å±׸¦ ±¸ÇöÇϱâ À§ÇØ ¸¸µé¾îÁ³À¸¸ç, Ä¿½ºÅÒ Å±×ÀÇ Body ºÎºÐÀº °Çµå¸®Áö ¾Ê´Â °ÍÀ» ¿øÄ¢À¸·Î ÇÕ´Ï´Ù. Áï, Tag ÀÎÅÍÆäÀ̽º´Â ű׿¡ Body ºÎºÐÀÌ ¾ø°Å³ª, Body ºÎºÐÀ» ±×´ë·Î ³ªÅ¸³»´Â °æ¿ì¿¡ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. Tag ÀÎÅÍÆäÀ̽º´Â ÅÂ±× Çڵ鷯ÀÇ Áֱ⸦ Á¤ÀÇÇϸç, űװ¡ ½ÃÀÛÇÏ°í ³¡³¯ ¶§ È£ÃâµÇ´Â ¸Þ¼­µåµéÀ» Á¤ÀÇÇϴµ¥ »ç¿ëµË´Ï´Ù.

 

n        BodyTag ÀÎÅÍÆäÀ̽º

BodyTag´Â Tag ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇÑ ÀÎÅÍÆäÀ̽º·Î ű×ÀÇ ¸öü¸¦ ´Ù·ê ¼ö ÀÖ´Â ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. Tag ÀÎÅÍÆäÀ̽º°¡ Á¦°øÇÏ´Â ¸Þ¼­µå ¿Ü¿¡ ºÎ°¡ÀûÀÎ ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù.

 

n        TagSupport Ŭ·¡½º

TagSupport´Â Tag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϴ Ŭ·¡½º·Î, »õ·Î¿î ÅÂ±× Çڵ鷯¸¦ »ý¼ºÇÏ´Â ±âº»ÀÌ µÇ´Â Ŭ·¡½ºÀÔ´Ï´Ù. Tag ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼­µå ¿Ü¿¡ setter,/getter ¸Þ¼­µå µî, ű׸¦ ´Ù·ê ¶§ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ´Â ¸Þ¼­µåµéÀ» Á¦°øÇϰí ÀÖ½À´Ï´Ù.

 

n        BodyTagSupport Ŭ·¡½º

BodyTagSupport´Â TagSupport Ŭ·¡½º¸¦ »ó¼Ó ¹Þ°í BodyTag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ Å¬·¡½ºÀÔ´Ï´Ù. ÀÌ Å¬·¡½ºµµ ¿ª½Ã »ó¼Ó ¹Þ°í ±¸ÇöµÈ °Í À̿ܿ¡ getBodyContent ¸Þ¼­µåµî, ¿©·¯°¡Áö À¯¿ëÇÑ ¸Þ¼­µåµéÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¸¹Àº ÅÂ±× Çڵ鷯µéÀÌ BodyTagSupport Ŭ·¡½º¸¦ »ó¼Ó ¹Þ¾Æ¼­ ¸î °¡Áö ¼Ò¼öÀÇ ¸Þ¼­µå¸¸ ÀçÁ¤ÀÇÇØ ¾²´Â ¹æ½ÄÀ¸·Î ¸¸µé¾î Áý´Ï´Ù.

 

n        BodyContent Ŭ·¡½º

BodyContent´Â JspWriter Ŭ·¡½º¸¦ »ó¼Ó ¹Þ´Â Ãß»ó Ŭ·¡½º·Î¼­, ű×ÀÇ ¹ÙµðºÎºÐÀ» ó¸®ÇÑ °ÍÀ» ĸ½¶È­Çϰí Àִ Ŭ·¡½ºÀÔ´Ï´Ù. Áï, BodyContentÀÇ ³»¿ëÀº Body ºÎºÐ ó¸®ÀÇ °á°ú·Î, ±×°ÍÀ» Çڵ鷯°¡ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­ BodyContent´Â ±× ³»¿ëÀ» ½ºÆ®¸µÀ¸·Î º¯È¯Çϰųª, Àаųª, Áö¿ï ¼ö ÀÖ´Â ¸Þ¼­µå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

 

ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â Ŭ·¡½º ÆÄÀϵéÀ̳ª ºó ÆÄÀÏÀÌ ÀÖ´Â °÷¿¡ À§Ä¡½ÃŰ¸é µË´Ï´Ù. ÅèĹÀ» »ç¿ëÇÒ ¶§´Â classes Æú´õ ¾Æ·¡¿¡ ÆÐŰÁö ÇüÅ·Π¸¸µé¾î¼­ °ü¸®ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¸í½ÉÇϽñ⠹ٶø´Ï´Ù.

 

Áö±Ý±îÁö À§¿¡¼­ »ìÆìº» °ÍÀ» ¹ÙÅÁÀ¸·Î °£´ÜÇÑ ÅÂ±× Çڵ鷯¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. À̰ÍÀº ÁöÁ¤µÈ űװ¡ ½ÇÇàµÉ ¶§ ´Ü¼øÈ÷ ¡°Hello Tag¡±¶ó´Â ¹®ÀÚ¿­¸¸ Ãâ·ÂÇØ ÁÖµµ·Ï ÇÏ´Â ÅÂ±× Çڵ鷯ÀÔ´Ï´Ù.

 

HelloTag.java

°£´ÜÇÑ ÅÂ±× Çڵ鷯

package tags;
import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class HelloTag implements Tag {
  PageContext pageContext;
  Tag parent;

  public int doStartTag() throws JspException{
    try{
      JspWriter out = pageContext.getOut();
      out.write("Hello Tag!!!");
    }catch(IOException e){}
    return SKIP_BODY;
  }
  public int doEndTag() throws JspException{
    return EVAL_PAGE;
  }
  public void release(){}
  public void setPageContext(PageContext pg){
    pageContext = pg;
  }
  public void setParent(Tag p){
    parent = p;
  }
  public Tag getParent(){
    return parent;
  }
}

C:\jakarta\webapps\MySample\WEB-INF\classes\tags>javac HelloTag.java

 

ÀÌ ¿¹Á¦´Â Tag ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹Þ¾Æ °£´ÜÇÑ ÅÂ±× Çڵ鷯 Ŭ·¡½º¸¦ ¸¸µé°í ÀÖ½À´Ï´Ù. ¹°·Ð Tag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ TagSupport Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¸é ´õ ¼Õ½±°Ô ÅÂ±× Çڵ鷯¸¦ Á¦ÀÛÇÒ ¼ö ÀÖ°ÚÁö¸¸, ¿©±â¼­´Â ³»ºÎÀÇ ¿ø¸®¸¦ º¸¿©ÁÖ°íÀÚ ÇÏ¿© Tag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¼­ ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼­µåµéÀ» ¸ðµÎ ÀçÁ¤ÀÇÇÏ¿© ³õ¾Ò½À´Ï´Ù.

 

À§ÀÇ ÄÄÆÄÀÏÀÇ °æ·Î¿¡¼­ º¸µí, ÅÂ±× Çڵ鷯 Ŭ·¡½º´Â classes Æú´õ¾Æ·¡¿¡ tags¶ó´Â ÆÐŰÁö ³»¿¡ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÆÐŰÁö ÇüÅ·Π¸¸µé¾î¼­ °ü¸®ÇÏ´Â °ÍÀÌ ÆíÇÏ°í ¶Ç À§¿¡¼­µµ ¾ð±ÞÇßµíÀÌ ÅèĹ¿¡¼­´Â ÀÌ·¸°Ô ÆÐŰÁö ÇüÅ·Π¸¸µé¾î ³õ´Â °ÍÀÌ ¿øÄ¢ÀÔ´Ï´Ù.

 

±×·³ ¼Ò½º¸¦ ¼³¸í µå¸®°Ú½À´Ï´Ù. ¾ÆÁ÷ TLD¿Í JSP ÆäÀÌÁö¿¡ ¿¬°áÇÏÁö ¾Ê¾Æ ±× ³»¿ëÀ» Á¤È®È÷ ÀÌÇØÇÒ ¼ö´Â ¾ø°ÚÁö¸¸, ¿ø¸®¸¦ »ý°¢ÇÏ¸ç º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

¿©±â¼­ ½ÇÁúÀûÀÎ ÀÛ¾÷À» ÇÏ´Â ¸Þ¼­µå´Â doStartTag ¸Þ¼­µå ÀÔ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â űװ¡ ½ÃÀÛÇÒ ¶§ È£ÃâµÇ¸ç, ¿©±â¼­´Â JspWriter °´Ã¼¸¦ »ý¼ºÇÑ ´ÙÀ½ ¡°Hello Tag¡±¶õ ¹®ÀÚ¿­À» Ãâ·ÂÇÏ¿© ÁÝ´Ï´Ù. ±×¸®°í SKIP_BODY¶õ »ó¼ö¸¦ ¹ÝȯÇϴµ¥ À̰ÍÀº BodyÁï, ÅÂ±× »çÀÌÀÇ ¸öüºÎºÐÀº ó¸®ÇÏÁö ¾Ê´Â´Ù´Â ¶æÀÔ´Ï´Ù.

 

n        public int doStartTag() throws JspException{

n         try{

n            JspWriter out = pageContext.getOut();

n            out.write("Hello Tag!!!");

n          }catch(IOException e){}

n          return SKIP_BODY;

n         }

 

³ª¸ÓÁö ¸Þ¼­µåµéÀº ±âº»ÀûÀ¸·Î À§¿Í °°ÀÌ ±¸ÇöµÈ´Ù´Â °Í¸¸ ¾Ë¾ÆµÎ½Ã±â ¹Ù¶ø´Ï´Ù. Tag ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â TagSupport Ŭ·¡½º¿¡¼­´Â À§¿Í °°Àº °ÍÀº ±âº»ÀûÀ¸·Î ±¸ÇöÇØ ³õ¾Æ¼­, TagSupport Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ÅÂ±× Çڵ鷯¸¦ ÀÛ¼ºÇÒ ¶§´Â doStartTag ¸Þ¼­µå Çϳª¸¸ Á¤ÀÇÇØµµ ¹®Á¦¾øÀÌ ÀÛµ¿ÇÕ´Ï´Ù. ÅÂ±× Çڵ鷯¿¡ °ü°èµÇ´Â Ŭ·¡½ºÀÇ ¸Þ¼­µå´Â ¾Æ·¡ ¼³¸íÇØ ³õÀº API¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.

 

 

Tag ÀÎÅÍÆäÀ̽º ÁÖ¿ä ¸â¹öÇʵå, ¸Þ¼­µå

public static final int SKIP_BODY : ¹ÙµðÀÇ ³»¿ëÀ» ¹«½ÃÇÕ´Ï´Ù.

public static final int EVAL_BODY_INCLUDE : ¹Ùµð³»¿ëÀ» ó¸®ÇÕ´Ï´Ù.

public static final int SKIP_PAGE : ÇöÀç ÆäÀÌÁö¿¡ ´ëÇÑ Ã³¸®¸¦ °Ç³Ê¶Ý´Ï´Ù.

public static final int EVAL_PAGE : ÇöÀç ÆäÀÌÁö¸¦ ó¸®ÇÕ´Ï´Ù.

 

public void setPageContext(PageContext pc) : ÅÂ±× Çڵ鷯ÀÇ pageContext¼Ó¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù.

public void setParent(Tag t) : ÅÂ±× Çڵ鷯ÀÇ parent¼Ó¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù.

public Tag getParent() : ű×Çڵ鷯ÀÇ parent¸¦ ¸®ÅÏÇÕ´Ï´Ù.

public int doStartTag() throws JspException : ½ÃÀÛű׸¦ ó¸®ÇÕ´Ï´Ù.

public int doEndTag() throws JspException : Á¾·á ű׸¦ ó¸®ÇÕ´Ï´Ù.

public void release() : ű׼öÇàÀ» ¸¶Ä¡°í ¸®¼Ò½ºµîÀ» ÇØÁ¦ÇÕ´Ï´Ù.

 

BodyTag ÀÎÅÍÆäÀ̽º ÁÖ¿ä ¸â¹öÇʵå, ¸Þ¼­µå

public static final int EVAL_BODY_BUFFERED : Ä¿½ºÅÒ Å±×ÀÇ ¹ÙµðºÎºÐÀ» ó¸®Çϱâ À§ÇÑ »õ·Î¿î ¹öÆÛ»ý¼ºÀÇ ¿äûÀ» ³ªÅ¸³½´Ù.

public void setBodyContent(BodyContent b) : doInitBody() ¸Þ¼­µå°¡ È£ÃâµÇ±â Àü¿¡ È£ÃâµÇ¸ç, Ãâ·ÂÀ» À§ÇÑ BodyContent ½ºÆ®¸²À» ¼³Á¤ÇÑ´Ù.

public void doInitBody() throws JspException : ű×ÀÇ ¹Ùµð¸¦ ó¸®Çϱâ Àü¿¡ ¼³Á¤À» ÇØ ÁÙ ¶§ »ç¿ëÇÑ´Ù.

 

TagSupport Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public static final Tag findAncestorWithClass(Tag from, java.lang.Class klass) : ÁÖ¾îÁø ÀνºÅϽº¿¡ °¡Àå °¡±î¿î Ŭ·¡½ºÅ¸ÀÔÀÇ ÀνºÅϽº¸¦ ã½À´Ï´Ù.

public java.lang.String getId() : ű×ÀÇ id ¼Ó¼º°ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

public void getValue(java.lang.String k) : ÁÖ¾îÁø À̸§ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

public void removeValue(java.lang.String k) : ÁÖ¾îÁø À̸§ÀÇ °ªÀ» »èÁ¦ÇÕ´Ï´Ù.

public void setParent(Tag t) : ºÎ¸ðÀÇ Å±׸¦ ¼³Á¤ÇÕ´Ï´Ù.

public viod setTagId(String id) : ű×ÀÇ id ¼Ó¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù.

 

BodyTagSupport Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public int doAfterBody() throws JspException : ű×ÀÇ bodyºÎºÐ Á¶ÀÛÀ» À§ÇÑ ¸Þ¼­µå·Î bodyÀÛ¾÷À» ¸¶Ä£ ÈÄ ÀÇ °á°ú¸¦ ¸®ÅÏÇØ ÁÝ´Ï´Ù.

public BodyContent getBodyContent() : BodyContent °´Ã¼¸¦ ¸®ÅÏÇÏ¿© ÁÝ´Ï´Ù.

public static final Tag findAncestorWithClass(Tag from, java.lang.Class klass) : ÁÖ¾îÁø ÀνºÅϽº¿¡ °¡Àå °¡±î¿î Ŭ·¡½ºÅ¸ÀÔÀÇ ÀνºÅϽº¸¦ ã½À´Ï´Ù.

public java.lang.String getId() : ű×ÀÇ id ¼Ó¼º°ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

public void getValue(java.lang.String k) : ÁÖ¾îÁø À̸§ÀÇ °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.

public void removeValue(java.lang.String k) : ÁÖ¾îÁø À̸§ÀÇ °ªÀ» »èÁ¦ÇÕ´Ï´Ù.

public void setParent(Tag t) : ºÎ¸ðÀÇ Å±׸¦ ¼³Á¤ÇÕ´Ï´Ù.

public viod setTagId(String id) : ű×ÀÇ id ¼Ó¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù.

 

BodyContent Ãß»ó Ŭ·¡½º ÁÖ¿ä ¸Þ¼­µå

public abstract java.io.Reader getReader() : ű×ÀÇ ¹Ùµð¸¦ ÀÐÀ»¼ö ÀÖ´Â Reader°´Ã¼¸¦ ¸®ÅÏÇÕ´Ï´Ù.

public abstract java.lang.String getString() : ÅÂ±× ¹Ùµð Àüü¸¦ ´ãÀº ½ºÆ®¸µÀ» ¸®ÅÏÇÕ´Ï´Ù.

public void clearBody() : ű×ÀÇ ¹Ùµð³»¿ëÀ» Áö¿ó´Ï´Ù.

public JspWriter getEnclosingWriter() : JspWriter¸¦ ¸®ÅÏÇØ ÁÝ´Ï´Ù.

 



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºJSP2ºÎ
ÀúÀÚ:ÃÖ¿µ°ü