jstl 标签库

本文详细介绍了JSP标准标签库(JSTL)中的c标签、fn函数和fmt标签的使用方法,包括输出、循环、条件判断、数字和日期格式化等核心功能。

一、c标签

1、引入标签库

  • <%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>

2、out输出标签

<c:out name="value" //要输出的表达式
    [escapeXml="true|false"] //特殊字符是否转换为实体码,如>转换为gt
    [default="defaultValue"] //默认值
/>

如果要输出的字符串中包含一段代alert的js脚本,如果直接用el表达式输出的话浏览器会直接执行这个js脚本,这显然是不对的因为破坏了页面结构;那么想要正确输出的话就可以使用c:out标签。

3、set设置标签

  • 将value值设置到javabean对象具体属性上或者map中,或使用自定义变量保存。
<c:set value="value"//设置的值
    var="varname"//保存value值的变量名
    [scope="page|request|session|application"]//存储范围
    [target=""]//value值要设置到的javabean对象或者map对象,必须是el表达式
    [property=""]//javabean属性名或map的key值,与target配合使用
/>

4、remove标签

  • 删除指定范围内的变量。
<c:remove var="varName" 
    scope="page|request|session|application"
/>

5、逻辑标签

<c:if test="el表达式" 
    var="varName"//将test结果保存到var变量中以便后续使用
    [scope="page|request|session|application"]/>

<c:if test="el表达式"
    [var="varName"]
    [scope="page|request|session|application"]>
    body content
</c:if>

<c:choose>
    <c:when test="el表达式1">
        body content1
    <c:when/>
    <c:when test="el表达式2">
        body content1
    <c:when/>
    ....
    <c:otherwise>
        body content3
    </c:otherwise>
</c:choose>

6、forEach遍历标签

<c:forEach items="collection"//被遍历的集合
    [var="varName"]//当前元素变量名
    [varStatus="name"]//包含循环状态的一些信息
    [begin=""]//循环起始索引,默认是0
    [end=""]//循环结束索引,模式是最后一个元素索引
    [step=""]>//每次迭代推进的长度(步长),默认是1
    body content
</c:forEach>

<c:forEach var="item" items="${list}" varStatus="ind"
        begin="0" end="10" step="2">
    ${item} 输出当前元素
    ${item.name}输出当前元素的name属性(如果当前元素是个对象)
    ${ind.index } 索引
    ${ind.count }已经迭代的数量
    ${ind.current }当前迭代对象
    ${ind.first }是否第一个元素
    ${ind.last }是否最后一个元素
</c:forEach>

6.1、foreach中items属性支持的集合

  1. .java.util.Collection:调用iterator()来获得的元素。
  2. java.util.Map:通过java.util.Map.Entry所获得的实例。
  3. java.util.Iterator:迭代器。
  4. java.util.Enumeration:枚举。
  5. 数组。
  6. javax.servlet.jsp.jstl.sql.Result:SQL查询所获得的行。

7、forTokens标签

  • 用户遍历以特定分隔符进行分割的字符串。
<c:forTokens items="string"//要被分割的字符串
    delims=""//分隔符
    [var="varName"]//迭代的当前元素
    [varStatus=""]//包含循环状态的一些信息
    [begin=""]//循环起始索引,默认是0
    [end=""]//循环结束索引,模式是最后一个元素索引
    [step=""]>//每次迭代推进的长度(步长),默认是1
    body content
</c:forTokens>

8、url标签

  • 输出处理过后的url。
<c:url value="url" //要处理的url
    [context=""]//valueurl前面的上下文名称
    [var=""]//处理后的路径存储到哪个变量名中
    [scope="page|request|session|application"]//存储范围
/>

9、redirect标签

<c:redirect url="url" //需要重定向的地址
    context=""//url前面的上下文名称
/>

二、fn函数

1、引入标签库

2、函数

