自定义标记是用户定义的JSP语言元素。当一个JSP页面包含一个自定义标签时,它将被转换成一个servlet,标签将被转换成对一个叫做标签处理程序的对象的操作,也就是说,那些操作将在servlet被执行时被Web容器调用。
JSP扩展允许您创建新的标签并将它们直接插入到JSP页面中。JSP 2.0规范中引入了简单的标记处理程序来编写这些定制标记。
您可以继承SimpleTagSupport类并覆盖doTag()方法来开发最简单的自定义标记。
创建”你好”标签
接下来,我们想要创建一个名为
& lt例:你好/>;
要创建定制的JSP标记,您必须首先创建一个处理该标记的Java类。因此,让我们创建一个HelloTag类,如下所示:
包com . run OOB;
导入javax . servlet . JSP . tagext . *;
导入javax . servlet . JSP . *;
导入Java . io . *;
公共类HelloTag扩展SimpleTagSupport {
公共void doTag()抛出JspException,IOException {
JspWriter out = getJspContext()。getOut();
out . println(“你好自定义标签!”);
}
}
下面的代码重写了doTag()方法,其中getJspContext()方法用于获取当前的JspContext对象,而”你好自定义标签!”传递给JspWriter对象。
编译上面的类,并将其***到环境变量CLASSPATH目录中。最后,创建以下标记库::webappsROOTWEB-INFcustom.tld .
& lttaglib & gt
& lttlib-版本& gt1.0 & lt/tlib-version >
& ltJSP-version >2.0 & lt/JSP-version >
& lt简称& gt示例TLD </short-name >
& lt标签& gt
& lt名称& gt你好& lt/name >
& lttag-class >com . run OOB . hello tag </tag-class >
& ltbody-content >empty & lt/body-content >
& lt/tag >
& lt/taglib >
接下来,我们可以在JSP文件中使用Hello标记:
& lt%@ taglib前缀= ”ex & # 8221uri = & # 8221we b-INF/custom . TLD ”% & gt
& lthtml & gt
& lthead & gt
& lttitle & gt自定义标签示例& lt/title >
& lt/head >
& ltbody & gt
& lt例:你好/>;
& lt/body >
& lt/html >
上述程序的输出结果是:
你好自定义标签!
访问标记体
您可以像标准标记库一样在标记中包含消息内容。如果我们想在自定义Hello中包含内容,格式如下:
& lt例:你好& gt
这是消息正文
& lt/ex:Hello >
我们可以用下面的代码修改标签处理类文件:
包com . run OOB;
导入javax . servlet . JSP . tagext . *;
导入javax . servlet . JSP . *;
导入Java . io . *;
公共类HelloTag扩展SimpleTagSupport {
string writer SW = new string writer();
公共void doTag()
抛出JspException,IOException
{
getJspBody()。调用(软件);
getJspContext()。getOut()。println(SW . tostring());
}
}
接下来,我们需要修改TLD文件,如下所示:
& lttaglib & gt
& lttlib-版本& gt1.0 & lt/tlib-version >
& ltJSP-version >2.0 & lt/JSP-version >
& lt简称& gtTLD与身体的例子& lt/short-name >
& lt标签& gt
& lt名称& gt你好& lt/name >
& lttag-class >com . run OOB . hello tag </tag-class >
& ltbody-content >无脚本& lt/body-content >
& lt/tag >
& lt/taglib >
现在,我们可以在JSP中使用修改后的标记,如下所示:
& lt%@ taglib前缀= ”ex & # 8221uri = & # 8221we b-INF/custom . TLD ”% & gt
& lthtml & gt
& lthead & gt
& lttitle & gt自定义标签示例& lt/title >
& lt/head >
& ltbody & gt
& lt例:你好& gt
这是消息正文
& lt/ex:Hello >
& lt/body >
& lt/html >
上述程序的输出结果如下:
这是消息正文
自定义标签属性
您可以在自定义标准中设置各种属性。要接收属性,值自定义标记类必须实现setter方法。JavaBean中的setter方法如下:
包com . run OOB;
导入javax . servlet . JSP . tagext . *;
导入javax . servlet . JSP . *;
导入Java . io . *;
公共类HelloTag扩展SimpleTagSupport {
私有字符串消息;
public void set message(String msg){
this.message = msg
}
string writer SW = new string writer();
公共void doTag()
抛出JspException,IOException
{
如果(消息!= null) {
/*使用属性中的消息*/
JspWriter out = getJspContext()。getOut();
out.println(消息);
}
否则{
/*使用内容正文中的消息*/
getJspBody()。调用(软件);
getJspContext()。getOut()。println(SW . tostring());
}
}
}
属性的名称是”消息”,所以setter方法是setMessage()。现在让我们使用
& lttaglib & gt
& lttlib-版本& gt1.0 & lt/tlib-version >
& ltJSP-version >2.0 & lt/JSP-version >
& lt简称& gtTLD与身体的例子& lt/short-name >
& lt标签& gt
& lt名称& gt你好& lt/name >
& lttag-class >com . run OOB . hello tag </tag-class >
& ltbody-content >无脚本& lt/body-content >
& lt属性& gt
& lt名称& gt消息& lt/name >
& lt/attribute >
& lt/tag >
& lt/taglib >
现在我们可以在JSP文件中使用message属性,如下所示:
& lt%@ taglib前缀= ”ex & # 8221uri = & # 8221we b-INF/custom . TLD ”% & gt
& lthtml & gt
& lthead & gt
& lttitle & gt自定义标签示例& lt/title >
& lt/head >
& ltbody & gt
& lt例如:Hello message = & # 8221这是定制标签”/>
& lt/body >
& lt/html >
以上示例数据输出结果如下:
这是自定义标签
您还可以包括以下属性:
name定义属性的名称。每个标签的是属性名称必须是唯一的。required指定属性是否是必须的或者可选的,如果设置为false为可选。rtexprvalue声明在运行表达式时,标签属性是否有效。type定义该属性的Java类类型 。默认指定为
String
description描述信息fragment如果声明了该属性,属性值将被视为一个
JspFragment
。
以下是指定相关属性的示例:
…..
& lt属性& gt
& lt名称& gtattribute _ name & lt/name >
& lt必需的& gtfalse & lt/required >
& lttype & gtJava . util . date </type >
& ltfragment & gtfalse & lt/fragment >
& lt/attribute >
…..
如果使用两个属性,请按如下方式修改TLD文件:
…..
& lt属性& gt
& lt名称& gtattribute _ name1 & lt/name >
& lt必需的& gtfalse & lt/required >
& lttype & gtJava . util . boolean </type >
& ltfragment & gtfalse & lt/fragment >
& lt/attribute >
& lt属性& gt
& lt名称& gtattribute_name2</name >
& lt必需的& gttrue & lt/required >
& lttype & gtJava . util . date </type >
& lt/attribute >
…..
如果你还是不明白,可以在下面给我留言或者和我讨论QQ群308855039。让我们一起飞吧!
本文来自早川希奈子投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/557119.html