浅析JSTL:

浅析JSTL:

1.相关概念:(此部分来源百度百科)

**1.全称:**Java Server Pages Standard Tag Libray(即JSP标准标签库);


**2.概述:**JSTL是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。


**3.作用:**减少JSP文件的Java代码,使Java代码与HTML代码分离;


4.优势:(1)简化了JSP和Web应用程序的开发。

​ (2)在应用程序服务器之间提供了一致的接口,最大限度地提高了·Web应用在各应用服务器之间的移植。

​ (3)允许JSP设计工具与Web应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。

​ (4)以一种统一的方式减少了JSP中的Scriptlets代码数量,可以达到程序中没有任何Scriptlest代码。


5.使用条件:(1)要在JSP页面中使用JSTL标签,需使用taglib指令(前缀可以随意指定,但是一般按照约定熟成的规范来写)引用标签库。

  <%@taglib uri=”核心标签库路径” prefix=”前缀”%>

​ (2)要在JSP中使用JSTL标签,还需要下载安装JSTL实现(Implementation)。 (导入两个jar包·jstl.jar和·standard.jar)

2.标签的使用:

1)条件动作标签:

在 JSTL 中有 4 个标签,可以执行条件式动作指令:if、choose、when
和 otherwise。

(1)if标签:

1.格式:(没有主体内容、有主体内容这两种形式)

***&1有主体内容:***(当条件为true时才会执行主体内容)

<c:if test="条件" var="指定将条件结果存域对象中键的名称" scope="指定将条件结果存在哪一个域对象中,默认page|request|session|application">
			主体内容
 </c:if>

相当于:

if(条件){
		主体内容
		}

***&2没有主体内容:***(var 指定的限域变量由同一个 JSP 页面中后面的标签测试所决定。)

<c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page">
</c:if>
实例代码:
<%@ 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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	<%
		int score = 80;
		request.setAttribute("score", score);
	%>
	<c:if test="${score<60 }" var="flag" scope="session">
		<h1>不及格!</h1>
	</c:if>
	<c:if test="${score >= 60 && score < 80 }">
		<h1>继续努力哟!</h1>
	</c:if>
	<c:if test="${score >= 80 }">
		<h1>棒棒哒,啾咪啾咪!</h1>
	</c:if>
	
</body>
</html>
(2) choose、when 和 otherwise 标签:

1.作用: choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似:

2.使用方式:choose 标签内容部必须嵌有一个或多个 when 标签,每个 when 标签代表可以进行运算和处理的一种情况。otherwise 标签用于默认的条件代码块(如果有 otherwise 标签,它必须放在最后一个when 标签之后,否则会报错);***

3.注意:

(1)choose标签中只能有when和otherwise标签,when和otherwise 标签

中可有其他标签;

(2)choose中至少有一个when标签;

(3)choose标签和otherwise标签没有属性,when标签必须要有test属性;

(4)otherwise标签必须放在最后一个when标签之后;

(5)当所有的when标签的条件都不成立时,才执行otherwise标签中的语句;

4.格式:

<c:choose>
		<c:when test="条件1">
			主体内容1
		</c:when>
		<c:when test="条件2">
			主体内容2
		</c:when>
		<c:otherwise>
			主体内容3
		</c:otherwise>
	</c:choose>
实例代码:
<%@ 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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	<%
		request.setAttribute("score", 80);
	%>
	
	<c:choose>
		<c:when test="${score < 60 }">
			<h1>不及格!</h1>
		</c:when>
		<c:when test="${score >= 60 && score < 80 }">
			<h1>继续努力哟!</h1>
		</c:when>
		<c:when test="${score <= 59 }">
			<h1>你猜猜会不会穿透?</h1>
		</c:when>
		<c:otherwise>
			<h1>棒棒哒,啾咪啾咪!</h1>
		</c:otherwise>
	</c:choose>

</body>
</html>
2)迭代标签:
(1)forEach 标签:

1.格式:(一:将主体内容迭代多次;二:用于迭代一个对象集合:)

主体内容迭代多次:

<c:forEach var="每次循环的成员(限域变量)" begin="开始数" end="结束数" step="间隔数(默认
是1)" >
主体内容
</c:forEach>

迭代一个对象集合:

<c:forEach var="每次循环的成员(限域变量)" items="需要迭代的集合" varStatus="循环到的成员
的相关信息">
主体内容
</c:forEach>

