一,JSTL概述
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库
标签库 |
标签库的URI |
前缀 |
Core |
c |
|
I18N |
fmt |
|
SQL |
sql |
|
XML |
x |
|
Functions |
fn |
二,JSTL下载与导入
JSTL下载:
从Apache的网站下载JSTL的JAR包。进入 "http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/" 网址下载JSTL的安装包。jakarta-taglibs-standard-1.1.2.zip,然后将下载好的JSTL安装包进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar。 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类standard.jar文件包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)。
将两个jar包导入我们工程的lib中:
使用jsp的taglib指令导入核心标签库:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> |
三.JSTL核心库的常用标签
1,<c:if test="">标签
<c:if>标签和程序中的if语句作用相同,用来实现条件控制,其中test是返回boolean的条件。
<%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% request.setAttribute("count", 10); %> <!-- jstl标签经常和el配合使用 --> <c:if test="${count==10}"> 相等 </c:if> </body> </html>
运行结果:
2,<c:forEach>标签
该标签根据循环条件遍历集合(Collection)中的元素。
语法:
<c:forEach
var="name"
items="Collection"
varStatus="StatusName"
begin="begin"
end="end"
step="step">
本体内容
</c:forEach>
参数解析:
(1)var设定变量名用于存储从集合中取出元素。
(2)items指定要遍历的集合。
(3)varStatus设定变量名,该变量用于存放集合中元素的信息。
(4)begin、end用于指定遍历的起始位置和终止位置(可选)。
(5)step指定循环的步长。
属性说明:
属性名称 |
是否支持EL表达式 |
属性类型 |
是否必须 |
默认值 |
var |
NO |
String |
是 |
无 |
items |
YES |
Arrays Collection Iterator Enumeration Map String []args |
是 |
无 |
begin |
YES |
int |
否 |
0 |
end |
YES |
int |
否 |
集合中最后一个元素 |
step |
YES |
int |
否 |
1 |
varStatus |
NO |
String |
否 |
|
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page import="com.zender.*,java.util.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 1,遍历List<String>的值:<br/> <% List<String> strList = new ArrayList<String>(); strList.add("Zender"); strList.add("Zender1"); strList.add("Zender2"); strList.add("Zender3"); strList.add("Zender4"); request.setAttribute("strList", strList); %> <c:forEach items="${strList }" var="str"> ${str }<br/> </c:forEach> <hr/> 2,遍历List<String>的值,指定begin的值为1、end的值为3、step的值为2,从第二个开始,每两个遍历一次:<br/> <c:forEach items="${strList }" var="str" begin="1" end="3" step="2"> ${str }<br/> </c:forEach> <hr/> 3,遍历List<User>的值:<br/> <% List<User> userList = new ArrayList<User>(); userList.add(new User(1,"Zender","123")); userList.add(new User(2,"Zender2","1234")); userList.add(new User(3,"Zender3","1235")); request.setAttribute("userList", userList); %> <c:forEach items="${userList }" var="user"> id:${user.id }------name:${user.name }------pwd:${user.pwd }<br/> </c:forEach> <hr/> 4,遍历Map<String,String>的值:<br/> <% Map<String,String> strMap = new HashMap<String,String>(); strMap.put("name", "Zender"); strMap.put("age", "21"); strMap.put("addr", "ShangHai"); request.setAttribute("strMap", strMap); %> <c:forEach items="${strMap }" var="entry"> ${entry.key }------${entry.value }<br/> </c:forEach> <hr/> 5,遍历Map<String,User>的值:<br/> <% Map<String,User> userMap = new HashMap<String,User>(); userMap.put("1", new User(1,"Zender","123")); userMap.put("2", new User(2,"Zender2","1232")); userMap.put("3", new User(3,"Zender3","1233")); request.setAttribute("userMap", userMap); %> <c:forEach items="${userMap }" var="entry"> 编号:${entry.key },${entry.value.name }-----${entry.value.pwd }<br/> </c:forEach> </body> </html>
运行结果:
3,choose标签、when标签、otherwise标签——流程控制标签
<c:choose>、<c:when>和<c:otherwise>这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 "if-else if-else" 的复杂条件判断结构。
语法:
<c:choose>
<c:when test="条件1">
//业务逻辑1
<c:when>
<c:when test="条件2">
//业务逻辑2
<c:when>
<c:when test="条件n">
//业务逻辑n
<c:when>
<c:otherwise>
//业务逻辑
</c:otherwise>
</c:choose>
例如:
<%@ page language="java" errorPage="/error.jsp" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <base href="<%=basePath%>"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% request.setAttribute("score", 80); %> <c:choose> <c:when test="${score >= 90}"> 你的成绩为优秀! </c:when> <c:when test="${score > 70 && score < 90}"> 您的成绩为良好! </c:when> <c:when test="${score > 60 && score < 70}"> 您的成绩为及格! </c:when> <c:otherwise> 对不起,您没有通过考试! </c:otherwise> </c:choose> </body> </html>
运行结果: