JSTL(JSP Standard Tag Library,核心标签库)是 JSP 标签的集合,它封装了 JSP 应用的通用核心功能。
JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签。JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面。
JSTL 包含 5 类标签库:core 标签库、fmt 标签库、fn 标签库、XML 标签库和 SQL 标签库。这 5 类标签库基本覆盖了 Web 开发中的所涉及的技术展示。
JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。
JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为1.1版。JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性、维护性和方便性。
JSTL的下载和使用
使用 JSTL 需要引入 JSTL 的 JAR 包和标签库描述符文件(扩展名为 .tld),标签库描述符文件内包含标签库中所有标签的定义、标签名、功能类及各种属性。
JATL JAR 包官方下载网址:https://tomcat.apache.org/taglibs/standard
JATL JAR 包本站下载地址:
注意:本教程使用的 JSTL 1.2,如果你使用的是 JSTL 1.1 或之前的版本,需要导入 jstl.jar 和 standard.jar 两个包。可点击 http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 链接下载 JSTL 1.1 及之前的版本。
使用 taglib 指令导入标签库描述符文件,例如要使用 JSTL 核心标签库,需要在 JSP 页面的上方增加如下指令:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
taglib 指令通过 uri 属性引入某个标签库的配置文件,JSP 页面中通过 prefix 属性指定的前缀即可访问该标签库中的某个标签功能,如 <c:out>
。
核心标签
JSTL 核心(core)标签是最常用的 JSTL 标签,导入核心标签库的语法如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSTL 核心标签
标签 | 说明 |
---|---|
将表达式的结果输出到页面中,类似于 <%= ...%> | |
在指定范围内设置变量或属性值 | |
类似于 Java if 语句,用于条件判断 | |
类似于 Java switch 关键字,为 c:when和c:otherwise 的父标签 | |
c:choose 的子标签,用来判断条件是否成立 | |
c:choose 的子标签,当所有的 c:when 标签判断为 false 时被执行 | |
类似于 Java for,用于迭代集合中的信息 | |
类似于 Java split,用于分隔字符串 | |
用于删除数据 | |
用于捕获异常 | |
用来导入静态或动态文件 | |
用来传入参数 | |
用于将当前页面重定向至另一个 URL | |
用于将 URL 格式化为一个字符串 |
格式化标签
JSTL 格式化(fmt)标签可以通过很简单的方式转换数字、日期,导入格式化标签库的语法如下。
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
JSTL格式化标签
标签 | 说明 |
---|---|
设置请求数据的字符编码 | |
用于设置用户本地化环境 | |
绑定资源 | |
用来从指定的资源文件中调用信息 | |
绑定资源 | |
用于格式化数字、百分比和货币 | |
用于解析数字、货币和百分比 | |
用于使用不同的方式格式化日期 | |
用于把字符串类型的日期转换成日期数据类型 | |
用于指定时区 | |
用于设定默认时区 |
SQL标签
JSTL SQL 标签提供了许多操作数据库(MySQL、Oracle、SQL Server 等)的标签。虽然在大型的网站中不建议使用这种标签库,但在小型网站中经常会用到。导入 SQL 标签库的语法如下。
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
JSTL SQL 标签
标签 | 说明 |
---|---|
用来在 JSP 页面中配置数据源 | |
查询数据库中的数据 | |
更新数据库中的数据 | |
提供日期和时间的动态值 | |
事务管理 | |
设置 SQL 语句中的动态值 |
函数标签
JSTL 函数(fn)标签大部分是通用的字符串处理函数,导入函数标签库的语法如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
JSTL函数标签
标签 | 说明 |
---|---|
用于判断一个字符串是否包含指定的字符串,区分大小写 | |
用于判断一个字符串是否包含指定的字符串,不区分大小写 | |
用于判断一个字符串是否以指定的后缀结尾 | |
用于转义 HTML/XML 中的字符 | |
用于返回字符串在指定字符串中的开始位置 | |
用来将数组中的所有元素利用指定的分隔符来连接成一个字符串 | |
用于返回指定字符串的长度 | |
用于将字符串用指定的分隔符分隔为一个子串数组 | |
用于判断一个字符串是否以指定的前缀开头 | |
用来返回指定字符串的子字符串 | |
用来返回字符串中指定子字符串后面的部分 | |
用来返回字符串中指定子字符串前面的部分 | |
用来将指定字符串中的所有字符转为小写 | |
将指定字符串中的所有字符转为大写 | |
用来删除指定字符串两端的空格 |
这里的知识部分的一些标签知识,如果想要看详细的一些知识点,建议参考以下的一些文章!
EL表达式无效的问题
如果遇到el表达式不生效(原样输出问题不被解析)问题,比如${yanggb}被原样输出成字符串,通常的原因是servlet3.0默认关闭了el表达式的解析,因此jsp页面忽视了el标签,要加入不忽略el表达式的page指令才行。
IDEA使用的webapp骨架时候,自动生成的web.xml文件的web-app版本是2.3的,导致EL表达式混乱,因为EL表达式是2.4以上版本才支持的。
01、首先检查jstl的jar或者说依赖是否正确导入
<!-- JSTL 表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard 标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
02、检查是否在jsp页面导入标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
03、添加如下配置在jsp页面中!
<%@ page isELIgnored="false" %>
注:EL表达式是不需要引入包的,tomcat自带servlet的包。
04、降低jsp-api版本到2.0
05、同样每次都要修改的话很麻烦,也可以直接修改创建项目时用到的模板,-archetype-webapp的jar包。
参考文章:
06、可以尝试修改web.xml的版本问题!
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0"
metadata-complete="true">
07、如果直接创建maven工程不选骨架(webapp)进行创建的方式:
参考文章:https://blog.csdn.net/awt_fudonglai/article/details/120998037
拓展
-
如果JSP中无法自动提示EL表达式的解决方法,在maven的pom.xml中加入如下代码。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
-
如果JSP中EL表达式不起作用,原样输出,除了最上面的解决方案外,可以更改web.xml的web-app标签中的命名空间来解决。
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
</web-app>
-
另外还需要在web.xml中配置jsp-config标签。
<jsp-config>
<jsp-property-group>
<url-pattern>/jsp/* </url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
08、将jsp标签添加属性:isELIgnored
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
参考文章: