在JSP页面中使用标签库代替传统Java片段语文来实现页面显示逻辑已经不是新技术了,但是自定义的标签容易造成重复定义和非标准的实现,所以JSTL(JSP Standard Tag Library,JSP标准标签库)诞生了。JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的(标准是SUN制定,apache实现的,SUN收录了apache的实现)。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上。
Version | JSTL version | Requirements |
---|---|---|
Standard 1.2.3 | JSTL 1.2 | Servlet 2.5, JavaServer Pages 2.1 |
Standard 1.1 | JSTL 1.1 | Servlet 2.4, JavaServer Pages 2.0 |
Standard 1.0 | JSTL 1.0 | Servlet 2.3, JavaServer Pages 1.2 |
Sun 发布的标准 JSTL1.1 标签库有以下几个标签:
- 核心标签库:包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
- 格式化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
- 数据库标签库:可以做访问数据库的工作。
- XML 标签库:用来访问 XML 文件的工作,这是 JSTL 标签库的一个特点。
- 函数标签库:用来读取已经定义的某个函数。
使用JSTL的步骤:
- 在项目中引入jstl的相关jar包,确保jar存在:jstl.jar、standard。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
- 在需要使用标签的JSP页面上使用taglib指令引入标签库。
- 在需要使用标签的位置直接使用标签库。
函数标签:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL_FN</title>
</head>
<body>
<hr>
<!-- ****字符串包含【fn:contains()】****
${fn:contains(原始字符串, 要查找的子字符串)}
-->
${fn:contains('i love you!', 'I')}
<!-- 输出:
false
-->
<hr>
<!-- ****忽略大小写字符串包含【fn:containsIgnoreCase()】****
${fn:containsIgnoreCase(原始字符串, 要查找的子字符串)}
-->
${fn:containsIgnoreCase('i love you!', 'I')}
<!-- 输出:
true
-->
<hr>
<!-- ****字符串是否以指定后缀结尾【fn:endsWith()】****
${fn:endsWith(原始字符串, 要查找的子字符串)}
-->
${fn:endsWith('i love you!', 'you!')}
<!-- 输出:
true
-->
<hr>
<!-- ****函数忽略用于XML标记的字符【fn:escapeXml()】****
${fn:escapeXml(要转义标记的文本)}
-->
${"This <abc>is second String.</abc>"}
<br>
${fn:escapeXml("This <abc>is second String.</abc>")}
<!-- 输出:
This is second String.
This <abc>is second String.</abc>
-->
<hr>
<!-- ****返回指定子串的位置【fn:indexOf()】****
${fn:indexOf(原始字符串,子字符串)}
返回位置从0开始
-->
${fn:indexOf("原始字符串","字符串")}
<!-- 输出:
2
-->
<hr>
<!-- ****将数组的元素使用指定的分隔符来连接成一个字符串【fn:join()】****
${fn:join(数组, 分隔符)}
-->
<%
String[] array_ = {"1", "2", "3"};
pageContext.setAttribute("array_",array_);
%>
${fn:join(array_, '-')}
<!-- 输出:
1-2-3
-->
<hr>
<!-- ****返回字符串或集合的长度【fn:length()】****
${fn:length(collection)}
${fn:length(string)}
-->
${fn:length(array_)}
、
${fn:length("123456789")}
<!-- 输出:
3 、 9
-->
<hr>
<!-- ****字符串替换【fn:replace()】****
${fn:replace(原始字符串, 被替换的字符串, 要替换的字符串)}
-->
${fn:replace("原始字符串", "字符串", "String")}
<!-- 输出:
原始String
-->
<hr>
<!-- ****分隔符分裂【fn:split()】****
${fn:split(带分隔符的字符串, 分隔符)}
-->
${fn:join(fn:split("1-2-3", "-"), '*')}
<!-- 输出:
1*2*3
-->
<hr>
<!-- ****是否以指定的前缀开始【fn:startsWith()】****
${fn:startsWith(原始字符串, 搜索的前缀)}
-->
${fn:startsWith("原始字符串","前缀")}
、
${fn:startsWith("原始字符串","原始")}
<!-- 输出:
false 、 true
-->
<hr>
<!-- ****返回字符串的子集【fn:substring()】****
${fn:substring(string, beginIndex, endIndex)}范围区间为前闭后开
-->
${fn:substring("返回字符串的子集", 2, 6)}
<!-- 输出:
字符串的
-->
<hr>
<!-- ****返回字符串在指定子串之后的子集【fn:substringAfter()】****
${fn:substringAfter(string, substring)}
-->
${fn:substringAfter("返回字符串在指定子串之后的子集", "字符串在")}
<!-- 输出:
指定子串之后的子集
-->
<hr>
<!-- ****返回一个字符串中指定子串前面的部分【fn:substringBefore()】****
${fn:substringBefore(string, substring)}
-->
${fn:substringBefore("返回字符串在指定子串之后的子集", "指定子串")}
<!-- 输出:
返回字符串在
-->
<hr>
<!-- ****字符转为小写【fn:toLowerCase()】****
${fn:toLowerCase(string)}
-->
${fn:toLowerCase("asdfERW转为小写")}
<!-- 输出:
asdferw转为小写
-->
<hr>
<!-- ****字符转为大写【fn:toUpperCase()】****
${fn:toUpperCase(string)}
-->
${fn:toUpperCase("asdfERW转为大写")}
<!-- 输出:
ASDFERW转为大写
-->
<hr>
<!-- ****移除首尾的空白符【fn:trim()】****
${fn:trim(string)}
-->
-${fn:trim(" 移除首尾的空白符 ")}-
<!-- 输出:
-移除首尾的空白符-
-->
</body>
</html>