一、JSTL标签库介绍

JSTL标签库的使用时为了弥补HTML标签的不足,规范自定义标签的使用而诞生的。使用JSTL标签的目的是不希望在JSP中出现Java逻辑代码。

二、JSTL标签库的分类

1.核心标签(用的最多)

2.国际化标签(I18N格式化标签)

3.数据库标签(SQL标签,不用)

4.XML标签(不用)

5.JSTL函数(EL函数)

三、核心标签库的使用

JSTL的核心标签一个有13个,使用这些标签能够完成JSP页面的基本功能,减少编码的工作。

从功能上可以分为4类: 表达式控制标签、流程控制标签、循环标签、URL标签。

表达式控制标签: out标签、set标签、remove标签、catch标签。

流程控制标签: if标签、choose标签、when标签、otherwise标签。

循环标签: forEach标签、forTokens标签。

URL标签: import标签、url标签、redirect标签、param标签。

在JSP引入核心标签库代码如下。

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

1.<c:out>标签

(1)功能

<c:out>标签主要是用来输出数据对象(字符串、表达式)的内容或结果。
     在使用Java脚本输出时常使用的方式为: <% out.println(“字符串”)%> 或者 <%=表达式%> ,在web开发中,为了避免暴露逻辑代码会尽量减少页面中的Java脚本,使用<c:out>标签就可以实现以上功能。

(2)语法

<c:out value="要显示的数据对象" [escapeXml="true|false"] [default="默认值"]/>

一般来说,<c:out>默认会将 <、>、 ’ 、 ” 和 & 转换为 &lt;、&gt;、'、" 和 &amp;。

假若不想转换时,只需要设定<c:out>的 escapeXml 属性为 fasle 就可以了

(3)使用

	<c:out value="Hello JSP 2.0 !! " /> <br>
<c:out value="${ 3 + 5 }" /> <br>
<c:out value="${ param.data }" default="No Data" /> <br>
<c:out value="<h1>有特殊字符</h1>" /> <br>
<c:out value="<h1>有特殊字符</h1>" escapeXml="false" /> <br>

结果:

2.<c:set>标签

(1)功能

<c:set>标签用于把某一个对象存在指定的域范围内,或者将某一个对象存储到Map或者JavaBean对象中。

(2)语法

A:<c:set value="value1" var="name1" [scope="page|request|session|application"]/>

解释: 把一个变量名为name1,值为“value1”的变量存储在指定的scope范围内。

     B: <c:set value="value1" target="JavaBean对象" property="属性名"/>

解释: 把一个值为“value1”赋值给指定的JavaBean的属性名。相当与setter()方法。

假若 value 为 null 时,将由储存变量改为移除变量。
对于A: 由 var 和 scope 所定义的变量,将被移除。

     若 scope 已指定时,则 PageContext.removeAttribute(varName, scope)

若scope 未指定时,则 PageContext.removeAttribute(varName)

对于B

假若 target 为 Map 时,则Map.remove(property)。

假若 target 为 JavaBean 时,property 指定的属性为null。

(3)使用

	<c:set var="number" scope="request" value="${1 + 1}" />
<c:set var="number" scope="session" > ${3 + 5} </c:set>
<c:set var="number" scope="request" value="${ param.number }" />
<c:set target="User" property="name" value="${ param.Username}" />

1.将 2 存入 Request 范围的 number 变量中。
2.将 8 存入 Session 范围的 number 变量中。

3.假若 ${param.number}为 null 时, 则移除 Request 范围的 number 变量; 若${param.number}不为 null 时,则将 ${param.number}的值存入 Request 范围的 number 变量中。

4.假若 ${param.Username}为 null 时,则设定 User(JavaBean)的 name 属性为 null;若不为null 时,则将 ${param.Username}的值存入 User(JavaBean)的 name 属性(setter 机制)。

3.<c:remove>标签

(1)功能

<c:remove>标签用来移除变量。

(2)语法

  <c:remove var="varName" [scope="{ page|request|session|application }"] />

<c:remove var="number" scope="session" />

将 number 变量从 Session 范围中移除。若我们不设定 scope,则<c:remove>将会从 Page、Request、Session 及 Application 中顺序寻找是否存在名称为 number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。

