zoukankan      html  css  js  c++  java
  • 重温JSP学习笔记--JSTL标签库

      以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是对el表达式的扩展,是一种标签语言,使用起来比较方便,他不属于jsp内置的标签,使用之前需要导包,以及指定标签库,在Myeclipse中,内置了jstl的jar包,所以不需要导包这个操作.

      JSTL有四个标签库,常用的只有一个core,其他的几乎不怎么用,使用前首先要导入标签库,代码如下:

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

      下面介绍常用标签,因为使用的多为core库的标签,所以一般称为c标签:

    • <c:out>   :输出
      1.  value:可以是字符串也可以是el表达式    比如<c:out value="hello"/>  或者<c:out value="${name}"/>
      2.  default:如果value为null,则输出default里边的值  比如<c:out value="name"default="zhangSan"/>如果name"default="zhangSan"/>如果{name}不存在,则输出张三.
      3.  escapeXML:表示转义,默认为true

      示例:

      <c:out value="aaa"/>         输出字符串aaa
      <c:out value="${aaa"/>       输出域属性aaa,其中与${aaa}相同
       <c:out value="${aaa}" default="xxx"/>   如果${aaa}不存在,那么输出xxx字符串
       <c:out value="${aaa}" escapeXml="true"/>如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击
    • <c:set> :设置(创建域的属性)
      1.   var:变量名
      2.   value:变量值
      3.   scope:指定一个域 默认为page 可选择 requset,session,application

          例如:

    <c:set var="name" value="zhangSan" scope="request"/>
    
    
    <% request.setAttribute("name");   %>

          上下这两行代码作用是相同的,都是在request域中创建一个name属性,值为"zhangSan".

    •  <c:remove>:删除域变量
      1. var:变量名
      2. scope:指定域,如果不指定,默认删除所有域
    <c:remove var="a"/>       删除名为a的域属性
    <c:remove var="a" scope="page"/> 删除page域中名为a的域属性
    • <c:url> :输出一个url或保存url到某个域
    1. value: 指定一个路径,他会在路径前自动添加项目名
    2. var:指定一个变量名,一旦添加了这个属性,则不会输出,而是把输出内容保存到指定的变量名中
    3. scope:与var一起使用,指定保存域
    复制代码
    <c:url value="/AServlet"/>                        输出URL:/项目名/AServlet
    <c:url value="/AServlet" var="url" scope="page"/>  把生成的url保存到page域中,而不会输出
    <c:url value="/AServlet">            :输出URL:/项目名/AServlet?username=%xx%xx%xx%xx%xx%xx,其中张三会被URL编码
       <c:param name="username" value="张三"/>
    </c:url/>
    复制代码
    • <c:if>:对应Java中的if语句
    1. <c:if test="${条件}">...</c:if>  : 当test为true时,执行标签体的内容
    • <c:choose>:对应java语句中的if/else

      示例:

    复制代码
    <c:set var="score" value="${param.score }"/>
    <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>
    复制代码
    • <c:forEach>:用来循环遍历数组,集合或者以计数方式循环!对应java的for循环
    1. 按计数方式方式循环:
      复制代码
      <c:forEach begin="1" end="10" var="i">
       ${i}
      </c:forEach>
      等同于
      for(int i = 1; i <= 10; i++) {
        out.println(i);
      }
      复制代码
    2. 遍历数组或集合:
      复制代码
      <%
              String[] str={"哎呦","不错","这个吊"};
                request.setAttribute("array", str);
      %>
          <c:forEach items="${array }" var="i">
          -->${i }<br>
          </c:forEach>
      复制代码

      输出结果为:

    -->哎呦
    -->不错
    -->这个吊

      需要特别说明的是,forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了,他有几个属性如下:

    1.  count:int类型,当前以遍历元素的个数;
    2.   index:int类型,当前元素的下标;
    3.  first:boolean类型,是否为第一个元素;
    4.  last:boolean类型,是否为最后一个元素;

    在上面的例子中,我们遍历了数组的所有元素,假如我们只想取出数组的第一个元素"哎呦",应该怎么办呢?

    复制代码
    <c:forEach items="${array }" var="i" varStatus="index">
        <c:if test="${index.first }">
        --->${i }
        </c:if>
    </c:forEach>
    复制代码

    这样输出结果就变成了:


    --->哎哟

  • 相关阅读:
    文件操作:Directory,File,FielStream、StreamRead和StreamWriter的使用
    MVC中Excel导入
    T对象序列化后T对象中属性字段不见了?
    Sql游标
    Form表单提交
    AJAX异步删除操作
    数据库表结构导出sql语句
    多线程的使用
    找不到dll原因
    代码优化
  • 原文地址:https://www.cnblogs.com/yezuhui/p/6857061.html
Copyright © 2011-2022 走看看