JSTL —[什么是JSTL,JSTL标签]

JSTL —[什么是JSTL,JSTL标签]文章目录什么是 JSTLJSTL 环境搭建什么是 JSTLJSP 标准标识库 使用 JSTL 可实现 JSP 页面的逻辑处理 可用于编写各种动态 JSP 页面 JSTL Javaserverpa 即 JSP 标准标签库 是由 JCP Javacommunit 所制定的标准规范 它主要提供给 JavaWeb 开发人员一个标准通用的标签库 并由 Apache 的 Jakarta 小组来维护 开发人员可以利用这些标签取代 JSP 页面上的 Java 代码 从而提高程序的可



什么是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作为前缀的,那么直接写

内容
即可

在这里插入图片描述


条件标签 —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 迭代的起始索引,对应
getBegin( )
end 迭代的最终索引,对应
getEnd( )
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> 

启动服务器,页面输出为

20210812123045

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222145.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:28
下一篇 2026年3月17日 下午4:29


相关推荐

  • es6模板字符串_模板字符串如何实现

    es6模板字符串_模板字符串如何实现<spanclass=”fr”>${(function(){if(list[item].oStatus==0){return`待交易`;}elseif(list[item].oStatus==1){return’已交易’;}else{return’已过期’;}

    2022年8月21日
    16
  • Ehcache 入门详解 (转)[通俗易懂]

    Ehcache 入门详解 (转)[通俗易懂]一:目录EhCache简介HelloWorld示例Spring整合二:简介2.1、基本介绍EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hiberna

    2022年7月1日
    48
  • linux chmod详解

    linux chmod详解文件的权限表示可以通过 ll 命令展示文件的信息 chmod 文件权限 chmod 命令 chmod changemode 命令是控制用户对文件的权限的命令 Linux Unix 的文件调用权限分为三级 文件所有者 Owner 用户组 Group 其它用户 OtherUsers 语法 chmodmodefil 其中 mode 可以设定为字符串 ugoa rwx 其中 ugoa 代表的是 u

    2026年3月19日
    3
  • hibernate和mybatis的区别及特点_hibernate配置文件中,不包含下面的

    hibernate和mybatis的区别及特点_hibernate配置文件中,不包含下面的很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理。今天,我分享的主题是:在一个项目中同时使用Hibernate和Mybatis两个ORM框架。作为一个开发者,没有必要花费过多的时间去证明技术无用论,当你开始指责某个框架垃圾,另外一个框架最好时,隐性的暴露出你对某个框架没有深入的研究,无知的指责对于技术的提升没有…

    2025年8月29日
    7
  • Python求均值,方差,标准差

    Python求均值,方差,标准差importnumpya 1 2 3 4 5 6 求均值 arr mean np mean arr 求方差 arr var np var arr 求标准差 arr std np std arr ddof 1 print 平均值为 f arr mean print 方差为 f arr var print 标准差为 f

    2026年3月26日
    2
  • Java—方法重写

    Java—方法重写什么是方法重写 overriding 子类根据需求从父类继承的方法进行重新编写重写是 可以使用 super 方法的方式来保留父亲的方法构造方法不能被重写举个栗子 如果父类中有个输出宠物姓名和年龄的方法 但是要求输出狗的品种和猫的声音那么到底怎么重写呢 话不多说 上代码 Animal 作为父类 有这动物的共有属性 名字和年龄 并且有 print 方法输出动物的信息 publiccla

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号