JSTL 学习、应用记录

来源:互联网 发布:淘宝上:品牌007是什么 编辑:程序博客网 时间:2024/05/18 07:52

 

JSTL标签使用

JSTL 学习、应用记录

原来一直没有看过,我说过我是新手,但是好多资料上似乎也不重视 JSTL 。我看项目源代码发现其中使用到了这个标签库,感觉其还真是方便,页面看起来更加清爽。减少了 JAVA 程序员亲自写的代码量,还真验证了,不懒不做程序员,程序员如果写代码不想着偷懒,那么生活是很无趣的。

下面总结总结,学习学习。:)

JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。

JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记,如 jsp:include 之外,定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ,当您扩展项目或转向另一个项目时您可以重复使用这些标记。您还可以将 taglib 传递给其它开发人员,从而他们可以在自己的网站上使用,或者在您 Web 应用程序的其它部分使用。

      

       JSTL 的目标是为了简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言(默认值是 JAVA 语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些, JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。

 

一. 配置 JSTL

 

包括两个 JAR 文件, jstl.jar 和 standard.jar 。是什么没有必要管,重在应用( 1+1 ? =2 ,我们没有必要深究,只需要知道这么用就行。)。

 

原文引入:

<%@ 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" %>

                                                                

二. Core 标签库

 

Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:

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

 

一般用途的标签有 <c:out> 、 <c:set> 、 <c:remove> 、 <c:cath>

1.<c:out>

用于计算一个表达式并将结果输出。类似于 JSP 中 <%=%> 表达式,或者是 EL 中 $ ${el-expression} 。

 

2.<c:set>

用于设置范围变量的值或者 javabean 对象的属性。

看个实际例子:

<c:set var=”username” value=”lisi” scope=”session”/>

这样就相当于设置了 session 。

 

3.<c:remove>

相对 <c:set> 其作用是移除范围变量。比如: <c:remove var=”nusername” scope=”session”/>

 

4.<c:catch>

 

用于捕获在其中嵌套的操作所抛出的异常对象,并将异常信息保存到变量中。

我们将有可能抛出异常的代码放置到开始标签 :<c:catch> 和结束标签 :</c:catch> 之间。如果其中代码出现异常,异常对象将被捕获,保存在 var 声明的变量中,该变量总是有 page 范围。如果没有发生异常,而 var 所标识的范围变量将被移除。

如果没有指定 var 属性,异常只是简单的被捕获,异常信息并不会被保存。

Eg :

<c:catch var=”exception”>

<%

       int i = 5;

       int j = 0;

       int k=i/j;

%>

</c:catch>

<c:out value=”${exception}” /><br>

<c:out value=”${exception.massage}”/>

后一句相当于: exception.getMessage()

 

条件标签包括 <c:if><c:choose><c:when><c:otherwise>

1.<c:if>

用于实现 java 中的 if 语句功能。

 

<c:if test=”${user.visitCount==1}”>

       This is your first visit .

</c:if>

 

若为 true ,会打印中间部分。也可以声明 var ,方便下一步判断。

<c:if test=”${param.name==’admin’}” value=”result”/>

<c:out value=”${result}” />

 

2.<c:choose>

<c:choose> 和 <c:when> 、 <c:otherwise> 一起实现互斥条件执行,类似于 java 中的 if else.

<c:choose> 一般作为 <c:when> 、 <c:otherwise> 的父标签。

eg :

<c:choose>

       <c:when test="${row.v_money<10000}">

              初学下海

       </c:when>

       <c:when test="${row.v_money>=10000&&row.v_money<20000}">

              身手小试

       </c:when>

       <c:otherwise>

              商业能手

       </c:otherwise>

</c:choose>

 

迭代标签 迭代标签有 <c:forEach> 和 </c:forEach>

 

// 遍历记录集

<c:forEach items="${finalResult.rows}" var="row">       

<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++;%>     

</c:forEach> 

 

也可以设定固定次数。

<c:forEach var =”i” begin=”100 “ end= “110”>

       ${i}

</c:forEach>

如果再加个 step= “ 2 ”那么每次增长为 2 。

 

三. sql 标签

 

设置数据源:

<sql:setDataSource dataSource="proxool.breadTycoon" />

// 将数据库某查询的结果声明为一个变量

<sql:query var="finalResult" >

    select player_name,money from tb_player order by money DESC LIMIT 10   

</sql:query>

       然后可以:

  <c:forEach items="${ finalResult.rows}" var="row" varStatus="s">

        advCosts[${s.index}]=${row.adv_cost};

   </c:forEach>

       数据更新标签:

<sql:update>  

                call proc_set_role_salespro(?,?,?,?,?);

                <sql:param value="30"/>

                <sql:param value="39"/>

                <sql:param value="<%=spID%>"/>

                <sql:param value="<%=productID%>"/>

                <sql:param value="1"/>               

            </sql:update>

 

<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">

       <c:set value="${channelCN[0]}" var="channelTotal"/>

</c:forEach>

 

调用存储过程更新数据库:

 

<c:if test="${param.changsubmit!=null}" >

<c:forEach items="${paramValues.pro_id}" var="getpro_id" varStatus="getparamsta">

<sql:update>

 

call proc_set_role_product(?,?,?,?,?,?,?,?);

 

<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>

四. 格式化标签

 

<fmt: formatNumber value =”12.3” pattern=”.000”/>

将输出 12.300. 应用样式 ”.000”, 将使格式化后的小数部分有 3 位。不足 3 位将以 0 补齐。

 

       <fmt:formatDate value=”<%=new java.util.Date() %>” type=”date” />

       格式化的结果是: 2007-5-27 .

<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

 

 

 

补充知识点:

 

1. 替换 request.getParameter("test"):

<c:if test="${param.test!=null}" >

<c:out value="${param.test}" />

</c:if>

 

2. <c:redirect url="a.jsp">

 

3.<c:redirect url="/max.jsp" context="/ch16">

<c:param name="name1" value="665"/>

<c:param name="name3" value=" 斯蒂芬 "/>

</c:redirect>

 

4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">

${name}

</c:forTokens>

                                                                                                                                                                                                                                                             

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大学体育考试不及格怎么办 大四体育挂科怎么办 大四体育没过怎么办 大二体育挂了怎么办 大学体育刚刚及格怎么办 大学体育课没选怎么办 大专挂科拿不到毕业证怎么办 大学专业课挂科怎么办 专科重修没过怎么办 大学毕业证没领怎么办 大一数学挂科怎么办 大学体育课挂了怎么办 大一考试挂科怎么办 一年级孩子考试不及格怎么办 孩子一年级数学不及格怎么办 一年级孩子考试紧张怎么办 健身动作不标准怎么办 足球赛踢平了怎么办 踢球指甲淤血了怎么办 初中一年级成绩差怎么办 着火了怎么办小班教案 小孩爱玩游戏怎么办 幼儿上学哭闹老师怎么办 孩子不喜欢上幼儿园怎么办 幼儿喜欢脱鞋怎么办 幼儿在教室乱跑怎么办 转学学校不接收怎么办 留守儿童成绩差怎么办 感冒鼻孑堵咳嗽哮喘怎么办 二年级数学报怎么办 不敢翻前滚翻怎么办啊 大学全挂了怎么办 幼儿园热了怎么办教案 幼儿园小班热了怎么办教案 高考艺术生色弱怎么办 雾眉后出现白棱怎么办 lol皮肤重复了怎么办 怕篮球砸到怎么办 前滚翻向一侧偏怎么办 大腿肌肉比较发达怎么办 学计算机老了怎么办