一、 JSTL标签库
1.1、什么是JSTL
Java Standard Tag Library Java标准标签库,一组由Sun公司已经制作好的扩展标签库,可以在JSP页面直接使用。每个标签都有它自己的功能。可以替换JSP页面上的Java代码。
1.2、JSTL标签库分类:
JSTL | 前缀 | URI | 作用 |
核心标签库 | c | http://java.sun.com/jsp/jstl/core | 一组常用的核心标签库 |
国际化标签 | fmt | http://java.sun.com/jsp/jstl/fmt | 用于页面的国际化,在不同的国家显示不同的语言 |
数据库标签 | sql | http://java.sun.com/jsp/jstl/sql | 可以直接在JSP页面上使用标签访问数据库 |
XML标签 | x | http://java.sun.com/jsp/jstl/xml | 用于在JSP上解析XML |
函数标签 | fn | http://java.sun.com/jsp/jstl/functions | 在页面上使用一组字符串的函数 |
1.3、 JSTL 使用步骤
1.3.1. 导包jstl.jar库
1.3.2. 在JSP页面上使用taglib指令
<%@taglib prefix=”c” uri=” http://java.sun.com/jsp/jstl/core” %>
1.3.3. 使用标签库
二、 判断标签<c:if>
2.1作用
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
test | true | boolean | 用来判断表达式是否为真,如果为真,则执行if标签内的代码 |
var | false | String | 将上面的test的运算结果存在这个变量名中 |
scope | false | String | 将上面的test的运算结果放在哪个域中 |
2.2示例:在LoginServlet中的会话添加一个用户信息,重定向到login.jsp页面,在login.jsp使用<c:if>进行判断。如果当前用户已经登录,则显示"欢迎您!Xxx登录成功!",否则显示一个登录的链接。
2.3代码
<!-- 判断会话域中是否有user对象,如果没有,则跳转到login.jsp -->
<c:if test="${empty sessionScope.user }" >
<!-- 重定向 -->
<c:redirect url="/login.jsp"/>
</c:if>
欢迎您!${sessionScope.user}
三、多分支标签
3.1作用
标签名 | 作用 |
choose | 判断标签的父标签 |
when | 多分支的判断条件,属性:test,类似于switch中case |
otherwise | 类似于switch中的default |
四、遍历标签<c:forEach>
4.1作用:
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
var | false | String | 指定遍历中每个元素的变量名 |
varStatus | false | String | 每次循环对象的状态,有4个属性 |
items | true | 任何支持的类型 | 要遍历的集合或数组 |
begin | true | int | 从哪一行开始 |
end | true | int | 到哪一行结束 |
step | true | int | 步长,每次跨几条记录 |
4.2 varStatuus属性
属性 | 类型 | 含义 |
index | int | 当前是第几个元素,从0开始 |
count | int | 到当前这一行一共有多少个元素了 |
first | boolean | 如果当前是第一个元素,则返回true |
last | boolean | 如果当前是最后一个元素,则返回true |
4.3遍历集合
<table border="1" width="600" align="center">
<caption>学生列表</caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
<!--
每一行是一条记录
items: 要遍历的集合或数组
var: 集合或数组中的每个元素
varStatus: 当前元素状态
● index: 当前是第几个元素,从0开始
● count: 到当前这一行一共有多少个元素了
● first: 如果当前是第一个元素,则返回true
● last: 如果当前是最后一个元素,则返回true
begin: 从哪一行开始,从0开始
end: 到哪一行结束
step: 步长,跨几步
-->
<c:forEach items="${requestScope.students}" var="stu" varStatus="row" >
<!-- 三元运算,如果为0,则输出style这句话,否则什么也不输出 -->
<tr ${row.count % 2 == 0 ? "style='background-color: lightgreen'":""}>
<td>${row.count}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<!-- 字符串可以用单引号或双引号 -->
<td>${stu.male?"男":"女"}</td>
</tr>
</c:forEach>
</table>
<table border="1" width="600" align="center">
<caption>学生列表</caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
<!--
每一行是一条记录
items: 要遍历的集合或数组
var: 集合或数组中的每个元素
varStatus: 当前元素状态
● index: 当前是第几个元素,从0开始
● count: 到当前这一行一共有多少个元素了
● first: 如果当前是第一个元素,则返回true
● last: 如果当前是最后一个元素,则返回true
begin: 从哪一行开始,从0开始
end: 到哪一行结束
step: 步长,跨几步
-->
<c:forEach items="${requestScope.students}" var="stu" varStatus="row" >
<!-- 三元运算,如果为0,则输出style这句话,否则什么也不输出 -->
<tr ${row.count % 2 == 0 ? "style='background-color: lightgreen'":""}>
<td>${row.count}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<!-- 字符串可以用单引号或双引号 -->
<td>${stu.male?"男":"女"}</td>
</tr>
</c:forEach>
</table>
数据放在作用域中,如果不放在作用域中可以使用JSP表达式
遍历数组:
<%
int [] arr = {44,12,5,1,2,3};
pageContext.setAttribute("arr", arr);
%>
<br/>
<c:forEach items="${arr}" var="num">
${num} <br/>
</c:forEach>
4.5 遍历Map:
<%
/创建一个Map
HashMap<String, String> map = new HashMap<String, String>();
map.put("n1", "潘金莲");
map.put("n2", "小乔");
map.put("n3", "孙悟空");
//放在请求域中
request.setAttribute("map", map);
%>
<hr/>
遍历Map
<br/>
<c:forEach items="${map}" var="entry">
${entry.key } -> ${entry.value} <br/>
</c:forEach>
4.6类似于Java中for循环的用法
<hr/>
从1到100
<br/>
<c:forEach begin="1" end="100" var="i" step="2">
${i} <br/>
</c:forEach>
<hr/>
从1到100
<br/>
<c:forEach begin="1" end="100" var="i" step="2">
${i} <br/>
</c:forEach>