实现的效果是将标签内的文字大写。标签一般执行顺序:doStartTag()->doAfterBodyTag()->doEndTag()->执行下面的网页。
toUpperTag.java
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class toUpperTag extends BodyTagSupport
{
private static final long serialVersionUID = 1L;
// 属性
private String var;
// 标签开始时调用的处理方法
@Override
public int doStartTag() throws JspException
{
// 表示需要处理标签体
return EVAL_BODY_BUFFERED;
}
@Override
public int doAfterBody() throws JspException
{
// 取得标签体对象
BodyContent body = getBodyContent();
// 取得标签体的字符串内容
String content = body.getString();
// 清除标签体中的内容
body.clearBody();
// 将内容转换成大写
content = content.toUpperCase();
// 在pageContext对象中保存变量
this.pageContext.setAttribute(var, content);
// 结束对标签体的处理
return SKIP_BODY;
}
public String getVar()
{
return var;
}
public void setVar(String var)
{
this.var = var;
}
}
xy-tags.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>xyTag</short-name>
<tag>
<name>touppercase</name>
<tag-class>cn.xy.myTag.toUpperTag</tag-class>
<body-content>tagdependent</body-content>
<variable>
<name-from-attribute>var</name-from-attribute>
<variable-class>java.lang.String</variable-class>
<scope>AT_BEGIN</scope>
</variable>
<attribute>
<name>var</name>
<required>true</required>
</attribute>
</tag>
</taglib>
该文件可以放在WEB-INF文件夹下。
xy.jsp
<%@ taglib uri="/WEB-INF/xy-tags.tld" prefix="xy"%>
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<xy:touppercase var="result">abcdefg</xy:touppercase><br>
结果为<%=result%> | ${ result } | ${pageScope.result }
</body>
</html>
当然也可以将大写后的结果直接输出,修改对应的代码如下:
public class toUpperTag extends BodyTagSupport
{
private static final long serialVersionUID = 1L;
// 属性
private String var;
// 标签开始时调用的处理方法
@Override
public int doStartTag() throws JspException
{
// 表示需要处理标签体
return EVAL_BODY_BUFFERED;
}
@Override
public int doAfterBody() throws JspException
{
try
{
// 输出
JspWriter out = bodyContent.getEnclosingWriter();
// 取得标签体对象
BodyContent body = getBodyContent();
// 取得标签体的字符串内容
String content = body.getString();
// 清除标签体中的内容
body.clearBody();
// 将内容转换成大写
content = content.toUpperCase();
// 输出
out.print(content);
// 清除
body.clear();
}
catch (Exception e)
{
e.printStackTrace();
}
// 结束对标签体的处理
return SKIP_BODY;
}
public String getVar()
{
return var;
}
public void setVar(String var)
{
this.var = var;
}
}
<body>
<xy:touppercase var="result">abcdefg</xy:touppercase>
</body>
实现标签不仅仅可以用这种方法,还有很多种方法,请读者查阅。