JSTL标签的简单使用

一、jstl标签简介

1、什么是jstl?

JSTL(JSP StandardTag Library),JSP标准标签库。JSTL是一种标签语言,但不是JSP内置的标签。分为:core、format、xml、sql四个定制的标签库,jstl通常结合EL语言一起使用,使用时候需要导入jstl的jar包。

2、jstl是用来干什么的?

jstl是程序员为了实现页面和代码分离,让前端设计与后端开发人员各自完成各自的任务,前端不需要懂后端Java传过来的参数。前端页面需要从后端获取数据使用jstl,后端返回数据给页面也需要jstl。使用jstl可以是页面美观,不需要在jsp中加入java代码,同时也提升了整个系统的速度。

二、使用jstl标签

1、jstl使用实例

(1)导入jar包
这里写图片描述
(2)引入核心库

在index.jsp头部引入核心标签库Core:

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

接下来就可以使用<c:xxxxx>标签了

(3)core常用标签

  • <c:out>标签
    <c:out>输出变量字符串或者域属性
<!-- :输出字符串a -->
<c:out value="a"/> <br>
<!-- 输出域属性a,其中与${a}相同 -->
<c:out value="${a}"/> <br>
<!-- 如果${a}不存在,那么输出b字符串 -->
<c:out value="${a}" default="b"/><br>
<!-- 如果${a}中包含特殊字符,那么转义它。这可以防止javascript攻击 -->
<c:out value="${a}" escapeXml="true"/><br>

其中${a}是不存在的,所以输出结果为:

a

b
  • <c:set>标签
    <c:set>标签类似于servlet的setAttribute,可以通过${var}获得并输出。可以这样的理解,set其实就是声明一个变量var,给个初始值value。也可以理解成SQL中的set关键字。
<!-- 在pageContext添加name为a, value为helloworld的数据-->
<c:set var="Jian" value="helloworld"/>
<c:out value="${Jian} }"/><br/>
<!-- 在session中添加name为money,value为1500*2的数据。 -->
<c:set var="money" scope="session" value="${1500*2}"/>
<c:out value="${money}"/><br/>

输出结果为:

helloworld
3000
  • <c:forEach>标签与<c:forTokens>标签
    c:forEach>标签是用来循环的,主要有两个方面:
    一是指定开始与结束值,进行循环,类似于for(int i=0:i<arr.length)
    二是 用来循环遍历集合(List、Map等),类似于Java中的forEach用来遍历集合、数组等。
    <c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。
<!-- forEach循环变量 -->
    </c:forEach>
    <!-- 声明变量sum,初始值为0 -->
    <c:set var="sum" value="0" />  
    <!-- i=i+1:间隔为1 -->
    <c:forEach var="i" begin="1" end="10">   
    <c:set var="sum" value="${sum + i}" /> 
    <c:out value="sum = ${sum}"/>   
    </c:forEach><br/>  
    <!-- 声明变量sum,初始值为0 -->
    <c:set var="sum" value="0" /> 
    <!-- i=i+2:间隔为2 -->
    <c:forEach var="i" begin="1" end="10" step ="2">  
    <c:set var="sum" value="${sum + i}" /> 
    <c:out value="sum = ${sum}"/>    
    </c:forEach>  

输出结果为:

sum = 1 sum = 3 sum = 6 sum = 10 sum = 15 sum = 21 sum = 28 sum = 36 sum = 45 sum = 55 
sum = 1 sum = 4 sum = 9 sum = 16 sum = 25 sum = 25

forEach遍历数组:

<%  
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};  
pageContext.setAttribute("name", names);  
%> 
<!-- forEach遍历数组 --> 
<c:forEach var="item" items="${name}">  
    <c:out value="name: ${item }"/><br/>  
</c:forEach>

输出结果为:

name:zhangSan
name:liSi
name:wangWu
name:zhaoLiu

forEach遍历List:

<!-- forEach遍历List --> 
    <%  
        List<String> names = new ArrayList<String>();  
        names.add("zhangSan");  
        names.add("liSi");  
        names.add("wangWu");  
        names.add("zhaoLiu");  
        pageContext.setAttribute("name", names);  
    %>  
    <c:forEach var="item" items="${name}">  
        <c:out value="name: ${item }"/><br/>  
    </c:forEach>

输出结果为:

name:zhangSan
name:liSi
name:wangWu
name:zhaoLiu

