一、什么是JSTL


JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

二、JSTL的安装


从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)

官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

将 tld 下的需要引入的 tld 文件复制到 WEB-INF 目录下。


三、核心标签库


引用核心标签库语法

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

1、<c:out>标签

<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似。

语法格式

<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

value:要输出的值    default:默认值  escapeXml:是否忽略xml特殊字符

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<c:out value="<h1>要显示的数据对象</h1>" escapeXml="true" default="默认值"></c:out><br/>
<c:out value="<h1>要显示的数据对象</h1>" escapeXml="false" default="默认值"></c:out><br/>
<c:out value="${null}" default="默认值" escapeXml="false"></c:out><br/>
</body>
</html>

2、<c:set>标签

<c:set>标签用于设置变量值和对象属性。

语法格式:

<c:set var="<string>" value="<string>"   target="<string>"  property="<string>"   scope="<string>"/>

var:存储信息的变量   value:要存储的值  target:要修改属性所属对象  property:要修改的属性  scope:var属性的作用域 默认page

<%@ page import="cn.xy.model.User" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<%-- <c:set>给bean赋值--%>
<%
User user = new User();
pageContext.setAttribute("user",user);
%>
<c:set property="name" value="zero" target="${pageScope.user}"></c:set>
name=${user.name}<br>
<%--<c:set>给map赋值 --%>
<%
Map<String,String> map=new HashMap();
pageContext.setAttribute("map", map);
%>
<c:set property="name" value="zero" target="${map}"></c:set>
<c:set property="age" value="20" target="${map}"></c:set>
map=${map }<br>
name=${map.name }<br>
age=${map.age }<br>
<c:set var="num" value="200*4" ></c:set>
num=${num}
</body> </html>

3、<c:remove>标签

<c:remove>标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。

语法格式:

<c:remove var="<string>" scope="<string>"/>

var:要移除的变量名  scope:变量所属的作用域

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<c:set var="name" value="req zero" scope="request"></c:set>
<c:set var="name" value="page zero" scope="page"></c:set>
<c:set var="name" value="session zero" scope="session"></c:set>
<c:set var="name" value="application zero" scope="application"></c:set> 删除指定域空间中的指定变量<br>
<c:remove var="name" scope="request"/> name_request=${requestScope.name }<br>
name_page=${pageScope.name }<br>
name_session=${sessionScope.name }<br>
name_application=${applicationScope.name }<br> <br>
-----------------------------
<br>
删除所有域中的属性值<br>
<c:remove var="name"/> name_request=${requestScope.name}<br>
name_page=${pageScope.name }<br>
name_session=${sessionScope.name }<br>
name_application=${applicationScope.name }<br> </body>
</html>

4、<c:catch>标签

<c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。

语法格式:

<c:catch var="<string>">
...
</c:catch>

var:用来存储错误信息的变量

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<c:catch var ="catchException">
<% int x = 5/0; %>
</c:catch> <c:if test = "${catchException != null}">
<p>异常为 : ${catchException} <br />
发生了异常: ${catchException.message}</p>
</c:if> </body>
</html>

5、<c:if>标签

<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

语法格式:

<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>

test:条件  var:存储结果的变量  scope:var的作用域

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p></c:if>
</body>
</html>

6、<c:choose>, <c:when>, <c:otherwise> 标签

<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。

语法格式:

<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>

test:条件

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:choose>
<c:when test="${salary}<=1000">
难搞哦
</c:when>
<c:when test="${salary}>1000 && ${salary}<=3500">
勉强能过
</c:when>
<c:otherwise>
还行
</c:otherwise>
</c:choose>
</body>
</html>

7、<c:forEach> 标签

<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。

语法格式:

<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>"> ...
</c:forEach>

items:要循环的信息  begin:开始的元素  end:最后一个元素  step:每次迭代的步长  var:代表当前条目的变量名称  varStatus:代表循环状态的变量名称

