jsp自定义标签

标签库文件是一个标准的xml文件,该文件的根元素是taglib元素,

taglib的三个子元素

1.tlib-version       <!-- 标签库的版本号,对程序作用不大-->
2.short-name       <!--标签库默认短名,对程序作用不大-->
3.uri                     <!--指定标签库的唯一标识,非常重要-->


taglib元素下可以有多个tag元素,每一个tag元素定义一个标签

tag元素的子元素

1.name 标签库名,很重要

2.tag-class 指定标签处理类,很重要

3.body-content 指定标签体的内容 ,很重要,该元素的值可以有以下几个

1.tagdependent:指定标签处理类自己负责处理标签体

2.empty:指定该标签只能作为空标签使用

3.scriptless:指定该标签体可以是静态html元素,表达式语言,但不允许出现jsp脚本

4.jsp:指定标签可以使用jsp脚本

5.dynamic-attribute:指定标签是否支持动态属性。只有当定义动态属性标签时才需要该子元素

带属性的标签定义,需要在tag元素添加子元素<attribute../>,该元素有以下几个子元素

1.name:设置属性名,子元素的值是字符串内容

2.required:设置该属性是否为必须属性,true或false

3.fragment:设置该属性是否支持jsp脚本,表达式语言等动态内容,true或false

1.编写标签实现类
      <1>.从SimpleTagSupport类继承
      <2>.重写doTag方法,实现在网页上的输出

2.在WEB-INF目录下,或WEB-INF的子目录下建立helloworld.tld文件,即自定义标签的说明文件

3.建立没有带属性标签HelloTag

注意:1.标签处理必须置于包中,不能是裸体类
  2.不需要像jsp中修改WEB.xml
<--------------------------------------------------------------------------->
example:

新建HelloTag.java并重写它的doTag方法存放在mytag包中

package mytag;

import java.io.IOException;

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

public class HelloTag extends SimpleTagSupport {

  public void doTag() throws JspException,IOException {
  this.getJspContext().getOut().write("HelloWorld!"+"<br>");
  }

}


<----------------------------------------------------------------------------------------->


新建一个jsp测试文件TestTag.jsp

<%@ page language="java" import="java.util.*"pageEncoding="GB18030"%>

<!-- uri是用来寻找tld文件的 -->
<%@ taglib uri="/HW" prefix="mytag"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
  <head>

  </head>

  <body>
    <mytag:helloworld/>

  </body>
</html>


<------------------------------------------------------------------------------------------->
再建一个相对应的tld文件helloworld.tld

<?xml version="1.0" encoding="GB18030"?>

<taglibxmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-

jsptaglibrary_2_0.xsd"
  version="2.0">


  <tlib-version>2.0</tlib-version>
  <short-name>mytag</short-name>
  <uri>/HW</uri>
  <tag>
    <name>helloworld</name>
    <tag-class>mytag.HelloTag</tag-class>
    <body-content>empty</body-content>
  </tag>
</taglib>

<!--------------------定义带标签体的标签  start----------------------------->

1.新建标签处理类JspTag.java

package com.util;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class JspTag extends SimpleTagSupport{
private int sum;
@Override

public void doTag() throws JspException, IOException {
for(int i=0;i<=sum;i++){
getJspContext().setAttribute("count",String.valueOf(i+1));
getJspBody().invoke(null);//获取得标签体中的内容并输出(jsp页面调用这个标签时,使用的${count},
                        //也就是说获取${count}的值并输出   )
}

}

public int getSum() {
return sum;
}

public void setSum(int sum) {
this.sum = sum;
}

}

2.新建标签文件Michael.tld
<?xml version="1.0" encoding="UTF-8"?>

<taglibxmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!--标签库的版本号 --> 
  <tlib-version>1.0</tlib-version>
  <!-- 标签库的默认前缀-->
  <short-name>michael</short-name>
  <!-- 标签库的默认URI-->
  <uri>/eportal</uri>
   
  <!-- 商品类别列表标签-->
  <tag>
    <description>计数</description>
    <name>michael</name>
    <tag-class>com.util.JspTag</tag-class> 
    <body-content>scriptless</body-content>
    <attribute>
        <description>1-最新商品类别列表,2-促销商品类别列表,默认值为1</description>
        <name>sum</name>
        <required>false</required>
        <!-- 可以使用JSP表达式-->
        <rtexprvalue>true</rtexprvalue>
    </attribute>          
  </tag>
  </taglib>

  3.新建调用标签的jsp文件test.jsp
<%@ page language="java" import="java.util.*"pageEncoding="utf-8"%>
<%@taglib prefix="mi" uri="/eportal"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>My JSP 'index.jsp'starting page</title>
</head>

<body>
<form action="test.action"method="post">
年龄:<input type=textname=age> 
  <input type=submit name=submvalue="查询">
</form>
<mi:michael sum="5">
${count}
</mi:michael>
</body>
</html>
<!--------------------定义带标签体的标签  end----------------------------->

<!-------------------定义带属性的标签start------------------------------------>
1.新建标签处理类JspTag2.java

package com.util;

import java.io.IOException;

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

public class JspTag2 extends SimpleTagSupport{
private int sum;

@Override
public void doTag() throws JspException, IOException {
for(int i=0;i<=sum;i++){
getJspContext().getOut().write("A"+String.valueOf(i)+"");
}
}

public int getSum() {
return sum;
}

public void setSum(int sum) {
this.sum = sum;
}
}

2.新建标签文件Michael.tld
<?xml version="1.0" encoding="UTF-8"?>

<taglibxmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <!--标签库的版本号 --> 
  <tlib-version>1.0</tlib-version>
  <!-- 标签库的默认前缀-->
  <short-name>michael</short-name>
  <!-- 标签库的默认URI-->
  <uri>/eportal</uri>
   
  <!-- 商品类别列表标签-->
  <tag>
    <description>计数</description>
    <name>john</name>
    <tag-class>com.util.JspTag2</tag-class> 
    <body-content>scriptless</body-content>
    <attribute>
        <description>1-最新商品类别列表,2-促销商品类别列表,默认值为1</description>
        <name>sum</name>
        <required>false</required>
        <!-- 可以使用JSP表达式-->
        <rtexprvalue>true</rtexprvalue>
    </attribute>          
  </tag>
  </taglib>

  3.新建调用标签的jsp文件test.jsp
<%@ page language="java" import="java.util.*"pageEncoding="utf-8"%>
<%@taglib prefix="mi" uri="/eportal"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
<head>
<basehref="<%=basePath%>">
<title>My JSP 'index.jsp'starting page</title>
</head>

<body>
<form action="test.action"method="post">
年龄:<input type=textname=age> 
  <input type=submit name=submvalue="查询">
</form>
<mi:john sum="5"/>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值