一、概述

  1、概念

    JSTL标签库,全称是 JSP Standard Tag Library  JSP标准标签库。

    是由 Apache 组织提供的开源的、免费的、不断完善的 JSP 标签。

  2、作用

    用来简化和替换 JSP 页面上的 java 代码(代码脚本),这样使得整个 JSP 页面变得更佳简介。

  3、JSTL 由五个不同的功能的标签库组成

    

    在 JSP 标签库中使用 taglib 指令引入标签库:

CORE 标签库:     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML 标签库: <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
FMT 标签库: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL 标签库: <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
FUNCTIONS 标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

  

二、使用步骤

  1、导入 jstl 相关的jar包

    

  2、引入标签库

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

  3、使用标签

    使用 taglib 指令引入标签库,就可以使用标签了,其中 prefix 用来指定前缀名,可以改变,但是还是用约定俗成的好以下。

    URI 相当于库的唯一标识,因为 JSTL 由多个不同的库组成,使用该属性指定要导入哪个库。

三、常用的 JSTL 标签

  1、<c:out> 标签

    作用:用于计算一个表达式并将结果输出到当前页面

    语法:

格式:<c:out value="" default="" escapeXml=""></:out>

属性说明: ① value:Object 类型,表示要输出的值;

      ② default:object 类型,当 value 为 null 时显示的默认值;

      ③ escaXml:boolean 类型,是否对特殊字符进行转义;

    Demo:

<c:out value="${user.name}" default="" escapeXml="true"></c:out>

  2、<c:set /> 标签

    作用: set 标签用于添加或修改域中的数据

    语法:

添加数据格式: <c:set  scope="" var=""  value="" />

属性说明: ① scope:该属性设置将数据保存到那个域中(四个作用域,);

          page 表示 PageContext 域(默认值);request 表示 Request 域;session 表示 Session 域;application 表示 ServletContext 域

      ② val :该属性设置 key 是什么,表示域中存放的属性名;

      ③ value :设置属性的值;

修改数据格式: <c:set property=""  target=""  value=""></c:set>

属性说明: ①  property :表示指定要修改的对象的属性名;

      ② target:表示要修改的域对象的属性吗(必须是 JavaBean 或 Map);

      ③ value:设置属性的值;

    Demo:

   <%--
<c:set />
作用: set 标签可以往域中保存数据
域对象.setAttribute(key,value);
scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域
var 属性设置 key 是多少
value 属性设置值
property:指定要修改的对象的属性名
target:要修改的域对象的属性名
--%>
保存之前: ${ sessionScope.abc } <br>
<c:set scope="session" var="abc" value="abcValue"/>
保存之后: ${ sessionScope.abc } <br> <%-- <c:set> 修改属性 --%>
   <c:set property="name" target="${user}" value="张三"></c:set>

  2、<c:remvoe>

    作用:用于移除域中的属性

    语法:

格式:  <c:remove var="" scope="">

参数说明:① value:设置要移除的属性的名字

     ② scope:设置要移除属性所在的域,若不指定则删除所有域中的对应属性

    Demo:

 移除所有域中key属性:<c:remove var="key"/>
移除request中的key属性: <c:remove var="key" scope="request"/

  3、<c:if />  标签

    if 标签:用于实现 if 语句的判断功能,相当于 java 代码的 if 语句。

    语法:

格式:<c:if test="表达式" />

属性说明:test 必须属性,接收 boolean 类型的表达式(使用 EL 表达式输出)

        如果表达式为true,则显示 if 标签体内容,如果为false,则不显示标签体内容

    注意:<c:if /> 标签没有else情况,想要else情况,则可以在定义一个c:if标签

    Demo:

 // 往 request 域中存放数据
request.setAttribute("number",4);
// 使用 if 标签显示数据
<c:if test="${number % 2 != 0}"> ${number}为奇数 </c:if> <c:if test="${number % 2 == 0}"> ${number}为偶数 </c:if>

  4、<c:choose> <c:when> <c:otherwise>标签

    作用:多路判断,与 java中的 switch.....case......default 非常类似

    语法:

格式:<c:choose>

      <c:when test="">

        语句

      </c:when>

      <c:otherwise>

        语句

      </c:otherwise>

     </c:choose>

