JSTL标签的简单使用

来源:互联网 发布:重庆时时彩报号软件 编辑:程序博客网 时间:2024/05/14 16:39

一、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}是不存在的,所以输出结果为:

ab
  • <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/>

输出结果为:

helloworld3000
  • <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:zhangSanname:liSiname:wangWuname: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:zhangSanname:liSiname:wangWuname: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: 001name: zhangSanage: 22sex: 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>

输出结果为:

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