forEach遍历Map

<%  
    Map<String,String> student = new LinkedHashMap<String,String>();  
    stu.put("id", "001");  
    stu.put("name", "zhangSan");  
    stu.put("age", "22");  
    stu.put("sex", "boy");  
    pageContext.setAttribute("stu", student);  
%>  
<c:forEach var="item" items="${stu}">  
    <c:out value="${item.key }: ${item.value }"/><br/>  
</c:forEach> 

输出结果为:

id: 001
name: zhangSan
age: 22
sex: boy

此外,forEach还有个属性:varStatus,这个属性是存放循环过程中的状态。比如:我们可以利用varStatus变量判断循环中的变量是否为第一个,最后一个,遍历元素的个数等等。

  • count:int类型,当前以遍历元素的个数;
  • index:int类型,当前元素的下标;
  • first:boolean类型,是否为第一个元素;
  • last:boolean类型,是否为最后一个元素;
  • current:Object类型,表示当前项目。
<c:forEach var="i" begin="1" end="10"  varStatus="vs">   
    <c:set var="sum" value="${sum + i}" />
    <c:if test="${vs.first }">第一行:</c:if>  
    <c:if test="${vs.last }">最后一行:</c:if>  
    <c:out value="第${vs.count }行: "/>  
    <c:out value="[${vs.index }]: "/>  
    <c:out value="name: ${vs.current }"/><br/>  
    <c:out value="sum = ${sum}"/><br/> 
</c:forEach>  

结果如下:

第一行: 第1行: [1]: name: 1 sum = 12行: [2]: name: 2 sum = 33行: [3]: name: 3 sum = 64行: [4]: name: 4 sum = 105行: [5]: name: 5 sum = 156行: [6]: name: 6 sum = 217行: [7]: name: 7 sum = 288行: [8]: name: 8 sum = 369行: [9]: name: 9 sum = 45
最后一行: 第10行: [10]: name: 10 sum = 55
<!-- forTokens将以","号为间隔delims条件循环迭代 -->
<c:forTokens items="google,baidu,taobao" delims="," var="name">
   <c:out value="${name}"/><p>
</c:forTokens>

输出结果为:

google
baidu
taobao
  • <c:if>标签
    类似于Java中的if条件判断,格式为<c:if test="condition">...</c:if>
<c:set var="number" value="5"></c:set>
<c:if test="${number > 2}">
   <c:out value="number大于2"></c:out><br/>
</c:if>
  <c:if test="${number < 2}">
  <c:out value="number小于2"></c:out>
</c:if> 

输出结果为:

number大于2
  • <c:choose>标签
    类似于Java中的switch...case<c:when test>就是case<c:otherwise>就是defaut,其实例如下:
    <c:set var="score" value="81"/>  
    <c:choose>  
        <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>  
        <c:when test="${score >= 90 }">A级</c:when>  
        <c:when test="${score >= 80 }">B级</c:when>  
        <c:when test="${score >= 70 }">C级</c:when>  
        <c:when test="${score >= 60 }">D级</c:when>  
        <c:otherwise>E级</c:otherwise>  
    </c:choose>  

输出结果为

B级
  • <c:remove>标签
    删除所在域(session、request、appliacation)与pageContext中name的数据
<%
 //在域session/request/application/pageContext中添加name为a的数据
  pageContext.setAttribute("a","pageContext");
  request.setAttribute("a","request");
  session.setAttribute("a","session");
  application.setAttribute("a","application");
%>
  <!-- 未指定,则默认为变量第一次出现的作用域-->
  <%--  <c: remove var="a"/> --%>
  <!-- 删除pageContext中的数据 -->
  <c: remove var="a" scope="page" />
  <c:out value="${a}" default="none"/>
  • <c:url>标签
    <!-- 输出项目路径 :/项目名/-->
    <c:url value="/"/><br/>
    <!-- 将输出项目路径放入变量a中-->
    <c:url value="/" var="a" scope="request"/>
    <c:out value="${a}"/><br/>
    <!-- 输出:/项目名/xxx -->
    <c:url value="/xxx"/><br/>
    <c:url value="/xxx">
        <c:param name="username" value="abc"/>
        <c:param name="password" value="123"/>
    </c:url>

结果为:

/jstl_demo/
/jstl_demo/
/jstl_demo/xxx
/jstl_demo/xxx?username=abc&password=123 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值