以前写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}不存在,则输出张三.
    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>

这样输出结果就变成了:

--->哎哟

重温JSP学习笔记--JSTL标签库的更多相关文章

  1. 重温JSP学习笔记--El函数库

    EL函数库(由JSTL提供的) * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/f ...

  2. 重温JSP学习笔记--三大指令九大内置对象

    最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...

  3. 学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)

    1.一种标签语言 day13 l  JSTL标签库(重点) l  自定义标签(理解) l  MVC设计模式(重点中的重点) l  Java三层框架(重点中的重点) JSTL标签库 1 什么是JSTL ...

  4. 重温JSP学习笔记--与日期数字格式化有关的jstl标签库

    上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...

  5. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

  6. 重温JSP学习笔记--El表达式

    el表达式是jsp内置的表达式语言,jsp从jsp2.0开始,就不再提倡使用java脚本,而是用el表达式和动态标签来替代,而el表达式主要替代的是jsp中的<%=....%>,也就是说e ...

  7. 在JSP页面中导入jstl标签库

    1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...

  8. 10、jstl标签库

    一.JSTL是SUN公司制定的一个JSP标签库,由apache jakarta组织负责维护的开源项目,目的是用标签代替java代码片段.JSTL 1.0 由四个定制标记库(core.format.xm ...

  9. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

随机推荐

  1. 利用 iframe解决ajax的跨域问题

    问题 1. form提交或a标签跳转方式提交不会引发跨域问题. 2. ajax出于安全问题就有了跨域问题,因为一次请求中既访问了外部域最后返回了自己的域. 3. 用iframe其实就是想仿照ajax的 ...

  2. 【转载】使用Lucene.NET实现数据检索功能

    1.索引的管理 //指定索引库文件存放文件位置 FSDirectory directory = FSDirectory.Open(new DirectoryInfo(this.IndexDataDir ...

  3. 使用Azure Automation(自动化)定时关闭和启动虚拟机

    1. 概述 作为Windows Azure的用户,使用Azure的过程中,最担心的事情就是还没到月底,预设的费用就快消耗完了(下面两张账单图是我最讨厌看到的).但是仔细分析自己的费用列表,发现绝大部分 ...

  4. The web application [/codeMarket] registered the JBDC driver[.........] but failed to unregister it when the web application was stopped. To prevent

    如果你报错了上面的这个严重,那么你的tomcat版本一定是在6.0.25之上的 原因:tomcat 6.025以后在sever.xml中引入了内存泄露侦测,对于垃圾回收不能处理的对像,它就会做日志. ...

  5. [NetTopologySuite](2)任意多边形求交

    任意多边形求交: private void btnPolygon_Click(object sender, EventArgs e) { , , , , , , , , , , , , , }; , ...

  6. Eclipse plugin插件开发 NoClassDefFoundError

    Eclipse的每一个plugin都有属于自己的类加载器,这是OSGI架构的基础,每一个plugin项目都是一个bundle,独立运行在各自的运行环境里面,这就造成了开发时和运行时的不同. Eclip ...

  7. Ng-include 例子

    <body> <div ng-app="myApp"> <div ng-controller="firstController"& ...

  8. Chapter 1. Introduction gradle介绍

      We would like to introduce Gradle to you, a build system that we think is a quantum leap for build ...

  9. Linux下运行当前目录需要加./的原因

    在Windows下运行当前目录的文件,可以直接输入文件全名,就能够运行该文件.但对于Linux则必须加上./文件名才能运行.对于这一点表示很疑惑,最后查阅了资料才弄明白. 原因如下: 1.在Windo ...

  10. android launcher 之踩到的坑

    需求: 1. 用android系统launcher 隐藏主菜单 所有应用显示在桌面 即workspace上: 2.隐藏launcher上方默认的google search: 3.切换一套launche ...