The full name of JSTL tag library refers to JSP Standard Tag Library. It is an open source JSP tag library that is constantly improving.
The EL expression is mainly to replace the expression script in the jsp, and the tag library is to replace the code script. This makes the entire jsp page better and more concise.
JSTL consists of five tag libraries with different functions.
Function range | HATE | Prefix |
---|---|---|
Core Tag Library-Highlights | http://java.sun.com/jsp/jstl/core | c |
format | http://java.sun.com/jsp/jstl/fmt | fmt |
function | http://java.sun.com/jsp/jstl/functions | fn |
Database (not used) | http://java.sun.com/jsp/jstl/sql | sql |
XML (not used) | http://java.sun.com/jsp/jstl/xml | x |
Use the taglib instruction to introduce the tag library in the jsp tag library
CORE tag library
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
XML tag library
<%@ taglib prefix=“x” uri=“http://java.sun.com/jsp/jstl/xml” %>
FMT tag library
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
SQL tag library
<%@ taglib prefix=“sql” uri=“http://java.sun.com/jsp/jstl/sql” %>
FUNCTIONS tag library
<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>
1. Steps to use JSTL tag library
1. First import the jar package of the jstl tag library.
taglibs-standard-impl-1.2.1.jar
taglibs-standard-spec-1.2.1.jar
2. In the second step, use the taglib instruction to introduce the tag library.
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
2.core core library use
2.1 <c:set /> (rarely used)
Role: set tag can save data to the domain
<body>
<%--
<c:set />(使用很少)
作用:set 标签可以往域中保存数据
域对象.setAttribute(key,value);
scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域
var属性设置key是多少
value属性设置值是多少
--%>
保存之前:${requestScope.abc} <br>
<c:set scope="request" var="abc" value="abcValue"/>
保存之后:${requestScope.abc} <br>
</body>
Show results:
2.2 <c:if />
The if tag is used to make if judgments.
<%--
<c:if />
if 标签用来做 if 判断。
test 属性表示判断的条件(使用 EL 表达式输出)
--%>
<c:if test="${ 12 == 12 }">
<h1>12 等于 12</h1>
</c:if>
<c:if test="${ 12 != 12 }">
<h1>12 不等于 12</h1>
</c:if>
Show results:
2.3 < c:choose > < c:when > < c:otherwise >标签
Role: Multi-way judgment. Very close to switch… case… default
<%--
<c:choose> <c:when> <c:otherwise>标签
作用:多路判断。跟 switch ... case .... default 非常接近
choose 标签开始选择判断
when 标签表示每一种判断情况
test 属性表示当前这种判断情况的值
otherwise 标签表示剩下的情况
<c:choose> <c:when> <c:otherwise>标签使用时需要注意的点:
1、标签里不能使用 html 注释,要使用 jsp 注释
2、when 标签的父标签一定要是 choose 标签
--%>
<%
request.setAttribute("height", 180);
%>
<c:choose>
<%-- 这是 html 注释 --%>
<c:when test="${ requestScope.height > 190 }">
<h2>小巨人</h2>
</c:when>
<c:when test="${ requestScope.height > 180 }">
<h2>很高</h2>
</c:when>
<c:when test="${ requestScope.height > 170 }">
<h2>还可以</h2>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${requestScope.height > 160}">
<h3>大于 160</h3>
</c:when>
<c:when test="${requestScope.height > 150}">
<h3>大于 150</h3>
</c:when>
<c:when test="${requestScope.height > 140}">
<h3>大于 140</h3>
</c:when>
<c:otherwise>
其他小于 140
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
Show results:
2.4 < c:forEach />
Role: traverse output use.
2.4.1 Traverse 1 to 10, output
<c:forEach begin="1" end="10" var="i">
<%--1. --%>
${i} <br>
<%--2. --%>
<h1>${i}</h1>
</c:forEach>
or:
<%--
<c:forEach />
作用:遍历输出使用
--%>
<%--
1.遍历 1 到 10,输出
begin 属性设置开始的索引
end 属性设置结束的索引
var 属性表示循环的变量(也是当前正在遍历到的数据)
for (int i = 1; i < 10; i++)
--%>
<table border="1">
<c:forEach begin="1" end="10" var="i">
<tr>
<td>第${i}行</td>
</tr>
</c:forEach>
</table>
2.4.2 Traverse Object Array
<%--
2.遍历 Object 数组
for (Object item: arr)
items 表示遍历的数据源(遍历的集合)
var 表示当前遍历到的数据
--%>
<%
request.setAttribute("arr", new String[]{"18610541354","18688886666","18699998888"});
%>
<c:forEach items="${ requestScope.arr }" var="item">
${ item } <br>
</c:forEach>
2.4.3 Traverse the Map collection
<%--遍历 Map 集合--%>
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
// for ( Map.Entry<String,Object> entry : map.entrySet()) {
// }
request.setAttribute("map", map);
%>
<c:forEach items="${ requestScope.map }" var="entry">
<%--输出所有的键值对--%>
${entry}
<%--只输出我要的值--%>
${entry.key}
${entry.value}
<%--按照自己希望的格式输出 key 和 value--%>
<h1>${entry.key} = ${entry.value}</h1>
</c:forEach>
2.4.4 Traverse the List collection—Student class is stored in the list, with attributes: number, user name, password, age, phone information
<%--4.遍历 List 集合---list 中存放 Student 类,有属性:编号,用户名,密码,年龄,电话信息--%>
<%
List<Student> studentList = new ArrayList<Student>();
for (int i = 1; i <= 10; i++) {
studentList.add(new Student(i,"username"+i ,"pass"+i,18+i,"phone"+i));
}
request.setAttribute("stus", studentList);
%>
<table>
<tr>
<th>编号</th>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
<th>电话</th>
<th>操作</th>
</tr>
<%--
items 表示遍历的集合
var 表示遍历到的数据
begin 表示遍历的开始索引值
end 表示结束的索引值
step 属性表示遍历的步长值
varStatus 属性表示当前遍历到的数据的状态
for(int i = 1; i < 10; i+=2)
--%>
<c:forEach begin="2" end="7" step="2" varStatus="status" items="${requestScope.stus}" var="stu">
<tr>
<td>${stu.id}</td>
<td>${stu.username}</td>
<td>${stu.password}</td>
<td>${stu.age}</td>
<td>${stu.phone}</td>
<td>${status.step}</td>
</tr>
</c:forEach>
</table>