自定义jsp标签

一、自定义标签的过程:
1、创建标签的处理类,这个类实现Tag接口,用来定义标签的行为(Tag Handle Class)
2、建立tld文件,对标签处理类进行描述(文件tld放在WEB-INF下)
3、在jsp文件中使用自定义的标签,一定要加taglib指令元素;
-----------------------------------------------------

二、自定义标签的作用:主要用于移除jsp页面中的java代码
-----------------------------------------------------
三、Tag中方法的含义:
1、doEndTag:当执行到标签结束的时候调用这个方法;
2、getParent:获取父标签;
3、release:释放标签
4、setPageContext:设置PageContext
-----------------------------------------------------
四、快速入门:获取本机的IP地址
1、新建一个jsp;
|————————————————————————
   <body>                                                                                  |
|  您的IP地址是:                                                                 |
|  <%                                                                                      |
|    String ip=request.getRemoteAddr();                          |
|    out.println(ip);                                                                 |---------------------原始的写法
|  %>                                                                                      |
|</body>                                                                                |
|                                                                                              |
————————————————————————|

用自定义标签写:
<body>
    您的IP地址是:<hbsi:viewIP/>-----viewIP自己定义的
</body>

2、新建一个类;
public class ViewIPTag extends TagSupport{
    //重写doStartTag方法
     public int doStartTag() throws JspException {
  //
  HttpServletRequest request=(HttpServletRequest)

this.pageContext.getRequest();
  JspWriter out=this.pageContext.getOut();
  
  String ip=request.getRemoteAddr();
  try {
   out.println(ip);
  } catch (IOException e) {
   e.printStackTrace();
  }
  
  return super.doStartTag();
 }

}

3、新建一个tld文件(放在WEB-INF下)
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>hbsi</short-name>
    <uri>http://www.hbsi.com</uri>
   
    <tag>
  <name>viewIP</name>
 <tag-class>com.hbsi.web.tag.ViewIPTag</tag-class>
 <body-content>empty</body-content>
    </tag>
</taglib>

4、必须在jsp中加上taglib指令:
<%@ taglib uri="http://www.hbsi.com" prefix="hbsi"%>

-------------------------------------------------------------------
五、方法中返回语句的意思:
SKIP_BODY:忽略标签体,跳过标签体;
EVAL_BODY_INCLUDE:执行标签体;
SKIP_PAGE:跳过剩下的jsp内容。

--------------------------------------------------------------------
六、方法:
1、doAfterBody:反复执行标签体中的内容。

在doEndTag中重写(标签后的所有内容都没有)


------------------------------------------------
七、实例:
1、控制jsp页面某一部分内容是否执行
package com.hbsi.web.tag;

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

public class MyTagDemo2 extends TagSupport {

 
 public int doStartTag() throws JspException {
  
  return this.EVAL_BODY_INCLUDE;//获取标签体的内容(执行标签体)
  //return this.SKIP_BODY;//忽略标签体
 }
 
}


<body>
    <hbsi:demo2>
        This is my JSP page. <br>
    </hbsi:demo2>
  </body>


<tag>
  <name>demo2</name>
 <tag-class>com.hbsi.web.tag.MyTagDemo2</tag-class>
 <body-content>JSP</body-content>
    </tag>
----------------------------------------------
2、控制整个jsp页面是否执行
package com.hbsi.web.tag;

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

public class MyTagDemo3 extends TagSupport {

 @Override
 public int doEndTag() throws JspException {
  
  return this.SKIP_PAGE;//后面的页面不显示
 }
 
}


<body>
  <hbsi:demo3/>
    This is my JSP page. <br>
  </body>


<tag>
  <name>demo3</name>
 <tag-class>com.hbsi.web.tag.MyTagDemo3</tag-class>
 <body-content>JSP</body-content>
    </tag>

---------------------------------------------------
3、控制jsp页面内容重复执行
package com.hbsi.web.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//控制jsp页面内容重复执行
public class MyTagDemo4 extends TagSupport{

 int items=1;
 public int doAfterBody() throws JspException {
  items++;
  if(items>5){
   return this.SKIP_BODY;
  }else{
   return this.EVAL_BODY_AGAIN;
  }
  
 }

 
 public int doStartTag() throws JspException {
  
  return this.EVAL_BODY_INCLUDE;
 }
 
}

 

<body>
  <hbsi:demo4>
    This is my JSP page. <br>
    </hbsi:demo4>
  </body>


<tag>
  <name>demo4</name>
 <tag-class>com.hbsi.web.tag.MyTagDemo4</tag-class>
 <body-content>JSP</body-content>
    </tag>
----------------------------------------------------
4、修改jsp页面内容输出

package com.hbsi.web.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class MyTagDemo5 extends BodyTagSupport {

 @Override
 public int doEndTag() throws JspException {
  BodyContent bc= this.getBodyContent();
  String b=bc.getString().toUpperCase();
  JspWriter out=this.pageContext.getOut();
  try {
   out.print(b);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return this.EVAL_PAGE;
 }
 
}

 

 <body>
  <hbsi:demo5>
    aaaaaaaaa <br>
    </hbsi:demo5>
  </body>


<tag>
  <name>demo5</name>
 <tag-class>com.hbsi.web.tag.MyTagDemo5</tag-class>
 <body-content>JSP</body-content>
    </tag>

----------------------------------------------------------------------------------------
八、
1、自定义jsp标签的执行过程


2、TagSupport类的生命周期

 

3、

BodyTagSupport类的生命周期


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值