JavaServerPages篇02 —— JSTL

欢迎来到我的主页:【一只认真写代码的程序猿

本篇文章收录于专栏【JSP相关

如果这篇文章对你有帮助,希望点赞收藏加关注啦~

 本文所有内容相关代码都可在以下仓库中找到:

https://github.com/Echo-Nie/JSPLearn


1 JSTL

1.1 标签使用

Java Server Pages Standard Tag Libray(STL):JSP 标准标签库。

是一个定制标签类库的集合,用于解决一些常见的问题,例如迭代一个映射或者集合、条件测试、XML处理,甚至数据库和访问数据库操作等。

核心标签库:包含web常见工作,如循环、表达式赋值、基本输入输出等。

格式化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化。

要在JSP中使用JSTL类库,必须使用下面的taglib指令:

<%@taglib uri="" prefix="" %>
如:
<%@taglib uri="http://java.sun.com/jsp/jstl/cire" prefix="c" %>

前缀可以是任意内容,遵循规范形成相同的码风会比较好,使用实现设计好的前缀即可。

在官网(Index of /dist/jakarta/taglibs/standard/binaries)下载好Jakarta-taglib-standard-1.1.2.zip解压后将lib下的两个jar包拷贝到指定目录下

1.2 条件动作标签

条件动作指令用于处理页面的输出结果依赖于某些输入值的情况,在lava 中是利用 if、 if..else 和 switch 语句来进行处理的。在JSTL中也有4个标签可以执行条件式动作指令:if、choose、when和otherwise。

if标签

if它的主体内容,测试结果保存在一个Boolean 对象中,并创建一个限域变量来引用 Boolean 对象。可以利用 var 属性设置限域变量名,利用 scope 属性来指定其作用范围。

<c:if test="<boolean>" var="<string>" scope="<string>">

...

</c:if>
<html>
<head>
    <title>JSTL的使用</title>
    <%--
        首先拷贝两个jar包到web-INF的lib目录下;再导入jst和standard的jar包到项目中
    --%>
</head>
<body>
<c:if test="${1==1}">
    Hello JSTL
</c:if>
<%
    request.setAttribute("num", 10);
    request.setAttribute("num1", 10);
%>


<c:if test="${num>0}">
    数据大于0
</c:if>

<br>
<c:if test="${num>100}" var="flag" scope="request"></c:if>
${flag}--${pageScope.flag}${requestScope.flag}--${sessionScope.flag}

<c:if test="${num1>20}" var="flag1" scope="request"></c:if>
${flag1}--${requestScope.flag1}--${sessionScope.flag1}
<%--    false--false--  --%>
<%--
    test条件判断,操作的是域对象,接受返回结果是boolean类型的值
    var是限域对象,存放在作用域中的变量名,用来接受判断结果的值
    scope是限域变量名的范围,page-request-session-application
--%>
</body>
</html>
属性描述是否必要默认值
test条件
var用于存储条件结果的变量(限域变量名)
scope可取值:page|request|session|applicationpage

choose-when-otherwise标签

相当于就是switch-case;choose 和 when 标签的作用与lava 中的 switch 和 case 关键字相似,用于在众多选项中做出选择。也就是说:他们为相互排斥的条件式执行提供相关内容。

switch语句中有case,而choose标签中对应有when,switch语句中有default,而choose标签中有otherwise.

<c:choose>
	<c:when test="<boolean>">

	...

	</c:when>
	<c:when test="<boolean>">
	
	...
	
	</c:when>
	
	...
	
	<c:otherwise>
		...
	</c:otherwise>
</c:choose>

1.3 迭代标签

forEach 是将一个主体内容迭代多次,或者迭代一个对象集合。可以迭代的对象包括所有的java.util.Collection 和java.util.Map 接口的实现,以及对象或者基本类型的数组。

还可 以迭代java.util.lterator 和 java.util.Enumeration,但不能在多个动作指令中使用 lterator 或者 Enumeration,因为lterator 或者 Enumeration都不能重置(reset)。各属性含义如下:

属性描述是否必要默认值
items要被循环的数据
begin开始的元素(0=第一个元素,1=第二个元素)0
end最后一个元素(0=第一个元素,1=第二个元素)Lastelement
<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>
    varstatus="<string>"
</c:forEach>
<!-- 遍历主体内容多次 -->

<c:forEach begin="0" end="10" var="i">
    标题 $ti<br>
</c:forEach>

<!-- 循环 -->
<%
List<String> list = new ArrayList<String>();

for (int i = 1; i <= 10; i++) {
    list.add("A:" + i);
}

pageContext.setAttribute("li", list);
%>

<!-- 循环集合 -->

<c:forEach items="${1i}" var="item">
    ${item}
</c:forEach>

<hr>

