浅析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|application3.格式:(没有主体内容,有主体内容)
没有主体内容:
<% 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