${fn:trim(" hello word ")} //删除字符串开头和结尾的空白字符
${fn:length(string|list)} //返回字符串或列表的长度
${fn:subString(source, beginindex, endindex)} //返回source字符串中beginindex到endindex索引位置的字符串
${fn:subStringAfter(source, target) } //返回target字符串在source字符串中第一次出现位置的后面的所有字符串
${fn:subStringBefore(source, target)} //返回target字符串在source字符串中第一次出现位置的前面的所有字符串
${fn:toLowerCase(source) } //将字符串转换为小写形式
${fn:toUpperCase(source)} //将字符串转换为大写形式
${fn:startsWith(source, target)} //测试source字符串中是否以target字符串开始。
${fn:split(source, ",")} //将source字符串根据指定的分隔符进行分割并返回一个数组,一般配合迭代器使用
${fn:replace(source, target, comment)} //将source字符串中出现的所有target字符串替换为comment字符串
${fn:join(array, ",")} //将数组元素以指定的分隔符连接成一个字符串
${fn:indexOf(source, target)} //查找target字符串在source字符串中第一次出现的索引值
${fn:escapeXml("<>ddd")} //将特殊符号转换为实体表示形式
${fn:endsWith(source, target)} //测试source字符串是否以target字符串结尾
${fn:contains(source, target)} //测试source串中是否包含target串
${fn:containsIgnoreCase(source, target)} //测试source串中是否包含target串

三、fmt标签

1、引入标签库

  • <%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt”%>

2、formatNumber标签

  • 数字格式化标签,可以格式化为number、currency、percent 显示样式。
<fmt:formatNumber value="numericValue"//需要被格式化的字符串或数字
        [type="number|currency|percent"]//要格式化的目标类型
        [pattern=""]//自定义格式
        [currencyCode="CAD|CNY|EUR|JPY|GBP|USD"]//货币编码,CAD:加拿大元,CNY:人民币,EUR:欧元,JPY:日元,GBP:英镑,USD:美元
        [currencySymbol=""]//货币符号,例如$、¥
        [groupingUsed="true|false"]//输出结果中是否包含组分隔符
        [maxIntegerDigits=""]//整数部分最多几位数字
        [minIntegerDigits=""]//整数部分最少几位数字
        [maxFractionDigits=""]//小数部分最多几位数字
        [minFractionDigits=""]//小数部分最少几位数字
        [var=""]//输出结果存储到指定变量的名称
        [scope="page|request|session|application"]//var的存储范围
/>

2.1 、formatNumber示例

3 、formatDate标签

  • 将日期对象格式化为字符串形式。
<fmt:formatDate value="date"//需要被格式化的日期或时间  
    [type="time|date|both"]//格式的是日期、时间、或者两者
    [dateStyle="default|short|medium|long|full"]//预定义日期格式
    [timeStyle="default|short|medium|long|full"]//预定义时间格式
    [pattern=""]//自定义格式
    [timeZone=""]//定义用于显示时间的时区
    [var=""]//格式化后的值存储到变量的变量名称
    [scope="page|request|session|application"]//var变量存储范围
/>

3.1、formatDate示例

<fmt:formatDate value="${isoDate}" type="both"/>//输出: 2004-5-31 23:59:59  
<fmt:formatDate value="${isoDate}" type="date"/>//输出2004-4-1  
<fmt:formatDate value="${isoDate}" type="time"/>//输出: 23:59:59  
<fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/>//输出: 2004-5-31  
<fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/>//输出: 04-5-31  
<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/>//输出: 2004-5-31  
<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/>//输出: 2004年5月31日  
<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>//输出: 2004年5月31日 星期一  
<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/>//输出: 23:59:59  
<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/>//输出: 下午11:59  
<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/>//输出: 23:59:59  
<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/>//输出: 下午11时59分59秒  
<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/>//输出: 下午11时59分59秒 CDT  
<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>//输出: 星期四, 四月 1, 2004 13:30:00 -0600  
<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz"/>//输出: 31 五月 04, 11:59:59 下午 中央夏令时  

3.2、Patter说明

