上一篇,我们学了EL表达式的使用,我们将其称为简化JSP页面的屠龙宝刀,今天我们就来学下’倚天剑’----JSTL。
JSTL(Java Server Pages Standard Tag Library),即JSP标准标签库,是由Sun公司制定的一套标签标准,为开发者提供更加方便、有效的标签,以减少JSP开发的难度。
JSTL虽然被称作标准标签库,实际上由5个不同功能的标签库共同组成,如下所示:
其中的每个标签库的具体功能如下:
对于以上五个标签库,因为MVC设计模式,其中的SQL、XML、Functions中标签所实现的功能,我们会将对应的操作放在服务端来实现,I18N我们也很难用得到。因此,JSTL中对我们而言,最重要的也就是Core标签库,下面我们来一起学习下。
相比于EL表达式,JSTL在使用上稍微麻烦些,主要有如下步骤。
我们要使用JSTL,需要依赖两个jar包,下载方式主要有如下两种。
官网下载,下载地址为:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/,选择最新的版本的压缩包下载即可。
maven仓库下载,下载地址分别为:https://repo1.maven.org/maven2/javax/servlet/jsp/jstl/jstl/1.2/
https://mvnrepository.com/artifact/taglibs/standard/1.1.2
下载完成后,可以得到jstl.jar、standard.jar,其中jstl.jar中包含JSTL规范中定义的接口和相关类,standard.jar包含用于实现JSTL的实现类和JSTL五个标签库的描述符文件(TLD)。
将上面下载的两个jar包复制到Web-Inf下的lib目录下,并右击build path。
以上就是所有的准备工作,下面我们通过一个简单的页面来试一下JSTL的功能。
需要注意的是,在使用JSTL时,页面上需要使用taglib指令导入Core标签库,语法如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
下面,我们通过一个简单的页面来展示JSTL的使用,页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Insert title here
页面效果和out.println("你好,欢迎使用JSTL标签库")
相同,运行效果如下图所示:
在MVC之前,JSP文件是一个独立、能自主完成所有任务的模块,因此JSTL提供的强大、便捷的标签库便是节约成本、简化JSP开发的无上利器。
因为MVC的设计理念,JSP承担的功能比较明确,JSP中的许多的功能被放在Controller、和Model中,因此JSTL中的许多标签就没了用武之地。我们在本文中,也仅仅介绍一些到现在仍有较强生命力的一些标签,这些标签仍然可以给我们的开发工作带来很大的便捷。
在程序开发中,经常需要使用if
语句进行条件判断,从
标签的名字,我们就可以猜到,此标签的可以在JSP页面中进行条件判断。
标签有两种语法,具体如下:
语法1:没有标签体的情况
语法2:有标签体的情况
dody content
其中,test属性用与设置逻辑表达式,即需要进行的判断条件;var属性用与指定逻辑表达式中变量的名字;scope属性用与指定var设定的变量的作用范围(JSP四大域对象)。如果test计算的结果为true,那么标签体才会被执行,否则标签中的内容不会被执行。
下面,我们通过一个例子,来演示下
标签的使用,示例代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
param.role: ${param.role }
This is admin page!
This is user page!
非法用户!
其中的${param.role }
是通过EL表达式获取url中的参数,页面运行效果如下所示:
当在url中输入role=admin后,可以看到,页面中输出了
,和我们预计相符。同理,url中输入role=user后,页面中会输出This is admin page!
。This is user page!
看完上面的
标签,是不是会疑惑,如果我想在if
后面接else
、else if
,那要怎么处理呢?为了实现你的需求,Core标签库提供了
标签,该标签可以指定多个条件的组合边界。
标签没有属性,在他的标签体中,只能和一个或多个
、零个或一个
一起配套使用。其语法类似于if-else if-...-else
。
、
、
配合使用的语法如下:
Body Content(when、otherwise、other label)
Body Content
...
Body Content
下面,我们通过一个例子,来演示下
标签的使用,示例代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
unKnown user.
${ param.username} is admin manager.
${ param.username} is employee.
页面运行结果如下图所示:
接下来就是我们今天的重头戏了,也是我个人觉得Core标签库中最重要的一个标签----
。从名字也能看出来,这是JSP页面中用于遍历集合中的元素,就像for
循环一样。
有两种使用方式,一种是迭代对象结合,也是我们java中常用的for(A a : aList)
,语法如下:
body content
的另一种方式,就是迭代指定的范围,类似于java中常用的for(int i=0;i
body content
在上述语法中,出现的属性的具体含义如下:
而且,
可以和EL表达式结合在一起使用,当我们需要在页面上展示列表数据时,就可以非常方便的实现。下面,我们通过一个例子来演示下,示例代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
//构造List,添加测试数据
List userList = new ArrayList();
userList.add("lizishu");
userList.add("admin");
userList.add("user");
%>
序号
索引
是否为第一个元素
是否为最后一个元素
元素的值
${status.count}
${status.index}
${status.first}
${status.last}
${name}
从代码中,我们可以看到,
标签可以用于迭代输出table中的每行数据,并且可以很好的和EL表达式结合,非常方便的完成了数据的列表展示。其中count、index、first、last为varStatus中保存的信息。
上面页面运行的结果如下图所示:
虽然JSTL标签库中的许多标签因为各种原因,变得不再常用,而EL与JSTL也因为JSP的慢慢的退出核心舞台也没有之前一样耀眼了,但是,在需要的时候,或者说在使用JSP开发前后端不分离的页面时,EL与JSTL一定可以成为你的手中的倚天、屠龙,荡平复杂的数据交互,横扫一切不服之臣。
又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,如果有什么错误,还请批评指正。
Java web这一专栏会是一个系列博客,喜欢的话可以持续关注,如果本文对你有所帮助,还请还请点赞、评论加关注。
有任何疑问,可以评论区留言。