(3)使用

%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <title>My JSP 'index.jsp' starting page</title>
</head> <body> <c:set scope="page" var="num" value="${ 1 + 1}"/>
<c:set scope="request" var="num" value="3"/>
<c:set scope="session" var="num" value="4"/> 初始设置
<table border="1" width="40%"> <tr>
<th>pageScope.num</th>
<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>requestScope.num</th>
<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>sessionScope.num</th>
<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
</tr> </table>
<br><br> <c:out value="<c:remove var='num' scope='page' />之后"/>
<c:remove var="num" scope="page"/> <br><br>
<table border="1" width="40%"> <tr>
<th>pageScope.num</th>
<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>requestScope.num</th>
<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>sessionScope.num</th>
<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
</tr> </table>
<br><br> <c:out value="<c:remove var='num'/>之后"/>
<c:remove var="num"/> <br><br>
<table border="1" width="40%"> <tr>
<th>pageScope.num</th>
<td> <c:out value="${pageScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>requestScope.num</th>
<td> <c:out value="${requestScope.num } " default="NoData"/> </td>
</tr>
<tr>
<th>sessionScope.num</th>
<td> <c:out value="${sessionScope.num } " default="NoData"/> </td>
</tr> </table>
<br><br> </body>
</html>

开始各在 Page、Request 和 Session 三个属性范围中储存名称为 num的变量。然后先使用<c:remove var="num" scope="page" />把 Page 中的 num变量移除,最后再使用<c:remove var="num" />把所有属性范围中num的变量移除。

结果:

4.<c:catch>标签

(1)功能

<c:catch>标签用来处理产生错误的异常状况,并且将错误信息存储起来。

(2)语法

<c:catch [var="varName"]>容易产生异常的代码</c:catch>

<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错误,可以将错误信息储存至 varName 变量中。当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。

(3)使用

<body>

	<c:catch var="errMsg">

	<%
String str = "haha";
int i = Integer.parseInt(str);
%> </c:catch> ${ errMsg } </body>

结果:

5.<c:if>标签

(1)功能

和我们在程序使用的if一样。

(2)语法

A: 没有Body

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>

B:有Body

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
          具体内容

</c:if>

<c:if> 标签必须要有 test 属性,当 test 中的表达式结果为 true 时,则会执行本体内容;如果为 false,则不会执行。例如:${param.username = = 'admin'},如果 param.username 等于 admin时,结果为 true;若它的内容不等于 admin 时,则为 false。

(3)使用

<body>

	<c:if test="${ param.username == 'Tom' }" var="condition" scope="page">

		您好,Tom先生。

	</c:if>
<br>
执行结果为: ${condition}
</body>

结果:

6.<c:choose>、<c:when>、<c:otherwise>标签

(1)功能

<c:choose>、<c:when> 和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when> 和<c:otherwise>标签的父标签来使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

(2)语法

 <c:choose>
<c:when test="条件1">
       //业务逻辑1
</c:when>     <c:when test="条件2">
       //业务逻辑2
</c:when>     <c:when test="条件n">
       //业务逻辑n
</c:when> <c:otherwise>
       //业务逻辑
    </c:otherwise>
 </c:choose>

(3)使用

<body>

	<c:set scope="page" var="grade" value="99"/>

	<c:choose>

		<c:when test="${grade >= 90}">
优秀
</c:when> <c:when test="${ grade >= 80 && grade< 90}">
良好
</c:when> <c:when test="${ grade >= 70 && grade< 80}">
中等
</c:when> <c:when test="${ grade >= 60 && grade< 70}">
及格
</c:when> <c:otherwise>
不及格
</c:otherwise> </c:choose> </body>

7.<c:forEach>标签

(1)功能

该标签根据循环条件遍历集合(Collection)中的元素。

(2)语法

<c:forEach
     var="name"

items="Collection"

varStatus="StatusName"

begin="begin"

end="end"

step="step">

本体内容

</c:forEach>

(3)使用

<body>

	<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
request.setAttribute("list",list);
%> <c:forEach var="item" items="${ list }">
<c:out value="${ item }"/>
</c:forEach> </body>