d:   月中的某一天。一位数的日期没有前导零。      
dd:  月中的某一天。一位数的日期有一个前导零。      
ddd: 周中某天的缩写名称,在   AbbreviatedDayNames   中定义。      
dddd:周中某天的完整名称,在   DayNames   中定义。      
M:   月份数字。一位数的月份没有前导零。      
MM:  月份数字。一位数的月份有一个前导零。      
MMM: 月份的缩写名称,在   AbbreviatedMonthNames   中定义。      
MMMM:月份的完整名称,在   MonthNames   中定义。      
y:   不包含纪元的年份。如果不包含纪元的年份小于   10,则显示不具有前导零的年份。      
yy:  不包含纪元的年份。如果不包含纪元的年份小于   10,则显示具有前导零的年份。      
yyyy:包括纪元的四位数的年份。      
gg:  时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。      
h:   2   小时制的小时。一位数的小时数没有前导零。      
hh:  12   小时制的小时。一位数的小时数有前导零。      
H:   24   小时制的小时。一位数的小时数没有前导零。      
HH:  24   小时制的小时。一位数的小时数有前导零。      
m:   分钟、一位数的分钟数没有前导零。      
mm:   分钟、一位数的分钟数有一个前导零。      
s:   秒、一位数的秒数没有前导零。      
ss:  秒、一位数的秒数有一个前导零。   
h:   小时,从1到12,范围:01:00 AM~12:59AMH:    小时,从0到23 ,范围:00:00 AM~23:59AM

4、parseNumber标签

  • 用于将以字符串表示的数字、货币、百分比解析成数字。
<fmt:parseNumber value="numericValue"//被解析的值
    [type="number|currency|percent"]//被解析成什么类型
    [pattern=""]
    [parseLocal=""]
    [integerOnly="true|false"]
    [var=""]
    [scope="page|request|session|application"]
/>

5、parseDate标签

  • 将字符串格式的日期以区分地域的格式转换为对应的日期对象。
<fmt:parseDate value="dateString"
    [type="time|date|both"]
    [dateStyle="default|short|medium|long|full"]
    [timeStyle="default|short|medium|long|full"]
    [pattern=""]
    [timeZone=""]
    [parseLocale=""]
    [var=""]
    [scope="page|request|session|application"]
在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等多个维度,每一条都能传递温暖力量;同时支持自定义修改文案,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最多可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等多个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的
内容概要:本文介绍了一种基于CEEMDAN-GRU的中短期天气预测模型,通过将完全集合经验模态分解自适应噪声(CEEMDAN)与门控循环单元(GRU)相结合,实现对非线性、非平稳气象时间序列的高效建模与精准预测。CEEMDAN用于将原始气象数据(如温度、风速等)自适应分解为多个本征模态函数(IMFs),有效提取多尺度特征并降低噪声干扰;随后,每个IMF分量分别输入独立的GRU网络进行时序建模,最后将各分量预测结果重构为最终输出。该方法显著提升了预测精度、鲁棒性与泛化能力,同时兼顾计算效率和模型可解释性,适用于复杂气象环境下的智能预测任务。文中还概述了模型架构、关键技术挑战及解决方案,并提供了MATLAB实现的部分代码示例。; 适合人群:具备一定信号处理或机器学习基础,从事气象预测、时间序列分析、人工智能应用研究的科研人员与工程师,尤其是关注数据驱动型预测模型开发的技术人员。; 使用场景及目标:①应用于中短期天气要素(如气温、降水、风速)的高精度预测;②解决传统气象模型在非线性、非平稳数据建模中的局限性;③探索CEEMDAN与深度学习融合在多尺度时间序列预测中的实际效能;④为防灾减灾、智慧气象、能源调度等领域提供可靠预测技术支持。; 阅读建议:此资源侧重于方法原理与系统架构设计,建议结合MATLAB代码实践操作,深入理解CEEMDAN分解过程与GRU建模细节,并可通过调整超参数、优化融合策略进一步提升模型性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值