一、什么是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. 如何让Java应用成为杀不死的小强?(下篇)

    各位坐稳扶好,我们要开车了.不过在开车之前,我们还是例行回顾一下上期分享的要点. 经过前两期的铺垫及烧脑的分享,我们大概对「如何实现 Java 应用进程的状态监控,如果被监控的进程 down 掉,是否 ...

  2. Integer类的进制之间转换的方法

    一.两个通用方法 1.public static String toString(int i,int radix) (1)作用 将十进制的数转化成指定进制数的字符串形式:radix参数指进制数: (2 ...

  3. STM32F103ZET6通用定时器的输入捕获

    1.通用定时器输入捕获功能简介 通用定时器的输入捕获模式可以用来测量脉冲宽度或者测量频率. STM32的每个通用定时器都有4个输入捕获的通道,分别是TIMx_CH1.TIMx_CH2.TIMx_CH3 ...

  4. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  5. PTA数据结构与算法题目集(中文) 7-9

    PTA数据结构与算法题目集(中文)  7-9 7-9 旅游规划 (25 分)   有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游 ...

  6. php 分页使用limit还是用mysql_data_seek()呢?

    目前大部分教程中介绍的时LIMIT方法,使用这种方法要认识到以下几点: (1)limit不是标准的sql语句; (2)如果选择使用limit,那么您就必须首先向数据库发送一个查询语句来获取记录的总数, ...

  7. 开启sftp服务日志并限制sftp访问目录

    目录导航 目录导航 开启sftp日志 修改sshd_config 修改syslogs 重启服务查看日志 限制sftp用户操作目录 前提说明 1. home目录做根目录 2. 单独创建目录做根目录 方法 ...

  8. python通过pymysql实现数据库的增删改查

    今天实现了python对于数据库的增删改查工作: 具体的每一步的数据库的增删盖茶自己都实验过了. 掌握了基本的数据库操作语言.然后就是对于tuple()的认识. 以及对于查询语句中的:fetchone ...

  9. csdn的垃圾体验

    微信扫码登录网页csdn,每次扫码都是csdn有关的不同的公众号,必须关注才可以登录,为了推广公众号真是简直了 无法修改id 注销也需要扫码,这次是必须下载csdn的app才能注销,我真是服了,我都要 ...

  10. CKEDITOR (FCKEDITOR) --- 目前最优秀的可见即可得网页编辑器之一

    FCKEDITOR 编辑 同义词 CKEditor一般指FCKEDITOR FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写.具备功能强大.配置容易.跨浏览器. ...