说明:① choose 标签开始选择判断

   ② when 标签标示每一种判断情况,test 属性表示当前这种判断情况的值;

   ③ otherwise 标签表示剩下的其他情况

     注意:

      ① 标签里不能使用 HTML 注释,要使用 jsp 注释;

      ② when 标签的父标签一定要是 choose 标签;

      ③ 当 <c:when> 有一个满足后,就跳出了,不用 break,而 case 需要;

    Demo:

 <%
request.setAttribute("height", 180); //往域中存放数据
%>
<c:choose>
<%-- 这是 html 注释 --%>
<c:when test="${ requestScope.height > 190 }">
<h2>小巨人</h2>
</c:when>
<c:when test="${ requestScope.height > 180 }">
<h2>很高</h2>
</c:when>
<c:when test="${ requestScope.height > 170 }">
<h2>还可以</h2>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${requestScope.height > 160}">
<h3>大于 160</h3>
</c:when>
<c:when test="${requestScope.height > 150}">
<h3>大于 150</h3>
</c:when>
<c:when test="${requestScope.height > 140}">
<h3>大于 140</h3>
</c:when>
<c:otherwise>
其他小于 140
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>

  5、<c:foreach /> 标签

    作用:遍历输出使用

    常用属性:

① var: 设置遍历出对象的名称;

② items:指定要遍历的集合对象,可以是数组、字符串和各种集合;

③ begin:指定遍历的开始位置,int 类型;

④ end:指定遍历的结束位置,int 类型;

⑤ step:迭代的步长,int 类型;

⑥ varStatus:指定保存迭代状态的对象的名字,该变量引用是一个 LoopTagStatus 类型的对象,通过该对象可以获取一些遍历的状态

      a、count:表示遍历的个数

      b、index:表示当前的索引数,从1开始

      c、first:表示当前数据是否是第一个

      d、last:表示当前数据是否是最后一个

    (1)遍历 1 到 10,输出

        示例:

 <%--1.遍历 1 到 10, 输出
begin 属性设置开始的索引
end 属性设置结束的索引
var 属性表示循环的变量(也是当前正在遍历到的数据)
  相当于 for(int i = 0;i<10;i++)
--%>
<c:forEach begin="1" end="10" var="i">
第${i}个 <br/>
</c:forEach>

    (2)遍历 Object 数组

       示例:

 <%-- 2.遍历 Object 数组
for (Object item: arr)
items 表示遍历的数据源(遍历的集合)
var 表示当前遍历到的数据
--%>
<%
request.setAttribute("arr", new String[]{"123","456","789"});
%>
<c:forEach items="${ requestScope.arr }" var="item">
${ item } <br>
</c:forEach>

    (3)遍历 Map 集合

        示例:

 <%
Map<String,Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
// for ( Map.Entry<String,Object> entry : map.entrySet()) {} request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="entry"> <h1>${entry.key} = ${entry.value}</h1> </c:forEach>

    (4)遍历 List 集合—list中存放 Student类,有属性:编号,用户名,密码,年龄,电话信息

       示例:

  // Student 类
public class Student {
private Integer id;
private String username;
private String password;
private Integer age;
private String phone;
}
<%
List<Student> studentList = new ArrayList<Student>();
for (int i = 1; i <= 10; i++) {
studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i));
}
request.setAttribute("stus", studentList); <%-- 放入 request 域中--%>
%>
<table>
  <tr>
   <th>编号</th>
  <th>用户名</th>
  <th>密码</th>
   <th>年龄</th>
   <th>电话</th>
  <th>操作</th>
   </tr>
  <%--
items 表示遍历的集合
var 表示遍历到的数据
begin 表示遍历的开始索引值
end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态
for(int i = 1; i < 10; i+=2)()
    --%>
<c:forEach begin="2" end="7" step="2" varStatus="status" items="${requestScope.stus}" var="stu">
  <tr>
  <td>${ stu.id }</td>
  <td>${ stu.username }</td>
  <td>${ stu.password }</td>
  <td>${ stu.age }</td>
  <td>${ stu.phone }</td>
  <td>${ status.current }</td>
  <td>${ status.index }</td>
  <td>${ status.count }</td>
  <td>${ status.first}</td>
  <td>${ status.last }</td>
  <td>${ status.begin }</td>
  <td>${ status.end }</td>
  <td>${ status.step }</td>
  </tr>
