JSTL 库安装
Apache Tomcat安装JSTL 库步骤如下:
- 从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
- 下载jakarta-taglibs-standard-1.1.1.zip 包并解压,将jakarta-taglibs-standard-1.1.1/lib/下的两个jar文件:standard.jar和jstl.jar 文件拷贝到/WEB-INF/lib/下。
使用任何库,你必须在每个JSP文件中的头部包含<taglib>标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数http://my.oschina.net/passer007/admin/new-blog
核心标签
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out>标签
<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。举例来说,如果想要访问 customer.address.street,只需要这样写:<c:out value="customer.address.street">。<c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。
属性
属性 | 描述 | 是否必要 | 默认值 |
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
escapeXml | 是否忽略XML特殊字符 | 否 | true |
范例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
escapeXml为false时:<c:out value = "<hr>" escapeXml = "false"/>
escapeXml为true时:<c:out value = "<hr>" escapeXml = "true"/>
两种语法格式有default<c:out value = "${user}" default = "user的值为空"/>
两种语法格式没有default<c:out value = "${user}"/>
</body>
</html>
<c:set> 标签
<c:set>标签就是<jsp:setProperty>行为标签的孪生兄弟。这个标签之所以很有用呢,是因为它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
属性
属性 | 类型 | 描述 |
var | String | 用于指定变量名 |
target | Object | 用于指定存储变量值或者标签主体的目标对象,可以是JavaBean和Map对象 |
property | String | 用于指定目标对象存储数据的属性名 |
scope | String | 用于指定变量的作用域,默认值是page |
value | Object | 用于指定变量值 |
范例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="user" class = "com.zhong.model.User"></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
1.语法一:<c:set var = "user" value = "jstl" scope = "session"/>
输出的变量值为:${sessionScope.user}<br>
2.语法二:<c:set var = "number" scope = "request">
${3.14159}</c:set>
输出的变量值为:${requestScope.number}<br>
3.语法三:
<c:set value = "1" target = "${user}" property = "id"/>
<c:set value = "admin" target = "${user}" property = "username"/>
<c:out value = "${user.id}"/>
<c:out value = "${user.username}"/><br>
</body>
</html>//需要自己写一下user噢!
<c:remove> 标签
<c:remove>标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。这个标签不是特别有用,不过可以用来确保JSP完成清理工作。
属性(这里的属性同c:out)范例
添加新变量add赋值yoyo输出:<c:set var = "add" value = "yoyo" scope = "page"/>
<c:out value = "${add}"/><br>
删除变量add,并且输出add:<c:remove var = "add" scope = "page"/>
<c:out value = "${add}" default = "add的值为空"/>
<c:catch> 标签
<c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。
<c:catch>标签的语法格式如下:
<c:catch [var = "exception"]>
...//可能存在异常的代码
</c:catch>
var属性可以指定存储异常信息的变量,这是一个可选项,如果不需要保存异常信息,则可以省略该属性
范例
异常处理:<c:catch var = "exception">
<%
int a = 5/0;
out.println(a+"");
%>
</c:catch>
<c:out value = "${exception}"/>
<c:if> 标签
<c:if>标签判断表达式的值,如果表达式的值为真则执行其主体内容。
属性
属性 | 类型 | 描述 |
test | boolean | 必选属性,用于指定条件表达式 |
var | String | 可选属性,用于指定变量名。这个属性会指定test属性的判断结果将存放在哪个变量中,如果变量不存在就创建它 |
scope | String | 存储范围,改属性用于指定var属性所指定的变量的存在范围 |
范例
<c:if test = "${empty param.command}">
<form name = "formm" method = "post">
评论:
<textarea name = "command" cols = "30" rows = "4"></textarea>
<br>
<input type = "submit" value = "提交">
</form>
</c:if>
如果页面当中的command元素为空的,则执行展现表单,否则不展示。
<c:choose>, <c:when>, <c:otherwise> 标签
<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。switch语句中有case,而<c:choose>标签中对应 有<c:when>,switch语句中有default,而<c:choose>标签中 有<c:otherwise>。
语法格式如下:
<c:choose>
<c:when test = "condition">
//业务逻辑
</c:when>
//多个c:when标签
<c:otherwise>
//业务逻辑
</c:otherwise>
</c:choose>
范例:
<c:choose>
<c:when test = "${empty sessionScope.user}">
请注册
</c:when>
<c:otherwise>
欢迎:${sessionScope.user}
<form action = "post" name = "formtest">
<input type = "submit" name = "退出"/>
</form>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test = "${now.hours>=6 && now.hours<=8}">
<c:out value = "早上好!"/>
</c:when>
<c:when test = "${now.hours>=21 && now.hours<=24}">
<c:out value = "现在是编程时间!"/>
</c:when>
<c:otherwise>
<c:out value = "该时段没有任何建议!"/>
</c:otherwise>
</c:choose>
<c:forEach>, <c:forTokens> 标签
这些标签封装了Java中的for,while,do-while循环。相比而言,<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。<c:forTokens>标签将字符串分隔为一个子串数组然后迭代它们。
属性 | 类型 | 描述 |
items | 数组、集合类、字符串和枚举类型 | 被循环遍历的对象,多用于数组与集合类 |
var | String | 循环体的变量,用于存储items指定的对象的成员 |
begin | int | 循环的起始位置,如果没有指定,则从集合的第一个值开始迭代 |
end | int | 循环的终止位置,如果没有指定,则一直迭代到集合的最后一位 |
step | int | 循环的步长 |
varStatus | String | 循环的信息状态,信息状态列表在下表 |
属性 | 类型 | 描述 |
index | int | 当前循环的索引值,从0开始 |
count | int | 当前循环的循环计数,从1开始 |
first | boolean | 是否为第一次循环 |
last | boolean | 是否为最后一次循环 |
范例
<%
ArrayList list = new ArrayList();
list.add("Python");
list.add("Java");
list.add("HTML5");
request.setAttribute("list", list);
%>
<c:forEach items = "${requestScope.list}" var = "temp" begin = "0" varStatus = "id">
${id.index}:${temp}<br>
</c:forEach>
c:forTokens标签与c:forEach标签相似,属性与其上相同但是增加一个属性delims表示分割字符串的分隔符,可以同时使用多个分隔符
<c:set var = "string" value = "Python,Java,HTML5,PHP"/>
<c:forTokens items = "${string}" delims = "," var = "temp">
${temp}<br>
</c:forTokens>