<table align="center" width="800" border="1" style="border-collapse: collapse;">
    <tr>
        <th>名称</th>
        <th>当前成员下标</th>
        <th>当前成员循环数</th>
        <th>是否第一次被循环</th>
        <th>是否最后一次被循环</th>
    </tr>
    <c:forEach items="${1i}" var="item" varStatus="itemp">
        <tr>
            <td>${item}</td>
            <td>${itemp.index}</td>
            <td>${itemp.count}</td>
            <td>${itemp.first}</td>
            <td>${itemp.last}</td>
        </tr>
    </c:forEach>
</table>

<!-- 遍历Map -->

<%
Map<String, Object> map = new HashMap<String, Object>();
map.put("map1", "aaa");
map.put("map2", "bbb");
map.put("map3", "ccc");
pageContext.setAttribute("map", map);
%>

<c:forEach items="${map}" var="mymap">
    键:${mymap.key} -- 值:${mymap.value} <br>
</c:forEach>

2 格式化动作标签(偏)

JSTL提供了格式化和解析数字和日期的标签,我们讨论里面有:formatNumber、formatDate、parseNumber及parseDate.

2.1 formatNumber

用于格式化数字,百分比,货币。该标签用指定的格式或精度来格式化数字,将数值型数据转换成指定格式的字符串类型。语法模板如下:

<fmt :formatNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"/>
属性描述是否必要默认值
value要显示的数字
typenumber,currency, 或 percent类型Number
var存储格式化数字的变量Print to page
scopevar属性的作用域page
<fmt:formatNumber value="10" type="currency" var="num"/> ${num} <br>
<fmt:formatNumber value="10" type="percent" /><br>
<fmt:formatNumber value="10" type="currency" /><br>
<%--设置时区--%>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="10" type="currency"/>

2.2 formatDate

标签用于使用不同的方式格式化日期。将Rate型数据转换成指定格式的字符串类型。

属性描述是否必要默认值
value要显示的日期
typeDATE, TIME, 或 BOTHdate
dateStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
timeStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
var存储格式化日期的变量名页面
scope存储格式化日志变量的范围页面
代码描述实例
y年份小于10,显示不具有前导零的年份。2002
M月份数字。一位数的月份没有前导零。April & 04
d月中的某一天。一位数的日期没有前导零。20
h12小时制的小时。一位数的小时数没有前导零。12
H24小时制的小时。一位数的小时数没有前导零。0
m分钟。一位数的分钟数没有前导零。45
s秒。一位数的秒数没有前导零。52
<%--格式化日期--%>
<%
    request.setAttribute("myDate",new Date());
%>
${myDate} <br>
<fmt:formatDate value="${myDate}"/> <br>
<fmt:formatDate value="${myDate}" type="date"/> <br>
<fmt:formatDate value="${myDate}" type="time"/> <br>
<fmt:formatDate value="${myDate}" type="both"/> <br>
<fmt:formatDate value="${myDate}" type="both"/> <br>
<fmt:formatDate value="${myDate}" type="both" dateStyle="FULL"/> <br>
<fmt:formatDate value="${myDate}" type="both" dateStyle="short"/> <br>
<fmt:formatDate value="${myDate}" pattern="yyyy-MM-dd"/> <br>

2.3 parseNumber与Date

parseNumber标签用来解析数字,百分数,货币。将数字、货币或百分比类型的字符串转换成数值型。

<fmt:parseNumber
	value="<string>"
	type="<string"
	var="<string>"
	scope="<string>"/>
属性描述是否必要默认值
value要解析的数字Body
typeNUMBER, CURRENCY, 或 PERCENTnumber
var存储待解析数字的变量Print to page
scopevar属性的作用域page
<%--parseNumber的使用--%>
<%--<fmt:setLocale value="zh_CN"/>--%>
<%--转换回中国时区,就可以用¥--%>
<fmt:parseNumber value="100"/><br>
<fmt:parseNumber value="100" type="number"/><br>
<fmt:parseNumber value="100%" type="percent"/><br>
<fmt:parseNumber value="$10.00" type="currency"/><br>
<%--因为前面设置了US时区,这里不能用“¥”,会报错,必须用对应时区的货币标识符才可以--%>

parseDate:解析日期,把指定格式的字符串转成日期。

<fmt:parseDate value="2024-12-11" type="date"/><br>
<fmt:parseDate value="2024/12/11" pattern="yyyy/MM/dd"/><br> 
内容概要:本文详细介绍了如何使用Matlab对地表水源热泵系统进行建模,并采用粒子群算法来优化每小时的制冷量和制热量。首先,文章解释了地表水源热泵的工作原理及其重要性,随后展示了如何设定基本参数并构建热泵机组的基础模型。接着,文章深入探讨了粒子群算法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制热模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源热泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源热泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制热量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同时,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Echo-Nie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值