JAVA 之 JSTL
一、什么是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的更多相关文章
- Java学习——JSTL标签与EL表达式之间的微妙关系
原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相 ...
- Java之JSTL标签与JavaBean
Java之JSTL标签与JavaBean JSP.JSTL标签及 EL表达式 <!-- jstl表达式--> <dependency> <groupId>javax ...
- Java:JSTL遍历数组,List,Set,Map
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- java,js,jstl,EL的简单交互
EL全名Expression Language.EL提供了在JSP脚本编制元素范围外使用运行时表达式的功能. 脚本编制元素是指页面中能够用于在JSP文件中嵌入java代码的元素. JSP标准标记库(j ...
- JAVA学习JSTL与EL
一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...
- java与JSTL库
JSTL1. jstl的概述 * apache的东西,依赖EL * 使用jstl需要导入jstl1.2.jar * 四大库: > core:核心库,重点 > fmt:格式 ...
- Vue.js——循环(Java、JSTL标签库、数据库)
一.Vue.js循环 Vue.js循环要使用 v-for 指令. v-for 指令需要以 student in StudentList 形式的特殊语法使用, StudentList 是源数据数组并且s ...
- js,java,jstl多分隔符分割字符串
1.js多分隔符 分割字符串 var username = “zhao,li;wang.liu”: var arr = str.split(/;|:|,|,|./); 括号里面可以写多分割符号,中英 ...
- [Java.web]JSTL 使用
<%@ page import="cn.itcast.domain.Person"%> <%@ page language="java" im ...
- java Web JSTL介绍及基本应用
由于实际开发中我们一般不能在jsp页面上写java代码,而el表达式也做不了判断 循环之类的复杂操作,为了弥补这些缺点,所以就有了JSTL. 简介 JavaServer Pages Standard ...
随机推荐
- 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...
- Math常用方法
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 一夜搞懂 | Java 内存模型与线程
前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 一.为什么要学习内存模型与线程? 并发处理的广泛应用是 Amdah1 定律代替摩尔定律成为计 ...
- 技术再深入一点又何妨?一脸懵B的聊Actor
记得上次深入 Resin 源码时,见到了Actor 字眼,当时主要从 Resin 中抽取关键架构,就屏蔽了 Actor 相关代码.未曾想这两天研究 flink 的运行架构以及源码,再次与 Actor ...
- scarpy爬虫框架
目录 架构介绍 安装创建和启动 配置文件目录介绍 爬取数据,并解析 数据持久化 保存到文件 保存到redis 动作链,控制滑动的验证码 架构介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 ...
- spring使用jdbc
对于其中的一些内容 @Repository(value="userDao") 该注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例. ...
- GitHub+PicGo构建免费图床及其高效使用
搭建免费图床全过程! 一.搭建缘由 一开始搭建博客,避免不了要用许多图片,最初使用七牛云来做博客图床,但是后来发现,七牛云只有30天的临时域名,hhhhhhh,果然啊,天下就没有免费的好事啊~后来就发 ...
- TP5快速入门
一.查询 //order支持使用数组对多个字段的排序,例如order(['order','id'=>'desc']) //group方法只有一个参数,并且只能使用字符串. //having方法只 ...
- 24 接口 Interface
/** Java语言的继承是单一继承,一个子类只能有一个父类(一个儿子只能有一个亲爹)* Java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口* 接口:接口是一个比抽象类还抽象的类,接口 ...
- Struts2-学习笔记系列(13)-类型转换异常和校验器
Struts2框架有默认的类型转换错误拦截机制,该配置在struts-default.xml中,名叫conversionError,但是想使用需要继承ActionSupport. 默认的错误提示信息是 ...