JSP战力倍增器----JSTL详解

上一篇,我们学了EL表达式的使用,我们将其称为简化JSP页面的屠龙宝刀,今天我们就来学下’倚天剑’----JSTL。

JSP战力倍增器----JSTL详解_第1张图片

文章目录

    • 1.JSTL的概念
    • 2.JSTL的使用
      • 2.1 下载JSTL包
      • 2.2 导入JAR包
      • 2.3 JSTL初体验
    • 3.Core标签库中常用的标签
      • 3.1 标签
      • 3.2 标签
      • 3.3 标签
    • 4.总结

1.JSTL的概念

​JSTL(Java Server Pages Standard Tag Library),即JSP标准标签库,是由Sun公司制定的一套标签标准,为开发者提供更加方便、有效的标签,以减少JSP开发的难度。

​JSTL虽然被称作标准标签库,实际上由5个不同功能的标签库共同组成,如下所示:

JSP战力倍增器----JSTL详解_第2张图片

​其中的每个标签库的具体功能如下:

  • Core:核心标签库,包含了实现Web应用中通用操作的标签;
  • I18N:国际化/格式化标签库,它包含实现Web应用程序的国际化标签和格式化标签;
  • SQL:数据库标签库,它包含了用于访问数据库和对数据库中的数据进行操作的标签;
  • XML:操作XML文档的标签库,它包含对XML文档中的数据进行操作的标签;
  • Functions:函数标签库,它提供了一套自定义EL函数,包含了JSP网页制作用到的字符串操作。

​对于以上五个标签库,因为MVC设计模式,其中的SQL、XML、Functions中标签所实现的功能,我们会将对应的操作放在服务端来实现,I18N我们也很难用得到。因此,JSTL中对我们而言,最重要的也就是Core标签库,下面我们来一起学习下。

2.JSTL的使用

​相比于EL表达式,JSTL在使用上稍微麻烦些,主要有如下步骤。

2.1 下载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)。

2.2 导入JAR包

​将上面下载的两个jar包复制到Web-Inf下的lib目录下,并右击build path。

JSP战力倍增器----JSTL详解_第3张图片

2.3 JSTL初体验

​以上就是所有的准备工作,下面我们通过一个简单的页面来试一下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标签库")相同,运行效果如下图所示:

JSP战力倍增器----JSTL详解_第4张图片

3.Core标签库中常用的标签

​在MVC之前,JSP文件是一个独立、能自主完成所有任务的模块,因此JSTL提供的强大、便捷的标签库便是节约成本、简化JSP开发的无上利器。

​因为MVC的设计理念,JSP承担的功能比较明确,JSP中的许多的功能被放在Controller、和Model中,因此JSTL中的许多标签就没了用武之地。我们在本文中,也仅仅介绍一些到现在仍有较强生命力的一些标签,这些标签仍然可以给我们的开发工作带来很大的便捷。

3.1 标签

​在程序开发中,经常需要使用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中的参数,页面运行效果如下所示:

JSP战力倍增器----JSTL详解_第5张图片
JSP战力倍增器----JSTL详解_第6张图片

​当在url中输入role=admin后,可以看到,页面中输出了

This is admin page!

,和我们预计相符。同理,url中输入role=user后,页面中会输出

This is user page!

3.2 标签

​看完上面的标签,是不是会疑惑,如果我想在if后面接elseelse 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.
 	   
	


​页面运行结果如下图所示:

JSP战力倍增器----JSTL详解_第7张图片
JSP战力倍增器----JSTL详解_第8张图片

3.3 标签

​接下来就是我们今天的重头戏了,也是我个人觉得Core标签库中最重要的一个标签----。从名字也能看出来,这是JSP页面中用于遍历集合中的元素,就像for循环一样。

有两种使用方式,一种是迭代对象结合,也是我们java中常用的for(A a : aList),语法如下:


	body content

的另一种方式,就是迭代指定的范围,类似于java中常用的for(int i=0;i,语法如下:


	body content

​在上述语法中,出现的属性的具体含义如下:

  • var属性用于指定将当前迭代的元素保存到page域中的哪个变量中;
  • items属性用与指定将要迭代的结合对象;
  • varStatus属性用与指定当前迭代状态信息(比如index)保存到page域中的名称;
  • begin属性用于指定从集合的第几元素开始进行迭代,默认从0开始;如果是第二种方式,即没有items属性,则从begin指定的值开始迭代;
  • end属性用于指定最后迭代结束的值;
  • step属性用与指定迭代的步长。

​而且,可以和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中保存的信息。

​上面页面运行的结果如下图所示:

JSP战力倍增器----JSTL详解_第9张图片

4.总结

​虽然JSTL标签库中的许多标签因为各种原因,变得不再常用,而EL与JSTL也因为JSP的慢慢的退出核心舞台也没有之前一样耀眼了,但是,在需要的时候,或者说在使用JSP开发前后端不分离的页面时,EL与JSTL一定可以成为你的手中的倚天、屠龙,荡平复杂的数据交互,横扫一切不服之臣。


​又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,如果有什么错误,还请批评指正。

​Java web这一专栏会是一个系列博客,喜欢的话可以持续关注,如果本文对你有所帮助,还请还请点赞、评论加关注。

​有任何疑问,可以评论区留言。

你可能感兴趣的:(Java,Web,java,java,web,jstl)