JSP自定义标签的简单例子

 JSP中允许我们自定义自己的标签,目前已经发展出来的JSTL的基本内容便是从这里来的,不过别人都是搞研究的,我们能用就行了,不过我们还是要了解一下其中的最基本的地方,那就是如何自定义自己的标签.
    下面开始.要自定义标签,首先得知道两个类:TagSupport和BodyTagSupport.BodyTagSupport继承了前面的类,这里仅对TagSupport为例.
   我们的标签类必须继承TagSupport类,其中她的重要方法有
   
int  doStartTag();  int  doEndTag();  void  setParent(Tag t);
   
void  setPageContext(PageContext p);  void  release();
   首先看setPageContext(PageContext p),该方法不需要我们调用,是JSP容器调用,它会初始化TagSupport中的一个PageContext对象,该对象来自于JSP,由该对象可以得到JSPWritter对象out--pageContext.getOut(),它实际上就是JSP中out对象.作用易言于表,就不多说了.
   然后来看setParent方法,若该标签有父标签,在JSP容器中会设置这个父标签
   接下来是release()方法,它会释放该标签所占用资源,容器调用
   现在来看我们要用的两个方法int doStartTag(); int doEndTag()
   doStartTag()会在JSP读取到标签开始的时候调用,好比有一个标签<sss></sss>,那么在红色部分就会调用该方法;相应的,在黑色的结束部分就会调用doEndTag().所以,我们要写的东西就可以在这两个方法里面写.同时,这两个方法分别返回int值,在doStartTag()中,若返回TagSupport.EVAL_BODY_INCLUDE则表示标签对中的文字会输出比如<sss>abcd</sss>若要输出abcd,则返回该子段;若TagSupport.SKIP_BODY,则不会处理标签对中的文字;那么doEndTag()中,若返回TagSupport.EVAL_PAGE,则表示该标签结束之后,继续处理剩下的页面内容;若返回TagSupport.SKIP_PAGE,则该标签之后的页面内容全部不会处理;
   标签可以拥有属性Attribute,一个属性对应一个标签类中实例变量,需提供获取设置方法.
   当完成一个类之后,需要配置该标签类,分别有xx.tld说明文件和在web.xml中配置
   说那么多,下面来做一个简单的例子,我们来做一个标签,该标签的作用是在JSP页面上输出一段话,该标签有一个属性name,输出内容中会显示"这是我的标签(换行)你好:name(值)"
   首先建立类
   
package  mypack;
   
public   class  HelloTag  extends  TagSupport  ... {
      
private String name; //name属性
      public String getName()...{
           
return name;
      }

      
public void setName(String name)...{
          
this.name = name;
      }


      
public int doEndTag() throws JspException...{
         JspWriter out 
= pageContext.getOut();  --pageContext对象以被容器初始化
         
try...{
           out.print(getName()); 
//获取name属性的值
         }
 catch (IOException e)...{
           e.printStackTrace();
         }

         
return TagSupport.EVAL_PAGE; //继续处理其他页面内容
       }

 
     
public void release() ...{
         
super.release();
     }


     
public int doStartTag() throws JspException ...{

       pageContext.getOut().print(
"这是我的标签+<br/>");

       
return TagSupport.EVAL_BODY_INCLUDE;  //标签开始要处理标签对中内容
     }


   }

 
 下面在WEB-INF下面创建一个hellotag.tld文件,这是一个XML文件,文件的内容如下
 
下面在web.xml中配置如下信息
  < jsp-config >
  
< taglib >
   
< taglib-uri > /HelloTag </ taglib-uri >   --唯一能找到该标签的路径
   
< taglib-location > /WEB-INF/hellotag.tld </ taglib-location >
                          --刚才的hellotag.tld的位置
  
</ taglib >
 
</ jsp-config >
    接下来在一个JSP页中,我们用
   <%@ taglib uri="/HelloTag" prefix="test"%>  --uri就是web中配置的,text表示命名空间
   引入该标签之后,就可以如下使用了
   <body>
     <text:hello name="wangxi">你好:</text:hello>
   <body/>
其实还有更加直接的就是在Page里直接<%@ taglib uri="[这里和tld中定义的uri要一致]" prefix="前缀" %>
 

你可能感兴趣的:(jsp,Web,xml)