JavaEE中继承BodyTagSupport实现标签

简介:

实现的效果是将标签内的文字大写。标签一般执行顺序:doStartTag()->doAfterBodyTag()->doEndTag()->执行下面的网页。

toUpperTag.java

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * @author XY
 */
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>

 

当然也可以将大写后的结果直接输出,修改对应的代码如下:

/**
 * @author XY
 */
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>

实现标签不仅仅可以用这种方法,还有很多种方法,请读者查阅。


目录
相关文章
|
存储 机器学习/深度学习 分布式计算
HDFS Federation简介
背景 熟悉大数据的人应该都知道,HDFS 是一个分布式文件系统,它是基于谷歌的 GFS 思路实现的开源系统,它的设计目的就是提供一个高度容错性和高吞吐量的海量数据存储解决方案。在经典的 HDFS 架构中有2个 NameNode 和多个 DataNode 的,如下: 从上面可以看出 HDFS 的架构其实大致可以分为两层: Namespace:由目录,文件和数据块组成,支持常见的文件系统操作,例如创建,删除,修改和列出文件和目录。
|
10月前
|
IDE 编译器 开发工具
C/C++开发环境
C/C++开发环境
240 4
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
562 3
|
10月前
|
存储 弹性计算 固态存储
阿里云服务器按量付费是什么?划算吗?
阿里云ECS按量付费模式,先使用后付费,按小时结算,适合临时扩展、测试、电商抢购等短期应用。开通需账户余额不低于100元。实例、镜像、云盘、带宽等支持按量计费,价格根据配置和地区而异。可随时转为包年包月。
1801 1
|
机器学习/深度学习 人工智能 自然语言处理
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
943 0
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
|
网络协议 应用服务中间件 API
CentOS7.5 手动部署Ceph RGW
目    录 1     设备列表... 1 2     Ceph RGW 部署... 1 2.1     使用civetweb配置... 2 2.2     使用nginx配置... 5   本文主要记录一下手动部署rgw的过程,环境是使用的之前手动部署的ceph环境,之前的环境部署可以参考以下链接https://yq.aliyun.com/articles/604372   Ceph RGW(即RADOS Gateway)是Ceph对象存储网关服务,是基于LIBRADOS接口封装实现的FastCGI服务,对外提供存储和管理对象数据的Restful API。
8010 0
|
机器学习/深度学习 运维 算法
时序分析五边形战士!清华提出TimesNet:预测、填补、分类、检测全面领先|ICLR 2023(2)
时序分析五边形战士!清华提出TimesNet:预测、填补、分类、检测全面领先|ICLR 2023
2160 0
|
存储 机器学习/深度学习 缓存
阿里云服务器8核32G配置可选实例规格详解及优惠价格表(2023年更新)
阿里云服务器8核32G配置多少钱?可选实例规格有哪些?根据阿里云公布的2023年新版收费标准及活动价格来看,阿里云服务器8核32G配置活动价格最是共享型s6实例204.66元3个月,年付3274.56元/1年,现在购买还可享受立减20元-50元的优惠,购买后再送4.5折升级权益1次。阿里云服务器8核32G配置的云服务器可选的规格有33个,不同实例的价格有所不同,下面是8核32G配置可选实例规格详解及优惠价格表。
阿里云服务器8核32G配置可选实例规格详解及优惠价格表(2023年更新)
为什么连续偶函数的原函数之一是奇函数,连续的奇函数的原函数都是偶函数并证明
为什么连续偶函数的原函数之一是奇函数,连续的奇函数的原函数都是偶函数并证明
514 0
为什么连续偶函数的原函数之一是奇函数,连续的奇函数的原函数都是偶函数并证明
|
存储 Unix Linux
Linux磁盘和文件系统知识总结
Linux磁盘和文件系统知识总结
616 0