Apache Tomcat安装JSTL 库步骤如下:
使用任何库,你必须在每个JSP文件中的头部包含<taglib>标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<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>标签就是<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>标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。这个标签不是特别有用,不过可以用来确保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 [var = "exception"]> ...//可能存在异常的代码 </c:catch>var属性可以指定存储异常信息的变量,这是一个可选项,如果不需要保存异常信息,则可以省略该属性
范例
异常处理:<c:catch var = "exception"> <% int a = 5/0; out.println(a+""); %> </c:catch> <c:out value = "${exception}"/>
<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>标签与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>
这些标签封装了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>