******概述:

JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!

JSTL标签使用以来非常方便,它与JSP动作标签一定,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已!

如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会发现,MyEclipse会在lib目录下存放jstl的Jar包!如果你没有使用MyEclipse开发那么需要自己来导入这个JSTL的Jar包:jstl-1.2.jar

******JSTL一共包含4大标签库

core 核心标签库,使我们学习的重点

fmt   格式化标签库,只需要学习两个标签

sql    数据库标签库,已经过时,不需要学习

xml   xml标签库,已经过时,不需要学习

******导入标签库:

除了jsp之外,其他第三方的标签库度需要导入

在web项目中导入jstl-1.2.jar

在jsp页面上导入<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c

uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件

******core标签库常用标签:out,set,remove,url----等

<c:out value=”aaa”/>

输出aaa字符串常量

<c:out value=”${aaa}”/>

与${aaa}相同

<c:out value=”${aaa}” default=”xxx”/>

当${aaa}不存在时,输出xxx字符串

<%

request.setAttribute("a","<script>alert('hello');</script>");

%>

<c:out value="${a }" default="xxx" escapeXml="false" />

当escapeXml为false,不会转换“<”、“>”。这可能会受到JavaScript攻击。

<c:set var=”a” value=”hello”/>

在pageContext中添加name为a,value为hello的数据。

<c:set var=”a” value=”hello” scope=”session”/>

在session中添加name为a,value为hello的数据。

<%

pageContext.setAttribute("a", "pageContext");

request.setAttribute("a", "session");

session.setAttribute("a", "session");

application.setAttribute("a", "application");

%>

<c:remove var="a"/>

<c:out value="${a }" default="none"/>

删除所有域中name为a的数据!

<c:remove var="a" scope=”page”/>

删除pageContext中name为a的数据!

url标签会在需要URL重写时添加sessionId

<c:url value="/"/>

输出上下文路径:/day08_01/

<c:url value="/" var="a" scope="request"/>

把本该输出的结果赋给变量a。范围为request

<c:url value="/AServlet"/>

输出:/day08_01/AServlet

<c:url value="/AServlet">

<c:param name="username" value="abc"/>

<c:param name="password" value="123"/>

</c:url>

输出:/day08_01/AServlet?username=abc&password=123

如果参数中包含中文,那么会自动使用URL编码!

if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

<c:set var="a" value="hello"/>//在page域中创建名为a的变量

<c:if test="${not empty a  }">//判断a变量不为null,没有指定域,表示全域

<c:out value="${a }"/>

</c:if>




choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。

当所有when标签的test都为false时,才会执行otherwise标签的内容。

<c:set var="score" value="${param.score }"/>

<c:choose>

<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>[c1]

<c:when test="${score >= 90 }">A级</c:when>[c2]

<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>[c3]

</c:choose>


forEach当前就是循环标签了,forEach标签有多种两种使用方式:

使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {};

循环遍历集合,类似for(Object o : 集合);

循环变量方式

<c:set var="sum" value="0" />

<c:forEach var="i" begin="1" end="10">

<c:set var="sum" value="${sum + i}" />

</c:forEach>

<c:out value="sum = ${sum }"/>

<c:set var="sum" value="0" />

<c:forEach var="i" begin="1" end="10" step="2">//

<c:set var="sum" value="${sum + i}" />

</c:forEach>

<c:out value="sum = ${sum }"/>

遍历集合或数组方式:

<%

String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};

pageContext.setAttribute("ns", names);

%>

<c:forEach var="item " items="${ns } ">

<c:out value="name: ${item } "/><br/>

</c:forEach>

遍历List

<%

List<String> names = new ArrayList<String>();

names.add("zhangSan");

names.add("liSi");

names.add("wangWu");

names.add("zhaoLiu");

pageContext.setAttribute("ns", names);

%>

<c:forEach var="item" items="${ns }">

<c:out value="name: ${item }"/><br/>

</c:forEach>

遍历Map

<%

Map<String,String> stu = new LinkedHashMap<String,String>();

stu.put("number", "N_1001");

stu.put("name", "zhangSan");

stu.put("age", "23");

stu.put("sex", "male");

pageContext.setAttribute("stu", stu);