结果:

aaa bbb ccc ddd

8.<c:forTokens>标签

(1)功能

该标签用于浏览字符串,并根据指定的字符将字符串截取。

(2)语法

<c:forTokens items="strigOfTokens"
            delims="delimiters"

[var="name"

begin="begin" 
            end="end"

step="len" 
            varStatus="statusName"] >

本体内容

</c:forTokens>

(3)使用

<body>

	<c:forTokens var="str" items="北、京、欢、迎、您" delims="、">
<c:out value="${str}"></c:out><br/>
</c:forTokens> </body>

结果:


      京

JavaWeb总结(七)—JSTL标签库的更多相关文章

  1. Java Web(七) JSTL标签库

    在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...

  2. JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)

    JSTL  JSTL简单介绍: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用:   提供给Java Web开发者一个标准通用的标签函数库   和E ...

  3. web开发(七) JSTL标签库

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6432786.html>,在此仅供学习参考之用. 一.为什 ...

  4. JavaWeb基础—EL表达式与JSTL标签库

    EL表达式: EL 全名为Expression Language.EL主要作用 获取数据(访问对象,访问数据,遍历集合等) 执行运算 获取JavaWeb常用对象 调用Java方法(EL函数库) 给出一 ...

  5. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  6. JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

    1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% requ ...

  7. javaweb学习总结(二十八)——JSTL标签库之核心标签

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  8. javaWeb学习总结(9)- JSTL标签库之核心标签

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  9. JavaWeb(五)之JSTL标签库

    前言 前面介绍了EL表达式,其实EL表达式基本上是和JSTL核心标签库搭配一起使用才能发挥效果的.接下来让我们一起来认识一下吧! 在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行 ...

随机推荐

  1. centos快速安装redis

    mkdir redis cd redis wget http://labfile.oss.aliyuncs.com/files0422/redis-2.8.9.tar.gz 解压 tar -xvfz ...

  2. 规范 : login 对象的account

    accountInfo对象是前台pass 给后台,基本上这对象的资源有可能不是完整的. 举个例子:register 需要accountInfo 对象(内容数量是依据项目),但是在login时,不需要给 ...

  3. Laravel 开发笔记

    Laravel 4.2  鉴权使用加盐密码 刚开始接触laravel,发现laravel默认的鉴权模块密码并未加盐处理(密码由password_hash方法创建).所以自己琢磨着对密码加盐.像下面这样 ...

  4. Overlay网络技术之vxvlan

    了解云计算数据中心网络架构的过程中,看到这么一篇不错的关于大二层技术overlay的文章,转载分享给大家! 一. 传统网络面临的问题 随着企业业务的快速扩展需求,IT做为基础设施,快速部署和减少投入成 ...

  5. 算法笔记_066:Kruskal算法详解(Java)

    目录 1 问题描述 2 解决方案 2.1 构造最小生成树示例 2.2 伪码及时间效率分析 2.3 具体编码(最佳时间效率)   1 问题描述 何为Kruskal算法? 该算法功能:求取加权连通图的最小 ...

  6. shell [ff: 未找到命令

    在学习shell脚本时遇到一个问题:  [ff: 未找到命令 相信很多初学者都会遇到,再次说明一下,希望对大家有所帮助: shell脚本代码如下: #!/bin/bash echo -n " ...

  7. wemall app商城源码Android数据的SharedPreferences储存方式

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android数据 ...

  8. 1854: [Scoi2010]游戏

    1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2538  Solved: 905[Submit][Status] ...

  9. SpringMVC中重定向底层原理

      只要将数据放入model中, 也能取到值,原因是model临时放入session域中,当从定向到另一个url时,底层把数据拼接在url地址后面(重定向一定是get请求方式),同时将session域 ...

  10. 读书笔记 effective c++ Item 35 考虑虚函数的替代者

    1. 突破思维——不要将思维限定在面向对象方法上 你正在制作一个视频游戏,你正在为游戏中的人物设计一个类继承体系.你的游戏处在农耕时代,人类很容易受伤或者说健康度降低.因此你决定为其提供一个成员函数, ...