一、标签的使用
1.1 条件动作标签
1) 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>if标签</title>
</head>
<body>
<pre>
JSTL准备工作:
1、导包 jstl.jar以及standard.jar 放到WEB-INF/lib下
2、<%@taglib uri=”核心标签库路径” prefix=”前缀”%>
前缀可以随意指定,但是一般按照约定熟成的规范来写
c:if标签:
格式:
<c:if test="条件" var="指定将条件结果存域对象中键的名称" scope="指定将条件结果存在哪一个域对象中,默认page|request|session|application">
主体内容
</c:if>
相当于
if(条件){
主体内容
}
</pre>
<%
int score = 80;
request.setAttribute("score", score);
%>
之前的方式:
<%
if(score < 60){
%>
<h1>革命尚未成功,同志仍需努力!</h1>
<%
}else if(score >= 60 && score < 80){
%>
<h1>改革开放了,同志们幸苦了!</h1>
<%
}else if(score >= 80){
%>
<h1>步入小康,同志们棒棒哒!</h1>
<%
}
%>
JSTL的方式:
<c:if test="${score<60 }" var="flag" scope="session">
<h1>革命尚未成功,同志仍需努力!</h1>
</c:if>
pageContext:${pageScope.flag },request中:${requestScope.flag },session中:${sessionScope.flag },application中:${applicationScope.flag }
<c:if test="${score >= 60 && score < 80 }">
<h1>改革开放了,同志们辛苦了!</h1>
</c:if>
<c:if test="${score >= 80 }">
<h1>步入小康,同志们棒棒哒!</h1>
</c:if>
<c:if test="${empty user }">
<a href="login.jsp">亲,请登录</a>
</c:if>
<c:if test="${!empty user }">
<a href="userCenter.jsp">${user.uname }</a>
</c:if>
</body>
</html>
2) choose、when 和 otherwise 标签
<%@ 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>choose、when、otherwise标签</title>
</head>
<body>
<pre>
格式:
<c:choose>
<c:when test="条件1">
主体内容1
</c:when>
<c:when test="条件2">
主体内容2
</c:when>
<c:otherwise>
主体内容3
</c:otherwise>
</c:choose>
相当于:
if(条件1){
主体内容1
}else if(条件2){
主体内容2
}else{
主体内容3
}
注意:
1、choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签
2、choose中至少有一个when标签
3、choose标签和otherwise标签没有属性,when标签必须要有test属性
4、otherwise标签必须放在最后一个when标签之后
5、当所有的when标签的条件都不成立时,才执行otherwise标签中的语句
</pre>
<%
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>步入小康,同志们棒棒de!</h1>
</c:otherwise>
</c:choose>
</body>
</html>
1.2 迭代标签
forEach 标签
属性 | 描述 | 类型 | 是否必要 | 默认值 |
---|
var | 用来存放现在指到的成员 | String | 否 | 无 |
items | 被迭代的集合对象 | Arrays ,Collection ,Iterator, Enumeration, Map ,String | 否 | 无 |
varStatus | 用来存放现在指到的相关成员信息 | String | 否 | 无 |
begin | 开始的位置 | int | 否 | 0 |
end | 结束的位置 | int | 否 | 最后一个成员 |
step | 每次迭代的间隔数 | int | 否 | 1 |
varStatus 属性的使用:
属性 | 类型 | 意义 |
---|
index | number | 现在指到成员的索引 |
count | number | 总共指到成员的总数 |
first | boolean | 现在指到的成员是否为第一个成员 |
last | boolean | 现在指到的成员是否为最后一个成员 |
<%@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>forEach标签</title>
</head>
<body>
<%
for(int i = 0; i < 9; i++){
out.write(""+i);
}
%>
<!-- 将主体内容循环多次 -->
<c:forEach var="i" begin="1" end="8" >
主体内容${i }
</c:forEach>
<!-- 迭代集合 -->
<pre>
<c:forEach items="要迭代的集合(el表达式获取域对象中的集合)" var="指定每次迭代到的成员变量" varStatus="用来存放现在指到的相关成员信息">
主体内容 ${var指定的名称 }
</c:forEach>
varStatus属性:
index:现在指到成员的索引
count:总共指到成员的总数
first:现在指到的成员是否为第一个成员
last:现在指到的成员是否为最后一个成员
</pre>
<%
List<String> list = new ArrayList<String>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
for(String str : list){
out.write(str+" ");
}
request.setAttribute("list", list);
%>
<hr>
<c:forEach items="${list }" var="str" varStatus="status">
${str }-${status.index }-${status.count }-${status.first }-${status.last }
</c:forEach>
<hr>
<!-- 迭代对象集合 -->
<%
List<User> userList = new ArrayList<User>();
User user1 = new User("wankun","万鲲","/jstl/image/wankun.jpg");
User user2 = new User("caixukun","蔡徐坤","/jstl/image/caixukun.jpg");
User user3 = new User("qiaobiluo","桥碧罗","/jstl/image/qiaobiluo1.jpg");
userList.add(user1);
userList.add(user2);
userList.add(user3);
request.setAttribute("userList", userList);
%>
<c:forEach var="user" items="${userList }">
<h2>${user.uname }</h2>
<h2>${user.nick }</h2>
<img src="${user.head }" />
</c:forEach>
<hr>
<!-- 迭代map -->
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("user1",user1);
map.put("user2",user2);
map.put("user3",user3);
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>
1.3 格式化标签
1) formatNumber 标签
formatNumber 标签,该标签用指定的格式或精度来格式化数字, fmt:formatNumber 标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|
value | 要显示的数字 | 是 | 无 |
type | number,currency,或 percent 类型 | 否 | number |
pattern | 指定一个自定义的格式化模式用与输出 | 否 | 无 |
currencyCode | 货币码(当type="currency"时) | 否 | 取决于默认区域 |
currencySymbol | 货币符号 (当 type="currency"时) | 否 | 取决于默认区域 |
groupingUsed | 是否对数字分组 (true 或 false) | 否 | true |
maxIntegerDigits | 整型数最大的位数 | 否 | 无 |
minIntegerDigits | 整型数最小的位数 | 否 | 无 |
maxFractionDigits | 小数点后最大的位数 | 否 | 无 |
minFractionDigits | 小数点后最小的位数 | 否 | 无 |
var | 存储格式化数字的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | page |
<%@ 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>formatNumber格式化数值</title>
</head>
<body>
<!--
type:按照什么类型进行格式化
number 数字
currency 货币
percent 百分比
value:指定要格式化的数值,可以写字面值,还可以从域对象中获取
var:指定格式化后的结果存到域对象中键的名称,如果有该属性则不会直接打印
scope: 指定存储的域范围 page|request|session|application
-->
<!-- 没有主体内容,通过value指定要格式化的数值 -->
<%
request.setAttribute("num", 10000000);
request.setAttribute("num1", 88888.66666);
%>
<fmt:formatNumber value="0.25" type="percent"></fmt:formatNumber>
<fmt:formatNumber value="${num }" type="currency" currencySymbol="$"></fmt:formatNumber>
<fmt:formatNumber value="${num1 }" maxIntegerDigits="4" maxFractionDigits="2"></fmt:formatNumber>
<!-- 有主体内容,把要格式化的数据放到两个标签内部 -->
<fmt:formatNumber type="currency" var="num2" scope="request">
123456.789
</fmt:formatNumber>
${num2 }
</body>
</html>
2) formatDate 标签
使用指定的风格或模式格式化日期和时间, fmt:formatDate 标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|
value | 要显示的日期 | 是 | 无 |
type | date, time, 或 both | 否 | date |
dateStyle | full, long, medium, short, 或 default | 否 | default |
timeStyle | full, long, medium, short, 或 default | 否 | default |
pattern | 自定义格式模式 | 否 | 无 |
timeZone | 显示日期的时区 | 否 | 默认时区 |
var | 存储格式化日期的变量名 | 否 | 显示在页面 |
scope | 存储格式化日志变量的范围 | 否 | 页面 |
pattern 属性指定更精确的处理日期:
代码 | 描述 | 实例 |
---|
G | 时代标志 | AD |
y | 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 | 2002 |
M | 月份数字。一位数的月份没有前导零。 | April & 04 |
d | 月中的某一天。一位数的日期没有前导零。 | 20 |
h | 12 小时制的小时。一位数的小时数没有前导零。 | 12 |
H | 24 小时制的小时。一位数的小时数没有前导零。 | 0 |
m | 分钟。一位数的分钟数没有前导零。 | 45 |
s | 秒。一位数的秒数没有前导零。 | 52 |
S | 毫秒 | 970 |
E | 周几 | Tuesday |
D | 一年中的第几天 | 180 |
F | 一个月中的第几个周几 | 2 (一个月中的第二个星期三) |
w | 一年中的第几周r | 27 |
W | 一个月中的第几周 | 2 |
a | a.m./p.m. 指示符 | PM |
k | 小时(12 小时制的小时) | 24 |
K | 小时(24 小时制的小时) | 0 |
z | 时区 | 中部标准时间 |
<%@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>formatDate 格式化时间和日期</title>
</head>
<body>
<!--
value:指定要格式化的时间
type:
time:时:分:秒
date:年-月-日
both: 年-月-日 时:分:秒
***pattern***:自定义格式化时间
-->
<%
request.setAttribute("date", new Date());
%>
<fmt:formatDate value="${date }" type="time"/><br><!-- 16:26:18 -->
<fmt:formatDate value="${date }" type="time" timeStyle="full"/><br/> <!-- 下午04时29分32秒 CST -->
<fmt:formatDate value="${date }" type="date"/><br><!-- 2019-9-11 -->
<fmt:formatDate value="${date }" type="both"/><!-- 2019-9-11 16:27:45 -->
<hr>
自定义格式化
<fmt:formatDate value="${date }" pattern="yyyy年M月d日-H时:m分:s秒"/>
</body>
</html>
3) parseNumber 标签
利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字。即解析一个代表着数字,货币或百分比的字符串。 fmt:parseNumber 标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|
value | 要解析的数字 | 否 | Body |
type | number,currency,或 percent | 否 | number |
parseLocale | 解析数字时所用的区域 | 否 | 默认区域 |
integerOnly | 是否只解析整型数(true)或浮点数(false) | 否 | false |
pattern | 自定义解析模式 | 否 | 无 |
timeZone | 要显示的日期的时区 | 否 | 默认时区 |
var | 存储待解析数字的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | page |
<%@ 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>
<!--
type:指定按照什么类型进行解析,一定要按照正确的类型,否则会报错
-->
<%
request.setAttribute("qian", "¥1,000.00");
%>
<fmt:parseNumber value="25%" type="percent"></fmt:parseNumber>
<fmt:parseNumber value="${qian }" type="currency"></fmt:parseNumber>
<fmt:parseNumber type="currency" parseLocale="en_US" >
$1,000.00
</fmt:parseNumber>
</body>
</html>
4) parseDate 标签
此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期或时间的字符串。
<fmt:parseDate> 标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|
value | 要显示的日期 | 是 | 无 |
type | date, time, 或 both | 否 | date |
dateStyle | full, long, medium, short, 或 default | 否 | default |
timeStyle | full, long, medium, short, 或 default | 否 | default |
pattern | 自定义格式模式 | 否 | 无 |
timeZone | 显示日期的时区 | 否 | 默认时区 |
var | 存储格式化日期的变量名 | 否 | 显示在页面 |
scope | 存储格式化日志变量的范围 | 否 | 页面 |
<%@ 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>parseDate 解析日期和时间的字符串表示法</title>
</head>
<body>
<!--
type:指定按照什么类型进行解析,一定要按照正确的类型,否则会报错
var: 指定解析后的内容存在域对象中的键的名称 键:值
scope:指定解析后的内容存到哪个域对象中 page|request|session|application
-->
<%
request.setAttribute("date", "16:26:18");
request.setAttribute("date1", "2012年份第12个月第12天 12点12分12秒12毫秒");
%>
<fmt:parseDate value="${date }" type="time"></fmt:parseDate>
<fmt:parseDate pattern="yyyy年份第MM个月第dd天 HH点mm分ss秒SS毫秒">
${date1 }
</fmt:parseDate>
</body>
</html>