%>

<c:forEach var="item " items="${stu }">

<c:out value="${item.key }: ${item.value } "/><br/>

</c:forEach>

forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,

例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。

count:int类型,当前以遍历元素的个数;

index:int类型,当前元素的下标;

first:boolean类型,是否为第一个元素;

last:boolean类型,是否为最后一个元素;

current:Object类型,表示当前项目。

<c:forEach var="item" items="${ns }" varStatus="vs" >

<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:forEach>


******fmt标签库常用标签

                fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。

           格式化时间:

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

......

<%

Date date = new Date();

pageContext.setAttribute("d", date);

%>

<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss "/>//按指定格式输出日期和时间

格式化数字:

<%

double d1 = 3.5;

double d2 = 4.4;

pageContext.setAttribute("d1", d1);

pageContext.setAttribute("d2", d2);

%>

<fmt:formatNumber value="${d1 }" pattern="0.00 "/><br/>

//必须且仅能保留两位小数,如果大于两位,那么只保留两位,并四舍五入,如果小于两位,那么使用0补足两位

<fmt:formatNumber value="${d2 }" pattern="#.## "/>

//最多显示两位,如果小于两位,那么有几位保留几位,不会用0补足。大于两位,只保留两位,并四舍五入!


JSTL标签语言的更多相关文章

  1. JavaWeb学习总结-12 JSTL标签语言

    一 JSTL JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了 ...

  2. JSTL标签 参考手册

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  3. JSTL标签库

    JSP页面作为内嵌java的Html简化了Servlet在控制页面显示的语法,但JSP脚本中的表达式功能不够强大,语法也稍显繁杂,EL(Expression Language)表达式语言的出现能够大大 ...

  4. 重温JSP学习笔记--JSTL标签库

    以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...

  5. JSTL标签出错:<c:forEach var="book" items="${requestScope.books}" varStatus="status">

    今天在运行书里的JSTL标签代码的时候出错,总结一下: 问题1.The JSP specification requires that an attribute name is preceded by ...

  6. jstl标签库基础教程及其使用代码(一)。

    概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...

  7. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  8. jstl标签库基础教程及其使用代码

    概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...

  9. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...

随机推荐

  1. Java后端技术面试汇总(第一套)

    面试汇总,整理一波,doc文档可点击[此处下载] 1.基础篇 1.1.Java基础 • 面向对象的特征:继承.封装和多态• final, finally, finalize 的区别• Exceptio ...

  2. Dubbo架构

    原文链接http://dubbo.apache.org 架构图 节点角色说明 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务 ...

  3. Redis windows服务器配置可远程连接

    Redis配置远程可访问:修改redis.conf或redis.windows-service.conf配置文件. 具体通过 1:将绑定的本机给注释掉,找到这行 bind 127.0.0.1,然后在前 ...

  4. Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)

    参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...

  5. 关于swiper 4的coverflowEffect(3d)

    轮播效果: HTML: <div class="swiper-container successful_swiper"> <div class="swi ...

  6. Axure(一)

    axure1.原型工具 2.软件开发 1.可行性分析2.需求分析    产品经理(和甲方对接需求,)    乙方     --   甲方 ps(专业性强,精美)  设计师        html(可变 ...

  7. fiddler4自动生成jmeter脚本

    接口.性能测试任务当遇到从浏览器或移动app自己抓包的情况出现时就变得巨苦逼了,苦在哪里?苦在需要通过抓包工具抓报文,需要通过抓包报文梳理业务逻辑.需要将梳理的逻辑编写成脚本.最最苦的情况是,自己抓包 ...

  8. PHP读取txt文件的内容并赋值给数组的代码

    使用file_get_contents()获取txt文件的内容,然后通过explode()把获得的字符串转化为数组. 获得数组长度可以使用count()函数 <?php $file = 'key ...

  9. BZOJ1791 基环树直径

    非递归版4S /************************************************************** Problem: 1791 User: 18357 Lan ...

  10. Protobuffer教程

    目录 什么是protobuffer? protobuffer是如何工作的? 为什么不用xml? 1.什么是protobuffer? protobuffer是一种灵活,高效,自动化的机制,用于序列化结构 ...