JSTL ---[什么是JSTL,JSTL标签]
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSTL ---[什么是JSTL,JSTL标签]相关的知识,希望对你有一定的参考价值。
什么是JSTL
JSP标准标识库,使用JSTL可实现JSP页面的逻辑处理; 可用于编写各种动态JSP页面.
JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
JSTL环境搭建
- 导入jar包文件;
- 在jsp页面添加
taglib
指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
这里的
uri 标识符
指向jar包的tld
文件,prefix
为前缀,可以自定义,一般定义为c
;也称为c标签
- 使用JSTL标签
刚才用c作为前缀的,那么直接写<c:标签 , 标签属性>内容</c:标签> 即可
条件标签 —if
if标签的几个属性
在test
中可写入条件判断(仅有test支持使用el标签
);
var
定义属性名(用于保存test中的判断结果
),scope声明作用范围
(默认为page,即PageContext域对象
);
将该标签的test返回结果自动赋值给var,再由scope决定哪个域对象可以调用;
属性 | 类型 | 是否用EL表达式` | 说明 |
---|---|---|---|
test | Boolean | 是 | 决定是否处理标签体的内容,即条件判断 |
var | String | 否 | 指定变量名,保存test属性的判断结果 |
scope | String | 否 | 指定var值的作用域范围,默认为page,可选值:page,request,session,application |
案例练习:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用tablib指令指向jstl标签库,定义前缀名prefix--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
在test中可写入条件判断(仅有test支持使用el标签),
var定义属性名,scope声明作用范围(默认为page,即PageContext域对象);
将该标签的test返回结果自动赋值给var,再由scope决定哪个域对象可以调用;--%>
<c:if test="${10<20}" var="qwe" scope="application">
若test判断到true==>内容可显示<br/>
</c:if>
scope指定了作用域,其他域对象获取不到==>;
${pageScope.qwe}<br/>
上面指定的是application应用程序域对象==>
${qwe}
</body>
</html>
启动服务器,页面显示
若test判断到true==>内容可显示
scope指定了作用域,其他域对象获取不到==>;
上面指定的是application应用程序域对象==> true
迭代标签 —forEach
forEach对Java中的集合与数组进行遍历
forEach标签的几个属性:
(1)items
: 获取需要迭代的集合或数组
,支持
EL表达式;类型为数组,字符串,集合
;
(2)var
: 定义一个变量,接收循环中获取的数据
;不支持
EL表达式,类型为String
;
(3)varStatus
: 获取循环的状态信息
,不支持
EL表达式,类型为String
;
varStatus
调用的几个参数:常用index
,count
参数 | 描述 | getter |
---|---|---|
current | 迭代的集合/数组的项 | getCurrent( ) |
index | 从0开始 的迭代索引值 | getIndex( ) |
count | 从1开始 的计数序号 | getCount( ) |
first | 判断当前是否为第一个 ,返回布尔值 | isFirst( ) |
last | 判断当前是否为最后一个 ,返回布尔值 | isLast( ) |
begin | 迭代的起始索引,对应<c:forEach 设置的begin属性值> | getBegin( ) |
end | 迭代的最终索引,对应<c:forEach 设置的end属性值> | getEnd( ) |
step | 迭代的步长,对应<c:forEach设置的step属性值> | getStep( ) |
(4)step
: 设置迭代的步长,默认为1
; 支持
EL表达式,类型为int
;
(5)end
: 设置迭代的结束索引
,支持
EL表达式,类型为int
;
若指定end属性,则在items的下标到指定end的位置就会结束迭代,若不指定,就全部迭代
(6)begin
: 设置迭代的开始索引
,支持
EL表达式,类型为int
;
若指定begin属性,则从items的下标为begin的位置开始迭代,若不指定,则全部迭代
案例练习:
- 遍历集合中的数据
创建Person类
public class Person {
//定义姓名年龄属性;
private String name;
private int age;
//有参构造方法;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//getter,setter方法;
public String getName() {
System.out.println("获取姓名方法");
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
System.out.println("获取年龄方法");
return age;
}
public void setAge(int age) {
this.age = age;
}
}
jsp文件
<%@ page import="com.xiaozhi.bean.Person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--指定导入的jstl标签库,定义前缀名prefix--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--forEach 对集合数据遍历--%>
<%--实际上此处的请求对象属性设置位于servlet;--%>
<%
//将Person类的对象存入集合;
List<Person> personList = new ArrayList<>();
//创建几个对象;
for (int i = 0; i <15; i++) {
Person person=new Person(i+"号人类",50+i);
personList.add(person);
}
//将集合的存入请求对象的personList属性中;
request.setAttribute("personList",personList);
%>
<table width="600px" align="center" border="1">
<tr>
<td>索引(由0开始)</td>
<td>序号(由1开始)</td>
<td>是否为第一个</td>
<td>是否为最后一个</td>
<td>姓名</td>
<td>年龄</td>
</tr>
<%--使用forEach标签--%>
<%--items:获取需要迭代的集合; var:接收每次迭代的数据; varStatus:循环状态信息;
step:设置迭代步长(默认为1); begin:设置迭代开始的索引; end:设置迭代结束的索引;
--%>
<c:forEach var="person" items="${personList}" varStatus="psStatus">
<tr>
<td>${psStatus.index}</td>
<td>${psStatus.count}</td>
<td>${psStatus.first}</td>
<td>${psStatus.last}</td>
<td>${person.name}</td>
<td>${person.age}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
启动服务器,页面的表格已填写数据;
设置属性 步长step="2"
,开始迭代位置 begin="4"
;结束迭代位置 end="14"
.....................
<c:forEach var="person" items="${personList}" varStatus="psStatus" step="2" begin="4" end="14">
.....................
启动服务器,
- 遍历数组中的数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--指向导入的jstl标签库,定义前缀名perfix--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--定义数组--%>
<%
String[] name={"张三","李四","阿杰","赵五"};
request.setAttribute("name",name);
%>
<%--遍历数组中数据--%>
<%--items:获取需要迭代的数组, var:接收每次迭代的数据; varStatus:迭代的状态
varStatus的参数 index 返回当前迭代的索引,由0开始;
--%>
<c:forEach items="${name}" var="value" varStatus="arrayStatus">
数组元素:${arrayStatus.index}号==>${value} <br/>
</c:forEach>
</body>
</html>
启动服务器
迭代标签 —forTokens
forTokens 用于迭代分隔字符串
有几个属性类似于forEach,属性delims
为分隔符.
属性 | 注释 |
---|---|
items | 需要进行处理的字符串 |
delims | 分隔符,可以是数字、字符串或特殊字符 |
var | 分隔items的字符串后的定义名 |
varStatus | 当前迭代的状态信息 |
step | 迭代的步长 |
begin | 设置迭代开始的索引 |
end | 设置迭代结束的索引 |
案例练习
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--指定导入的jstl标签库,定义前缀名prefix--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--forTokens 遍历字符串,进行分割--%>
<%
String str="学习,forTokens,标,签,Q,WE,R12,3X10:100,500,IO,:,的,";
request.setAttribute("str",str);
%>
<%--使用forTokens分割字符串--%>
<%-- items:需要遍历的字符串; delims:定义分隔符 ; var: 接收每次分割的字符 --%>
<c:forTokens items="${str}" delims="," var="ch">
${ch}<br/>
</c:forTokens>
</body>
</html>
启动服务器;字符串已被分隔输出;
格式化日期标签 —formatDate
注意在使用taglib
指令时,指定导入的标签库不是使用之前的;且前缀名prefix
一般命名为fmt
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
属性 | 注释 |
---|---|
value | Date类型,指定要格式化的目标 ; |
pattern | 自定义的日期格式,例如:yyyy-MM-dd HH:mm:ss;(不考虑多种语言时可使用pattern) |
var | 存储格式化日期的变量名 |
type | 值:time或date或both。控制仅出现时间,仅出现日期,或者都出现 |
dateStyle | 指定日期显示格式, 值:SHORT,MEDIUM,LONG,FULL(默认) |
timeStyle | 指定时间显示格式 , 值:SHORT,MEDIUM,LONG,FULL(默认) |
scope | 存储格式化日志变量的范围 |
案例练习
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--指定导入的jstl标签库;定义前缀名prefix--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--将当前时间赋值给请求对象的自定义属性now;--%>
<%
request.setAttribute("now",new Date());
%>
<%--value: 指定要格式化的目标, pattern:设置格式化的格式(规则)--%>
<fmt:formatDate value="${now}" pattern="yyyy年MM月dd日 HH时mm分ss秒"/>
</body>
</html>
启动服务器,页面输出为
2021年08月12日 12时30分45秒
以上是关于JSTL ---[什么是JSTL,JSTL标签]的主要内容,如果未能解决你的问题,请参考以下文章