自定义标签的目的:以简单的标签,隐藏复杂的逻辑。
使用自定义标签配置过程:
1. 在对应的web应用下,配置.tld文件,如${webapp}/WEB-INF/tlds/mytaglib.tld,新建tag标签如下:
<tag>
<!--自定义标签名-->
<name>helloWorld</name>
<!--自定义标签处理类-->
<tag-class>domain.HelloWorldTag</tag-class>
<!--自定义标签体为空-->
<body-content>empty</body-content>
</tag>
2. 在web.xml文件中配置标签库信息,这个配置是为了web容器可以定位TLD文件的位置
<jsp-config>
<taglib>
<taglib-uri>/mytaglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/mytaglib.tld</taglib-location>
</taglib>
</jsp-config>
其中,<jsp-config>用于为web应用中的JSP文件提供全局配置信息;<taglib>用于指定JSP页面使用的标签库信息;
两个子元素,<taglib-uri>元素指定在web应用程序中使用的标签库的URI标识,JSP页面的taglib指令通过这个uri
读取到tld文件;<taglib-location>指定TLD文件的位置。
3. 创建自定义标签处理类,必须继承父类javax.servlet.jsp.tagext.SimpleTagSupport,两个要求:(1)如果标签类包含属性,每个属性要有对应的getter和setter方法;(2)重写doTag()方法,这个方法负责生成页面内容
public class HelloWorldTag extends SimpleTagSupport
{
//复写的doTag方法,标签实际处理方法,生成自定义的页面内容
public void doTag()
throws IOException
{
//获取页面输出流,并输出字符串
getJspContext().getOut().write("Hello World " + new java.util.Date());
}
}
注意,在编译时,需要将%CATALINA_HOME%/lib/jsp-api.jar包添加到环境变量CLASSPATH中,这样编译时才能找到处理包,
否则会报错。
4. 页面中引用该自定义标签
<%@ taglib uri="/mytaglib" prefix="mytag" %>
<html>
<head>
<title>自定义标签示范</title>
</head>
<body bgcolor="#ffffc0">
<h2>下面显示的是自定义标签中内容</h2>
<!--使用标签,其中mytag是标签前缀,根据taglib的编译指令,
mytag前缀由/mytaglib的标签库处理-->
<mytag:helloWorld /><br/>
</body>
</html>
通过以上操作步骤,启动服务器,执行结果如下(这个导入图片真扯,只能把内容贴过来了,难道是我不会用???):
下面显示的是自定义标签中内容
Hello World Sun Mar 09 15:04:23 CST 2014
总结:以上自定义标签的demo的整体运行过程是,用户请求该页面(mytag.jsp),读取到自定义标签
<%@ taglib uri="/mytaglib" prefix="mytag" %>,web应用到web.xml文件中根据uri标识符定位
到标签库(mytaglib.tld)的具体位置,然后根据标签名称helloWorld定为到具体的标签,
在标签中指定标签处理类,根据标签处理类的处理内容展现页面结果。