<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
---------遍历LIST-----------<br>
<%
List<String> names = new ArrayList<String>();
names.add("zero 001");
names.add("zero 002");
names.add("zero 003");
pageContext.setAttribute("names",names);
%>
<c:forEach items="${names}" var="name">
${name}<br>
</c:forEach>
<br>
---------遍历set-----------<br>
<%
Set<String> address = new HashSet<String>();
address.add("四川");
address.add("重庆");
address.add("北京");
pageContext.setAttribute("address",address);
%>
<c:forEach items="${address}" var="addr">
${addr}<br>
</c:forEach>
<br>
---------遍历map-----------<br>
<%
Map<String,String> maps = new HashMap<>();
maps.put("name","zero");
maps.put("sex","男");
maps.put("address","四川");
pageContext.setAttribute("maps",maps);
%>
<c:forEach items="${maps}" var="map">
${map}<br>
</c:forEach>
<br>
---------遍历数组-----------<br>
<%
String[] hobbies ={"music","games","read"};
pageContext.setAttribute("hobbies",hobbies);
%>
<c:forEach items="${hobbies}" var="hobby">
${hobby}<br>
</c:forEach>
</body>
</html>

<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
---------遍历LIST-----------<br>
<%
List<String> names = new ArrayList<String>();
names.add("zero 001");
names.add("zero 002");
names.add("zero 003");
names.add("zero 004");
names.add("zero 005");
names.add("zero 006");
pageContext.setAttribute("names",names);
%>
<c:forEach items="${names}" var="name" begin="1" step="2">
${name}<br>
</c:forEach>
<br> </body>
</html>

<%@ page import="java.util.*" %>
<%@ page import="cn.xy.model.User" %>
<%@ page import="cn.xy.service.UserService" %>
<%@ page import="cn.xy.service.impl.UserServiceImpl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<%
UserService userService = new UserServiceImpl();
List<User> users=userService.findAll();
pageContext.setAttribute("users",users);
%>
<table>
<tr>
<th>序号</th>
<th>id</th>
<th>姓名</th>
<th>密码</th>
<th>性别</th>
<th>爱好</th> </tr>
<!-- varStatus:处理一些域行数相关的功能(vs.count\vs.first\vs.last\vs.index) -->
<c:forEach items="${users }" var="user" varStatus="vs">
<tr >
<td align="center">${vs.count }</td>
<td align="center">${user.id}</td>
<td align="center">${user.name}</td>
<td align="center">${user.password}</td>
<td align="center">${user.sex}</td>
<td align="center">${user.hobby}</td>
</tr>
</c:forEach>
</table> </body>
</html>

8、<c:forTokens> 标签

<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

语法格式:

<c:forTokens
items="<string>"
delims="<string>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
</c:forTokens>

items:要循环的信息  delims:分隔符  begin:开始的元素  end:最后一个元素  step:每次迭代的步长  var:代表当前条目的变量名称  varStatus:代表循环状态的变量名称

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="utf-8">
<title>JSTL</title>
</head>
<c:forTokens items="java-c-python-go-C++-js" delims="-" var="name">
${name}<br>
</c:forTokens>
</body>
</html>

9、<c:redirect>标签

<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签

语法格式:

<c:redirect url="<string>" context="<string>"/>

10、<c:param>、<c:url>标签

<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

这个标签在需要的时候会自动重写URL。

var属性用于存储格式化后的URL。

<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。

语法格式:

<c:url var="<string>"  scope="<string>"  value="<string>"  context="<string>"/>

<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。

在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。

语法格式:

<c:param name="<string>" value="<string>"/>

四、格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
<%@ taglib prefix="fmt"            uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
<fmt:bundle> 绑定资源
<fmt:setLocale> 指定地区
<fmt:setBundle> 绑定资源
<fmt:timeZone> 指定时区
<fmt:setTimeZone> 指定时区
<fmt:message> 显示资源配置文件信息
<fmt:requestEncoding> 设置request的字符编码

五、SQL标签


JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

<%@ taglib prefix="sql"     uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
<sql:setDataSource> 指定数据源
<sql:query> 运行SQL查询语句
<sql:update> 运行SQL更新语句
<sql:param> 将SQL语句中的参数设为指定值
<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

六、XML 标签


JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

<%@ taglib prefix="x"   uri="http://java.sun.com/jsp/jstl/xml" %>
标签 描述
<x:out> 与<%= ... >,类似,不过只用于XPath表达式
<x:parse> 解析 XML 数据
<x:set> 设置XPath表达式
<x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
<x:forEach> 迭代XML文档中的节点
<x:choose> <x:when>和<x:otherwise>的父标签
<x:when> <x:choose>的子标签,用来进行条件判断
<x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform> 将XSL转换应用在XML文档中
<x:param> 与<x:transform>共同使用,用于设置XSL样式表

