JavaWeb连载10 | JSTL标签库
1 JSTL标签库介绍
- JSTL标签库全称是JSP Standard Tag Library,是一个不断完善的开放源代码的JSP标签库
- EL表达式主要是为了替换JSP中的表达式脚本,JSTL标签库是为了替换代码脚本
- JSTL由五个不同功能的标签库组成:
2 JSTL标签库的使用步骤
-
在jsp页面中使用taglib指令引入标签库(可自动导包)
CORE 标签库 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %> XML 标签库 <%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %> FMT 标签库 <%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %> SQL 标签库 <%@ taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql” %> FUNCTIONS 标签库 <%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>
3 core核心库的使用
3.1 <c:set/>
标签
作用:可以往域中保存数据
- scope属性设置保存到哪个域,值如下:
- page 表示pageContext域(默认值)
- request表示Request域
- session表示Session域
- application表示ServletContext域
- var属性设置key是多少
- value属性设置value是多少
代码演示:在web目录下创建core.jsp
<body>
保存之前:${ sessionScope.name } <br>
<c:set scope="session" var="name" value="jchen"/>
保存之后:${ sessionScope.name } <br>
</body>
3.2 <c:if/>
标签
作用:做if判断 test属性设置判断的条件,属性值使用EL表达式 注意:如果test属性值为真则执行if开始标签和结束标签中的语句,为假则不执行
代码演示:在web目录下创建core.jsp
<body>
<c:if test="${ 1 == 1 }">
test属性值为真,我执行
</c:if>
<c:if test="${ 1 != 1 }">
test属性值为假,我不执行
</c:if>
</body>
3.3 <c:choose>
、<c:when>
、<c:otherwise>
标签
作用:多路判断,类似switch-case结构
-
choose
标签表示开始多路判断 -
when
标签表示每一种判断情况test
属性设置判断的条件,属性值使用EL表达式 注意:若test
属性值为真,则执行when
起始和结束标签中的语句 -
otherwise
标签表示其余情况,若满足,则执行起始和结束标签中的语句 注意: -
使用三种标签时标签里不能使用html注释,要使用jsp注释
-
when标签的父标签一定是choose标签
-
when标签是从上向下依次判断的,一旦有满足的就不会再判断剩余when标签
<body>
<%
request.setAttribute("grade", 55);
%>
<c:choose>
<c:when test="${ requestScope.grade > 90 }">
<div>绩点4.0</div>
</c:when>
<c:when test="${ requestScope.grade > 80 }">
<h2>绩点3.0</h2>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${ requestScope.grade > 70 }">
<h2>绩点2.0</h2>
</c:when>
<c:otherwise>
绩点1.0或无
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</body>
3.4 <c:forEach/>
标签
作用:遍历输出(与foreach循环一样,自动的遍历到下一个数据)
① 遍历1到10
代码演示:在web目录下创建foreach.jsp
<body>
<%--
begin属性设置开始的索引
end属性设置结束的索引
var属性表示循环的变量(当前正在遍历到的数据),可任意取名
循环的是foreach起始和结束标签中的内容
--%>
<c:forEach begin="1" end="10" var="i">
第${i}行
</c:forEach>
</body>
1234567891011
② 遍历数组
代码演示:在web目录下创建foreach.jsp
<body>
<%--
items表示遍历的数据源
var表示当前遍历到的数据,可任意取名
--%>
<%
request.setAttribute("arr", new String[]{"周杰伦","昆凌","方文山"});
%>
<c:forEach items="${ requestScope.arr }" var="item">
${ item } <br>
</c:forEach>
</body>
③ 遍历Map集合
<body>
<%
Map<String, Object> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="entry">
${entry.key} 等于 ${entry.value} <br>
<%-- ${entry}会将所有数据以 key=value 格式输出 --%>
</c:forEach>
</body>
④ 遍历List集合,集合中存放Student类
代码演示1:创建Student类
public class Student {
private Integer id;
private String username;
private String password;
private Integer age;
private String phone;
//以及全参、空参构造器,get、set方法、toString方法
}
代码演示2:在web目录下创建foreach.jsp
<body>
<%
List<Student> studentList = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i));
}
request.setAttribute("stus", studentList);
%>
<%--
items 表示遍历的数据源
var 表示遍历到的数据
begin表示遍历的开始索引值(起始为0),不写begin代表从第一个开始
end 表示结束的索引值,不写end代表遍历到最后一个
step 属性表示遍历的步长值,默认是1
varStatus 属性表示当前遍历到的数据的状态
--%>
<c:forEach items="${requestScope.stus}" var="stu" begin="2"
end="7" step="2" varStatus="status">
${stu.id} <br>
${stu.username} <br>
${stu.password} <br>
${stu.age} <br>
${stu.phone} <br>
${status.step} <br> <%--还可获取更多状态,见下图--%>
</c:forEach>
<%--运行结果:从3输出到8,每隔两个输出,即只有3、5、7--%>
</body>
- 原文作者:jchen
- 原文链接:http://jchenTech.github.io/post/JavaWeb/10JSTL%E6%A0%87%E7%AD%BE%E5%BA%93/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。