JSP 自定义标签
使用JSP中的自定义标签,可以用简单的标签来封装复杂的功能,通过对标签的java类的定义,就可以在jsp中使用自定义的标签,有利于团队协作开发。
开发JSP标签主要有以下几个步骤
1.开发自定义标签处理类(java开发)
2.配置*.tld文件,该文件对应着一个标签库,存放各个标签的配置
3.在JSP文件中使用jsp标签
自定义标签的处理类需要继承一个父类
javax.servlet.jsp.tagext.SimpleTagSupport
并且要:
1.若标签类包含属性,则要提供getter和setter方法
2.重写doTag()方法,该方法为标签的处理过程,负责生成页面内容
1,开发标签类
以下为一个输出HelloWord的自定义标签
public class HelloWorldTag extends SimpleTagSupport//继承父类
{
public void doTag() //重写doTag方法,生成页面
{
getJspContext().getOut().write("hello world" + java.util.Date());
}
}
doTag()方法用到了几个SimpleTagSupport提供的方法。
getJspContext() 负责返回页面的JspContext,
官方文档对JspContext的描述如下:
The JspContext provides a number of facilities to the page/component author and page implementor, including:
1.a single API to manage the various scoped namespaces
提供管理名称空间的API
2.a mechanism to obtain the JspWriter for output
可以获得用来输出的JspWriter实例
3.a mechanism to expose page directive attributes to the scripting environment
上面的代码中即使用了通过JspContext获得输出的功能。
2,配置tld文件
tld文件应放在WEB-INF下或其任意子路径下
对于标签的定义示例如下
<taglib>
<uri>http://www.abc.com/taglib</uri>
<tag>
<name>helloWorld</name>
<tag-class>HelloWorldTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
其中taglib包裹着tag标签。
taglib中最重要的是uri,是标签库的唯一标识
其中name标签表示该标签的名称
tag-class标签表示该标签的处理类
body-content指定标签体内容,该标签的内容可以是以下几个
1.tagdependent 指定标签处理类自己负责处理标签体
2.empty 指定该标签只能作为空标签使用,并且不能有注释
3.scriptless 指定该标签可以是静态html元素,表达式语言,但不允许是JSP脚本
4.JSP 指定该标签的标签体是否可以使用JSP脚本
3,使用自定义标签
......
<%@ taglib uri="http://www.abc.com/taglib" prefix="mytag" %>
<mytag:helloWorld/>
首先要在jsp文件中指定所用的标签库和短名
然后就可以直接用<标签库:标签名/>的方法使用标签