学习JSTL前 必须会 EL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
● 核心标签
● 格式化标签
● SQL 标签
● XML 标签
● JSTL 函数
需要的Maven
<!-- jstl-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
或者你手动配置jar
jstl.jar
链接:https://pan.baidu.com/s/1GRDc4MdPn942DCAYei8K-w
提取码:1234
standard.jar
链接:https://pan.baidu.com/s/1Q3SY_5kaZVrQlb4d9NdpXQ
提取码:1234
使用任何库,你必须在每个JSP文件中的头部 包含对应的标签库。 否则JSTL失效
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
需要导入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用方法:
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= … > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |
<c:url> | 使用可选的查询参数来创造一个URL |
<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。举例来说,如果想要访问customer.address.street,只需要这样写:<c:out value=“customer.address.street”>。
<c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。
语法格式
<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
属性
<c:out>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
escapeXml | 解析xml | 否 | true |
程序示例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--必须添加 否则 jstl标签失效--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--开启EL 表达式--%>
<%@page isELIgnored="false" %>
<html>
<head>
<title></title>
</head>
<body>
<c:out value="<a href='https://www.baidu.com/'>百度</a>" escapeXml="true" /><br/>
<c:out value="<a href='https://www.baidu.com/'>百度</a>" escapeXml="false" /><br/>
<c:out value="${null}" escapeXml="false" default="使用的表达式结果为null,则输出该默认值"/><br/>
<c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>
</body>
</html>
注意:
default 添加默认值 当value为null时 必须使用EL表达式结果返回的值为null才会调用默认值 ${null}
有default 的情况下 标签的文本之间就 不能 写入<c:out >文本 </c:out> 否则报错
如果没有default value 为空的情况下 自动读取 标签文本
<c:set>标签用于设置变量值和对象属性。
<c:set>标签就是jsp:setProperty行为标签的孪生兄弟。
这个标签之所以很有用呢,是因为它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
语法格式
<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>"/>
属性
<c:set>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要存储的值 | 否 | 主体的内容 |
target | 要修改的属性所属的对象 | 否 | 无 |
property | 要修改的属性 | 否 | 无 |
var | 存储信息的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
如果指定了target属性,那么property属性也需要被指定。
演示:
设置变量
<c:set var="name" value="hu" scope="page"/>
<c:out value="${name}" escapeXml="false"/>
设置对象
<%
javaBean bean=new javaBean();
request.setAttribute("bean",bean);
%>
<c:set target="${requestScope.bean}" property="name" value="胡"></c:set>
target 对象 必须使用EL获取 (此对象必须在4大作用域里)
property 对象内的属性名 自动会调用 set
value 向 property 里的属性 赋值
<c:out value="${requestScope.bean.name}"></c:out> //胡
删除指定作用域内的变量 如果没有指定作用域那么自动查找所有作用域 删除第一次出现的此变量这个标签不是特别有用,不过可以用来确保JSP完成清理工作。
语法格式
<c:remove var="<string>" scope="<string>"/>
属性
<c:remove>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 要移除的变量名称 | 是 | 无 |
scope | 变量所属的作用域 | 否 | 所有作用域 |
演示:
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>salary 变量值: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>删除 salary 变量后的值: <c:out value="${salary}"/></p>
<c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。 用的不多 因为一般异常都在后端处理完了
语法格式
<c:catch var="<string>">
...
</c:catch>
属性
<c:catch>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 用来储存错误信息的变量 | 否 | None |
实例演示
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>异常为 : ${catchException} <br />
发生了异常: ${catchException.message}</p>
</c:if>
<c:if>标签判断表达式的值,如果表达式的值为真则执行其主体内容。 和 java if一样
语法格式
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性
<c:if>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
var | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
演示实例
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
就和java中的 if else if … else 效果一样 <c:when> 如果都不满足那么就执行 <c:otherwise>
语法格式
<c:choose>
<c:when test="<boolean>"/>
...
</c:when>
<c:when test="<boolean>"/>
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
必须使用 <c:choose> 包裹 when 和 otherwise
属性
<c:when>标签的属性如下:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
实例演示
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
<c:when test="${salary <= 2000}">
太惨了。
</c:when>
<c:when test="${salary >= 4000}">
不错的薪水,还能生活。
</c:when>
<c:otherwise>
什么都没有。
</c:otherwise>
</c:choose>
<c:import>标签提供了所有jsp:include行为标签所具有的功能,同时也允许包含绝对URL。
举例来说,使用<c:import>标签可以读取同一个服务器下 任意站点的资源 。 但是返回的是文本类型 如果是页面那么就是源码
语法格式
<c:import
url="<string>"
var="<string>"
scope="<string>"
varRender="<string>"
context="<string>"
charEncoding="<string>"/>
属性
<c:import>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 需要检索和引入的页面的URL | 是 | 无 |
context | / 紧接着一个本地网络应用程序的名称 | 否 | 当前应用程序 |
charEncoding | 所引入的数据的字符编码集 | 否 | ISO-8859-1 |
var | 用于存储所引入的文本的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
varReader | 可选的用于提供java.io.Reader对象的变量 | 否 | 无 |
实例演示
<c:import var="data" url="http://localhost:8081/java_Web/app.txt"/>
<c:out value="${data}" escapeXml="true"/>
区别就是 <c:forEach> 处理数组集合 <c:forTokens>处理字符串
这些标签封装了Java中的for,while,do-while循环。相比而言,
<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。
<c:forTokens>标签将字符串分隔为一个子串数组然后迭代它们。
forEach 语法格式
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
...
</c:forEach>
forTokens 语法格式
<c:forTokens
items="<string>"
delims="<string>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
...
</c:forTokens>
属性
<c:forEach>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 否 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
delims | 分隔符 | 是 | 无 |
<c:forEach>实例演示
<c:forEach var="i" begin="1" end="5">
<c:out value="${i}"/><p>
</c:forEach>
结果 1 2 3 4 5
遍历 集合 数组
<%
String[] str={"a","b","c","d"};
request.setAttribute("str",str);
%>
<c:forEach var="i" items="${str}">
<c:out value="${i}"/><p>
</c:forEach>
<c:forTokens>演示实例
<c:forTokens items="google,baidu,taobao" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。
语法
<c:url
var="<string>"
scope="<string>"
value="<string>"
context="<string>"/>
属性
<c:url>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 基础URL | 是 | 无 |
context | 本地网络应用程序的名称 | 否 | 当前应用程序 |
var | 代表URL的变量名 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
演示
<a href="<c:url value="http://www.baidu.com"/>">
这个链接通过 <c:url> 标签生成。
</a>
<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。
在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。
语法格式
<c:param name="<string>" value="<string>"/>
属性
<c:param>标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
name | URL中要设置的参数的名称 | 是 | 无 |
value | 参数的值 | 否 | Body |
程序示例
<c:url var="myURL" value="http://www.baidu.com">
<c:param name="name" value="hu"/>
<c:param name="pass" value="123"/>
</c:url>
<a href="<c:out value="${myURL}"/>">
使用 <c:param> 为指定URL发送两个参数。
</a>
结果 https://www.baidu.com/?name=hu&pass=123
<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
语法格式
<c:redirect url="<string>" context="<string>"/>
属性
c:redirect标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 目标URL | 是 | 无 |
context | 紧接着一个本地网络应用程序的名称 | 否 | 当前应用程序 |
实例演示
<c:redirect url="https://www.baidu.com/"/>
需要导入
<%@ 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的字符编码 |
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 | 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml标签前,你必须将XML 和 XPath 的相关jar包也引入项目
需要映入Maven依赖
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.1</version>
</dependency>
xercesImpl-2.11.0.jar
链接:https://pan.baidu.com/s/14khlmObKCV5dhVvaWaA4bg
提取码:1234
xalan-2.6.0.jar
链接:https://pan.baidu.com/s/17cN86_epsNrxJq-N7ysEnA
提取码:1234
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享
标签 | 描述 |
---|---|
<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函数库的语法如下:
<%@ 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() | 移除首位的空白符 |
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/124093390
内容来源于网络,如有侵权,请联系作者删除!