</c:forEach>
</table>

      其实 Varstatus 是一个内部类,它又实现了 LoopTagStatus 接口,当使用这些属性时,会调用对应的方法。

      其中 index 表示容器中元素的索引,从0开始,count 表示遍历的个数,是从1开始的。

      

  6、<c:redirect>

    作用:主要用于将请求重定向到另一个资源地址

    语法:

格式:  <c:redirect url=" "></c:redirect>

属性说明:① url 表示指定重定向的目标地址,这里指定绝对路径会自动加上项目名称

    Demo:

  

JavaWeb 之 JSTL 标签的更多相关文章

  1. JavaWeb之JSTL标签

    JSP中有了EL可以很方便的引用对象和属性,但是也有一些不足的地方,比如不能遍历对象列表这些,再加上JSTL(Java Standard Tag Library)的话那就完美了.JSTL主要包括cor ...

  2. 【JavaWeb】JSTL标签库

    JSTL标签库 JSTL标准标签库: JSTL用于简化JSP开发,提高代码的可读性与可维护性: JSTL由SUN(Oracle)定义规范,由Apache Tomcat团队实现: 引用JSTL核心库 核 ...

  3. 【JavaWeb】JSTL 标签库

    JSTL 标签库 简介 JSTL(JSP Standard Tag Library),即 JSP 标准标签库.标签库是为了替换代码脚本,使得整个 jsp 页面变得更加简洁. JSTL 有五个功能不同的 ...

  4. JavaWeb学习----JSTL标签库

    一.JSTL简介: JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2.JSTL是由JCP(Java Co ...

  5. JavaWeb笔记——JSTL标签

    JSTL 1. jstl的概述   * apache的东西,依赖EL   * 使用jstl需要导入jstl.jar.standard.jar   * 四大库:     > core:核心库,重点 ...

  6. IT兄弟连 JavaWeb教程 JSTL标签的使用

    假定甲方打算使用乙方开发的标签库,乙方把与标签库相关的所有文件打包成为了一个JAR文件(假定名为standard.jar),在这个JAR文件中包含以下内容: ●  标签处理类及相关的.class文件 ...

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

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

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

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

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

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

随机推荐

  1. 福昕PDF高级企业版编辑器9.5 Foxit PhantomPDF Business安装破解教程

    title: "福昕PDF高级企业版编辑器9.5 Foxit PhantomPDF Business安装破解教程" categories: soft tags: soft auth ...

  2. python异常值(outlier)检测实战:KMeans + PCA + IsolationForest + SVM + EllipticEnvelope

    机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&sha ...

  3. aardio类的例子

    论坛里面相关资料太少,这里贴一下 库需要在工程的lib目录下,在ide里面就是用户库目录,比如 my_lib namespace my_lib{ import console class MyLibC ...

  4. java中静态方法中为什么不能使用this、super和直接调用非静态方法

    这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆 ...

  5. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  6. shell基础知识之 stdin,stdout,stderr和文件描述符

    stdin,stdout,stderr stdin=0 stdout=1 stderr=2 使用tee来传递内容,把stdout 作为stdin 传到下个命令 root@172-18-21-195:/ ...

  7. https本地自签名证书添加到信任证书访问

    1.背景 本文适用于基于https(http+ssl)的网站通信.本地调试等,上线是请寻找免费 ssl证书申请. 本地调试过程中,一些特殊的场景需要我使用http+ssl通信,比如在Chrome中使用 ...

  8. 大数据 -- Cloudera Manager(简称CM)+CDH构建大数据平台

    一.Cloudera Manager介绍 Cloudera Manager(简称CM)是Cloudera公司开发的一款大数据集群安装部署利器,这款利器具有集群自动化安装.中心化管理.集群监控.报警等功 ...

  9. eclipse不提示

    1.菜单window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾 ...

  10. 前端与算法 leetcode 27.移除元素

    目录 # 前端与算法 leetcode 27.移除元素 题目描述 概要 提示 解析 算法 @(目录) # 前端与算法 leetcode 27.移除元素 题目描述 27.移除元素 概要 题目本身其实挺简 ...