七、JSTL函数


JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn"      uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
fn:escapeXml() 跳过可以作为XML标记的字符
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之后的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首尾的空白符

JAVA 之 JSTL的更多相关文章

  1. Java学习——JSTL标签与EL表达式之间的微妙关系

    原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相 ...

  2. Java之JSTL标签与JavaBean

    Java之JSTL标签与JavaBean JSP.JSTL标签及 EL表达式 <!-- jstl表达式--> <dependency> <groupId>javax ...

  3. Java:JSTL遍历数组,List,Set,Map

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. java,js,jstl,EL的简单交互

    EL全名Expression Language.EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能. 脚本编制元素是指页面中能够用于在JSP文件中嵌入java代码的元素. JSP标准标记库(j ...

  5. JAVA学习JSTL与EL

    一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...

  6. java与JSTL库

    JSTL1. jstl的概述  * apache的东西,依赖EL  * 使用jstl需要导入jstl1.2.jar  * 四大库:    > core:核心库,重点    > fmt:格式 ...

  7. Vue.js——循环(Java、JSTL标签库、数据库)

    一.Vue.js循环 Vue.js循环要使用 v-for 指令. v-for 指令需要以 student in StudentList 形式的特殊语法使用, StudentList 是源数据数组并且s ...

  8. js,java,jstl多分隔符分割字符串

    1.js多分隔符 分割字符串 var username = “zhao,li;wang.liu”: var arr = str.split(/;|:|,|,|./);  括号里面可以写多分割符号,中英 ...

  9. [Java.web]JSTL 使用

    <%@ page import="cn.itcast.domain.Person"%> <%@ page language="java" im ...

  10. java Web JSTL介绍及基本应用

    由于实际开发中我们一般不能在jsp页面上写java代码,而el表达式也做不了判断 循环之类的复杂操作,为了弥补这些缺点,所以就有了JSTL. 简介 JavaServer Pages Standard ...

随机推荐

  1. Vim查找与替换命令大全,功能完爆IDE!

    Vi/Vim 可以说是文本编辑中的一代传奇人物,直至现在,它仍然在高级程序员的武器库中占有一席之地.每个 Linux 发行版默认都包含Vim ,而且即使你不是 Linux 系统用户,你也可以安装 Vi ...

  2. 关于代码覆盖 or 冲突

    关于代码覆盖 or 冲突 在使用git同步代码时,步骤一般为 commit -> pull -> push 那这个过程的意义何在呢? 首先是区分本地仓库 与 远程仓库,可以理解为本地git ...

  3. Java运行时数据区域划分

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁时间.根据<Java虚拟机规范(Java SE 7版>的规定,J ...

  4. matplotlib TransformWrapper

    2020-04-09 23:26:53 --Edit by yangray TransformWrapper 是Transform的子类, 支持在运行中替掉一个变换(可以是不同类型, 但维度必须相同) ...

  5. CentOS安装C函数库的man帮助

    安装linux可能没有安装C的man帮助, 像我安装时选择的是最小化安装就没有, 网上的大多是ubunu的安装方式,或者是C++的man帮助, 都不适合,那么CentOS安装C man手册的方法就是: ...

  6. Extjs简单的form+grid组合

    采用的是Extjs4.2版本 http://localhost:49999/GridPanel/Index 该链接是本地连接,只是方便自己访问,读者无法正常访问. <script src=&qu ...

  7. Python语法详解

    python语法解析 目录 python语法解析 一.顺序结构 二.分支结构 2.1 if 的基本语法 2.2 if 的基本应用 三.循环结构 3.1 while 语法 3.1.1 语法结束条件 3. ...

  8. MDC是什么鬼?用法、源码一锅端

    近期用到阿里的一款开源的数据同步工具 Canal,不经意之中看到了 MDC 的用法,而且平时项目中也多次用到 MDC,趁机科普一把. 通过今天的分享,能让你轻松 get 如下几点,绝对收获满满. a) ...

  9. HPU第一次团队赛

    D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...

  10. 纯js时钟特效详细代码分析实例教程

    电子时钟是网上常见的功能,在学习date对象和定时器功能时,来完成一个电子时钟的制作是不错的选择.学习本教程之前,读者需要具备html和css技能,同时需要有简单的javascript基础. 先准备一 ...