【Jsp】第十课 Jsp标准标签库(JSTL)的学习和使用

JSTL概念

JSTL(JavaServer Pages Standard Tag Library)-JSP标准标签库,由SUN公司推出的,由Apache Jakarta 组织负责维护的用于编写和开发JSP页面的一组标准标签

JSTL 的发布包有两个版本:Standard-1.0 Taglib 、Standard-1.1 Taglib

JSTL所提供的标签函数库主要分为五大类:    

  •         核心标签库    
  •         I18N 格式标签库    
  •         SQL 标签库    
  •         XML 标签库    
  •         函数标签库

标签(Tag) 标签是一种XML元素,通过标签可以使JSP网页变得简洁并且易于维护,还可以方便地实现同一个JSP文件支持多种语言版本。由于标签是XML元素,所以它的名称和属性都是大小写敏感的

标签库(Tag library) 由一系列功能相似、逻辑上互相联系的标签构成的集合称为标签库

标签库描述文件(Tag Library Descriptor) 标签库描述文件是一个XML文件,这个文件提供了标签库中类和JSP中对标签引用的映射关系。它是一个配置文件,和web.xml是类似的,一般以.tld作为文件的扩展名

标签处理类(Tag Handle Class) 标签处理类是一个Java类,这个类继承了TagSupport或者扩展了SimpleTag接口,通过这个类可以实现自定义JSP标签的具体功能 

 JSTL项目配置步骤

创建一个动态网站项目,将jstl.jar和standard.jar插件拷贝至lib文件夹中,将c.tld配置文件拷贝至WEB-INF文件夹中:

 接着打开web.xml文件,配置以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Day15Jsp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 设置Jsp的配置文件 -->
  <jsp-config>
  <!-- 添加标签库 -->
  	<taglib>
  	<!-- 标签库的导入的网址 -->
  	<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
  	<!-- 标签库的本地配置文件 -->
  	<taglib-location>/WEB-INF/c.tld</taglib-location>
  	</taglib>
  </jsp-config>
  
  
</web-app>

然后在使用JSTL的jsp文件中加入taglib指令即可使用标签库的内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 哪一个Jsp页面需要使用核心标签库,就需要加入taglib指令
uri:填核心标签库的网址
prefix:填本地配置文件的前缀
 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

核心标签库

1.通用标签

 通用标签库用于操作(创建、删除、显示) JSP 页面内的作用域变量

通用标签库中的标签:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 哪一个Jsp页面需要使用核心标签库,就需要加入taglib指令
uri:填核心标签库的网址
prefix:填本地配置文件的前缀
 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通用标签 -->
<% request.setAttribute("a", "苹果"); %>
<c:set var="a1" value="苹果1" scope="request"></c:set>

获得Java代码存储在request对象中的数据为:${a}<br>
获得set标签存储在request对象中的数据为:${a1}<br>

<!-- 使用set标签的时候,scope可以省略,一旦省略,
默认将数据存储在pageContext对象中 -->
<c:set var="b" value="香蕉" ></c:set>
${pageScope.b}<br>

<!-- 将存储在request对象中的数据,存储至pageContext -->
<c:set var="apple" value="${a}" scope="page"></c:set>
${pageScope.apple}<br>

<!-- 将西瓜这个数据存储至application对象 -->
<c:set var="c" scope="application">西瓜</c:set>
${applicationScope.c}<br>


</body>
</html>

结合Jsp动作技术完成对象的存储

创建一个Car类,将其进行封装:

package com.abc;

public class Car {
	private String name;//车的品牌
	private double price;//车的价格
	private String type;//车的类型
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public Car() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Car(String name, double price, String type) {
		super();
		this.name = name;
		this.price = price;
		this.type = type;
	}
	@Override
	public String toString() {
		return "Car [name=" + name + ", price=" + price + ", type=" + type + "]";
	}
	
	
}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 哪一个Jsp页面需要使用核心标签库,就需要加入taglib指令
uri:填核心标签库的网址
prefix:填本地配置文件的前缀
 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通用标签 -->

