标签库文件是一个标准的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.编写标签实现类
2.在WEB-INF目录下,或WEB-INF的子目录下建立helloworld.tld文件,即自定义标签的说明文件
3.建立没有带属性标签HelloTag
注意:1.标签处理必须置于包中,不能是裸体类
<--------------------------------------------------------------------------->
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 {
}
<----------------------------------------------------------------------------------------->
新建一个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>
</html>
<------------------------------------------------------------------------------------------->
再建一个相对应的tld文件helloworld.tld
<?xml version="1.0" encoding="GB18030"?>
<taglibxmlns="http://java.sun.com/xml/ns/j2ee"
jsptaglibrary_2_0.xsd"
</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},
}
}
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"
<%@ 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>
</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"
<%@ 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>
</form>
<mi:john sum="5"/>
</body>
</html>