实例代码:
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="com.mage.po.User"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ 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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>

	<!-- 将主体内容循环多次 -->
	<c:forEach var="i" begin="1" end="8" >
		主体内容${i }
	</c:forEach>
	<!-- 迭代list集合 -->
	<%
		List<String> list = new ArrayList<String>();
		list.add("meng");
		list.add("peng");
		list.add("xiaoxiao");
		for(String str : list){
			out.write(str+" ");
		}
		request.setAttribute("list", list);
	%>
	<hr>
	<!-- 迭代对象集合 -->
	<%
		List<User> userList = new ArrayList<User>();
		User user1 = new User("dameng","大萌");
		User user2 = new User("xiaopeng","小鹏",);
		userList.add(user1);
		userList.add(user2);
		request.setAttribute("userList", userList);
	%>
	<c:forEach var="user" items="${userList }">
		<h2>${user.uname }</h2>
		<h2>${user.nick }</h2>
	</c:forEach>
	
	<hr>
	<!-- 迭代map -->
	<%
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("user1",user1);
		map.put("user2",user2);
		request.setAttribute("map", map);
	%>
	<c:forEach items="${map }" var="item">
		${item.key }-${item.value }
		<h2>${item.value.nick }</h2>
		<h2>${item.value.uname }</h2>
	</c:forEach>
</body>
</html>
3)格式化标签:
(1) formatNumber 标签:

**1.作用:**该标签用指定的格式或精度来格式化数字:

2.属性:
在这里插入图片描述

***3.常用属性:***(1)type:按照什么类型进行格式化:(number 数字、currency 货币percent 百分比)
(2)value:指定要格式化的数值,可以写字面值,还可以从域对象中获取
(3)var:指定格式化后的结果存到域对象中键的名称,如果有该属性则不会直接打印
(4)scope: 指定存储的域范围 page|request|session|application

3.格式:(没有主体内容,有主体内容)

没有主体内容:

<%
request.setAttribute("num", 520);
%>
<fmt:formatNumber var="i" value="0.5" type="percent"></fmt:formatNumber>
${i }
<fmt:formatNumber value="${num }" type="currency"></fmt:formatNumber>

有主体内容:

<%
request.setAttribute("num", 5201314.2391);
%>
<fmt:formatNumber type="currency">
9999 
</fmt:formatNumber>
<fmt:formatNumber type="number" maxIntegerDigits="3" maxFractionDigits="2">
${num }
</fmt:formatNumber>

(2)formatDate 标签:

**1.作用:**使用指定的风格或模式格式化日期和时间;

2.属性:
在这里插入图片描述

3.最常用属性:(1)value:指定要格式化的时间
(2)type: time:时:分:秒,date:年-月-日,both: 年-月-日 时:分:秒
(3)pattern:自定义格式化时间(最便捷的)

4.pattern:
在这里插入图片描述

实例代码:
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	
	 <%
	 	request.setAttribute("date", new Date());
	 %>
	<fmt:formatDate value="${date }" type="time"/><br>
	<fmt:formatDate value="${date }" type="time" timeStyle="full"/><br/> 
	<fmt:formatDate value="${date }" type="date"/><br>
	<fmt:formatDate value="${date }" type="both"/>
	<hr>
	自定义格式化
	<fmt:formatDate value="${date }" pattern="yyyy年M月d日-H时:m分:s秒"/>
</body>
</html>
(3) parseNumber 标签:(用得少)

**1.作用:**可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字。

2.属性:
在这里插入图片描述

3.格式:(有主体内容,没有主体内容)
有主体内容:

<%
request.setAttribute("num", "$520.00");
%>
<fmt:parseNumber type="currency" parseLocale="en_US">
${num }
</fmt:parseNumber>

没有主体内容:

<%
request.setAttribute("num1", "520.789");
%>
<fmt:parseNumber value="${num1 }" type="number" var="aa"></fmt:parseNumber>${aa
}
(4) parseDate 标签:

1.作用:即解析一个代表着日期或时间的字符串。

2.属性:
在这里插入图片描述

3.格式:(有主体内容,没有主体内容)
有主体内容:

<%
request.setAttribute("now", "09-11-2019");
%>
<fmt:parseDate pattern="MM-dd-yyyy">${num }</fmt:parseDate><br>

没有主体内容:

<%
request.setAttribute("now", "09-11-2019");
%>
<fmt:parseDate value="${now }" pattern="MM-dd-yyyy"></fmt:parseDate><br>
<fmt:parseDate va

内容,没有主体内容)

有主体内容:

<%
request.setAttribute("now", "09-11-2019");
%>
<fmt:parseDate pattern="MM-dd-yyyy">${num }</fmt:parseDate><br>

没有主体内容:

<%
request.setAttribute("now", "09-11-2019");
%>
<fmt:parseDate value="${now }" pattern="MM-dd-yyyy"></fmt:parseDate><br>
<fmt:parseDate va
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值