<!-- 可以结合Jsp动作一起完成将对象的数据存储至某一个四大作用域中 -->
<jsp:useBean id="car" class="com.abc.Car" scope="session"></jsp:useBean>
<!-- 要给哪个对象中的什么变量存储什么数据 -->
<!-- target:填四大作用域中对应的对象
property:填变量名称 -->
<c:set target="${car}" property="name" value="红旗" ></c:set>
<c:set target="${car}" property="price" value="360000" ></c:set>
<c:set target="${car}" property="type" value="商务车" ></c:set>

获得存储在session对象中的汽车信息为:<br>
品牌:${car.name}<br>
价格:${car.price}<br>
类型:${car.type}<br>

<!-- 删除存储在四大作用域中的数据 -->
<c:remove var="a1"/>
${empty(a1)}<br>
<c:remove var="car"/>
${empty(car)}<br>
${car.name }<br>

<!-- 将四大作用域中的数据进行输出显示 -->
<c:out value="${c}"></c:out><br>
${c}

</body>
</html>

2.条件标签

JSTL 提供条件标签以支持 JSP 页面中的各种条件

条件标签包括:

 two.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 判断一个数是奇数还是偶数 -->
<c:set var="num" value="365" scope="request"></c:set>
<c:if test="${num mod 2 eq 0 }">
	<p style="color: red;">该数为偶数</p>
</c:if>
<c:if test="${num mod 2 ne 0 }">
	<p style="color: green;">该数为奇数</p>
</c:if>

<!-- 写法二  
test:作为条件表达式,用于判断结果为true还是false
var:存储的数据取的对应的名称
scope:将数据存储在哪一个作用域中
 -->
<c:if test="${num mod 2 eq 0 }" var="jieguo" scope="page"></c:if>
<c:if test="${jieguo}">
	<p style="color: red;">该数为偶数</p>
</c:if>
<c:if test="${!jieguo}">
	<p style="color: green;">该数为奇数</p>
</c:if>


<!-- 多分支条件标签 -->
<!-- 判断现在的月份是属于哪一个季节 -->
<c:set var="month" value="11" scope="session"></c:set>
<c:choose>
	<c:when test="${month>=1 && month<=3 }">
		<p style="color: green;">春季</p>
	</c:when>
	<c:when test="${month>=4 && month<=6 }">
		<p style="color: red;">夏季</p>
	</c:when>
	<c:when test="${month>=7 && month<=9 }">
		<p style="color: yellow;">秋季</p>
	</c:when>
	<c:when test="${month>=10 && month<=12 }">
		<p style="color: blue;">冬季</p>
	</c:when>
	<c:otherwise>
		<p style="color: pink;">当前的月份是一个错误的月份</p>
	</c:otherwise>
</c:choose>
</body>
</html>

3.迭代标签

迭代标签用于多次计算标签体

迭代标签库中的标签有 :

 three.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		String[] names={"张三","李四","王五","小明"};
		request.setAttribute("names", names);
	%>
	${names[0]},${names[1]},${names[2]},${names[3]}<br>
	<!-- 迭代标签 
	items:填存储在四大作用域中的数组
	var:表示定义一个变量,用于临时存储每一次循环从数组中获取出来的元素
	begin:表示设置从哪个下标开始循环
	end:表示设置到哪个下标结束循环
	varStatus:表示获得每一次循环的个数
	-->
	<c:forEach items="${names}" varStatus="v" var="name">
		<c:if test="${v.count % 2 ==0 }">
			获得数组中的数据为:${name}<br>
		</c:if>
	</c:forEach>
	
	<!-- 对字符串的分割 -->
	<c:forTokens items="蓝色,|王五|123,456,abc|def,hahaha" var="s" delims="|">
		${s }<br>
	</c:forTokens>
</body>
</html>

本章内容到这里结束!!!

猜你喜欢

转载自blog.csdn.net/u010321564/article/details/121573699