关键字:JSTL标签、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:import>、<c:otherwise>、<c:out>、<c:param>、<c:redirect>、<c:remove>、<c:url>、<c:when>、<c:set>、<c:catch>
原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。我看项目源代码发现其中使用到了这个标签库,感觉其还真是方便,页面看起来更加清爽。减少了 JAVA 程序员亲自写的代码量,还真验证了,不懒不做程序员,程序员如果写代码不想着偷懒,那么生活是很无趣的。
下面总结总结,学习学习。:)
JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。
JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将 taglib 传递给其它开发人员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使用。
<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
一.<wbr>配置 JSTL</wbr>
<wbr></wbr>
包括两个 JAR 文件, jstl.jar 和 standard.jar 。是什么没有必要管,重在应用( 1+1 ? =2 ,我们没有必要深究,只需要知道这么用就行。)。
<wbr></wbr>
原文引入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
二.<wbr><span style="line-height:normal">Core 标签库</span></wbr>
<wbr></wbr>
Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:
<%@ taglib rui=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<wbr></wbr>
一般用途的标签有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>
1.<c:out>
用于计算一个表达式并将结果输出。类似于 JSP 中 <%=%> 表达式,或者是 EL 中 $ ${el-expression} 。
<wbr></wbr>
2.<c:set>
用于设置范围变量的值或者 javabean 对象的属性。
看个实际例子:
<c:set var=”username” value=”lisi” scope=”session”/>
这样就相当于设置了 session 。
<wbr></wbr>
3.<c:remove>
相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>
<wbr></wbr>
4.<c:catch>
<wbr></wbr>
用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。
我们将有可能抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而 var 所标识的范围变量将被移除。
如果没有指定 var 属性,异常只是简单的被捕获,异常信息并不会被保存。
Eg :
<c:catch var=”exception”>
<%
<wbr><wbr><wbr><wbr><wbr><wbr>int i = 5;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>int j = 0;</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>int k=i/j;</wbr></wbr></wbr></wbr></wbr></wbr>
%>
</c:catch>
<c:out value=”${exception}” /><br>
<c:out value=”${exception.massage}”/>
后一句相当于: exception.getMessage()
<wbr></wbr>
条件标签包括 <c:if><c:choose><c:when><c:otherwise>
1.<c:if>
用于实现 java 中的 if 语句功能。
<wbr></wbr>
<c:if test=”${user.visitCount==1}”>
<wbr><wbr><wbr><wbr><wbr><wbr>This is your first visit .</wbr></wbr></wbr></wbr></wbr></wbr>
</c:if>
<wbr></wbr>
若为 true ,会打印中间部分。也可以声明 var ,方便下一步判断。
<c:if test=”${param.name==’admin’}” value=”result”/>
<c:out value=”${result}” />
<wbr></wbr>
2.<c:choose>
<c:choose> 和 <c:when> 、 <c:otherwise> 一起实现互斥条件执行,类似于 java 中的 if else.
<c:choose> 一般作为 <c:when> 、 <c:otherwise> 的父标签。
eg :
<c:choose>
<wbr><wbr><wbr><wbr><wbr><wbr><c:when test="${row.v_money<10000}"></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>初学下海</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr></c:when></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><c:when test="${row.v_money>=10000&&row.v_money<20000}"></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>身手小试</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr></c:when></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><c:otherwise></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>商业能手</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr></c:otherwise></wbr></wbr></wbr></wbr></wbr></wbr>
</c:choose>
<wbr></wbr>
迭代标签
迭代标签有<wbr><c:forEach></wbr><wbr>和 </c:forEach></wbr>
<wbr></wbr>
// 遍历记录集
<c:forEach items="${finalResult.rows}" var="row"><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<tr class="<%=tdClass[(rank+1)%2]%>">
<td align="center"><span><%=rank%> </span></td>
<td align="center"><span ><c:out value="${row.player_name}"/></span> </td>
<td align="center"><span > ¥ <c:out value="${row.money}"/></span></td>
</tr>
<%rank++;%><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
</c:forEach>
<wbr></wbr>
也可以设定固定次数。
<c:forEach var =”i” begin=”100 “ end= “110”>
<wbr><wbr><wbr><wbr><wbr><wbr>${i}</wbr></wbr></wbr></wbr></wbr></wbr>
</c:forEach>
如果再加个 step= “ 2 ”那么每次增长为 2 。
<wbr></wbr>
三.<wbr>sql 标签</wbr>
<wbr></wbr>
设置数据源:
<sql:setDataSource dataSource="proxool.breadTycoon" />
// 将数据库某查询的结果声明为一个变量
<sql:query var="finalResult" >
<wbr><wbr><wbr>select player_name,money from tb_player order by money DESC LIMIT 10<wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
</sql:query>
<wbr><wbr><wbr><wbr><wbr><wbr>然后可以:</wbr></wbr></wbr></wbr></wbr></wbr>
<c:forEach items="${ finalResult.rows}" var="row" varStatus="s">
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>advCosts[${s.index}]=${row.adv_cost};</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr></c:forEach></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>数据更新标签:</wbr></wbr></wbr></wbr></wbr></wbr>
<sql:update><wbr><wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>call proc_set_role_salespro(?,?,?,?,?);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><sql:param value="30"/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><sql:param value="39"/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><sql:param value="<%=spID%>"/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><sql:param value="<%=productID%>"/></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><sql:param value="1"/><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></sql:update></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
<sql:query var="queryAllChannelCount">
SELECT COUNT(*) as total FROM tb_channel WHERE game_id=? AND begin_round<func_cur_round(?) AND player_id=? AND channel_flag=0
<sql:param value="${gameID}"/>
<sql:param value="${gameID}"/>
<sql:param value="${playerID}"/>
</sql:query>
<c:forEach items="${queryAllChannelCount.rowsByIndex}" var="channelCN">
<wbr><wbr><wbr><wbr><wbr><wbr><c:set value="${channelCN[0]}" var="channelTotal"/></wbr></wbr></wbr></wbr></wbr></wbr>
</c:forEach>
<wbr></wbr>
调用存储过程更新数据库:
<wbr></wbr>
<c:if test="${param.changsubmit!=null}" >
<c:forEach items="${paramValues.pro_id}" var="getpro_id" varStatus="getparamsta">
<sql:update>
<wbr></wbr>
call proc_set_role_product(?,?,?,?,?,?,?,?);
<wbr></wbr>
<sql:param value="${gameID}"/>
<sql:param value="${playerID}"/>
<sql:param value="${getpro_id}"/>
<sql:param value="${getpro_id}"/>
<sql:param value="${paramValues.pro_sort[getparamsta.index]}"/>
<sql:param value="${paramValues.price[getparamsta.index]}"/>
<sql:param value="${paramValues.output[getparamsta.index]}"/>
<sql:param value="0"/>
</sql:update>
</c:forEach>
</c:if>
四. 格式化标签
<wbr></wbr>
<fmt: formatNumber value =”12.3” pattern=”.000”/>
将输出 12.300. 应用样式 ”.000”, 将使格式化后的小数部分有 3 位。不足 3 位将以 0 补齐。
<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><fmt:formatDate value=”<%=new java.util.Date() %>” type=”date” /></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>格式化的结果是: 2007-5-27 .</wbr></wbr></wbr></wbr></wbr></wbr>
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”time” />
格式化的结果是: 9:25:11
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”both” />
格式化的结果是: 2007-5-27 9:25:11
<wbr></wbr>
<wbr></wbr>
<wbr></wbr>
补充知识点:
<wbr></wbr>
1. 替换 request.getParameter("test"):
<c:if test="${param.test!=null}" >
<c:out value="${param.test}" />
</c:if>
<wbr></wbr>
2. <c:redirect url="a.jsp">
<wbr></wbr>
3.<c:redirect url="/max.jsp" context="/ch16">
<c:param name="name1" value="665"/>
<c:param name="name3" value=" 斯蒂芬 "/>
</c:redirect>
<wbr></wbr>
4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">
${name}
</c:forTokens>
<wbr></wbr>
from:http://www.blogjava.net/JAVA-HE/archive/2007/05/27/120344.html
相关推荐
标题:“C语言if语句教学设计.pdf” 描述:“C语言if语句教学设计.pdf” 标签:“技术及资料” 在编程教学中,if语句是控制结构的基础,它允许程序根据条件表达式的真假来选择不同的执行路径。在C语言中,if语句是...
总结来说,`if-else`条件语句在编译器设计中通过递归下降法转换成三地址码,涉及了语法分析、语义分析和代码生成等多个关键步骤。在实际的课程设计项目中,学生需要熟悉这些概念,并动手实践,从而提升自己的编程和...
你可以根据需要在自定义标签中加入`if-else`和遍历逻辑,以适应各种显示需求。 综上所述,`if-else`和遍历是JSP编程中不可或缺的部分,它们帮助我们根据条件执行不同的操作,并有效地处理数据。自定义标签则进一步...
本示例主要讲解了如何使用自定义标签实现`if-else`逻辑以及遍历操作。 首先,自定义标签的实现通常基于`SimpleTagSupport`类,它是JSP API提供的一种简化标签处理的抽象基类。例如,下面的`SimpleDemo1`类展示了...
3. `[JMP, endLabel]` —— 在ELSE部分之前,跳转到结束标签,用于跳过ELSE代码块。 4. `[code block 1的四元式序列]` 5. `[trueLabel:]` —— 标记`code block 1`的开始。 6. `...` 7. `[END, endLabel]` —— 结束...
本篇文章将探讨如何创建和使用包含`if-else`逻辑和遍历功能的自定义标签。 首先,我们来看一个简单的自定义标签的例子。创建一个JSP自定义标签实例类,通常会继承`SimpleTagSupport`类。这个类提供了`doTag()`方法...
`else if`可以用于提供多个条件分支。 - `switch`语句根据表达式的值匹配`case`标签,执行相应的代码块,`default`用于处理没有匹配的情况。 5. **循环语句**: - `goto`语句可以无条件跳转,但通常不推荐使用,...
C语言提供了多种选择结构,最常用的是if语句、if-else语句、嵌套if语句和switch语句。这些结构可以根据条件表达式的真假,决定程序执行的路径。例如,if语句会根据条件表达式的值是真是假来决定执行哪一部分代码;...
在render()中循环数据,根据数据不同展示标签不同 import React from 'react'; const quanList=[ { id:1, buy_price:1,//购买券的价格 quan_price:30,//可抵扣价格 quanName:'仅限(学习机)商品使用', on_time...
C语言提供了丰富的控制结构,包括条件语句(if-else)、循环(for、while)、函数等,使得程序设计灵活高效。此外,C语言具有低级特性,可以直接操作内存,因此常用于系统编程、驱动开发和嵌入式系统。 描述中虽然...
1. **选择控制语句**:`if...else`语句和`switch`语句是C语言中的两种主要选择结构。它们用于根据不同的条件执行不同的代码段。`if`语句用于检查一个条件,如果条件为真,则执行相应的代码,否则执行`else`后面的...
在C语言中,我们通常会通过条件语句(如if-else结构)来实现这样的功能。首先,我们需要定义不同的区间,比如负数区间、零、正数区间、正整数区间、负整数区间等。然后,通过比较数字与零的关系来确定它属于哪个区间...
else if (count == 2) { // 减少 value -= step; if (value ) value = low; // 低限 } SetTagFloat(tagname, value); // 更新值 } return 0; } ``` **3. 调用全局脚本** 最后,在启动画面的“打开画面”...
【C语言培训学习资料总结】 C语言是一种基础的编程语言,尤其适合初学者入门。学习C语言时,首先要了解C源程序的框架。一个标准的C程序通常包括编译预处理(例如包含头文件),主函数`main()`,以及可能的其他辅助...
标签“C/C++ 汇编”则直接指出了文章将要探讨的主要内容是C语言和汇编语言。在阅读以下的笔记内容后,我们可以总结出以下几个方面的知识点: 1. 理解高级语言与机器语言之间的转换。由于高级语言需要转换为机器语言...
- `c:if`:类似于Java的if语句,但不支持else。例如,`<c:if test="测试条件">标签体</c:if>` - 迭代标签: - `c:forEach`:用于遍历集合或数组。例如,`<c:forEach items="集合或数组" var="当前项" begin="起始...
* 在C语言中,标识符是指变量、函数、数组或标签的名称。 * 标识符由字母、数字和下划线组成,且第一个字符不能是数字。 * 标识符的长度不能超过31个字符。 三、变量: * 在C语言中,变量是指存储值的内存单元。 *...