JSP标准标签库——JSTL
JSTL是实现Web应用程序中常见的通用功能的定制标签库集。
JSTL分为5大类:
1、 核心标签库
2、 国际化/格式化标签库
3、 数据库标签库
4、 XML标签库
5、 Function标签库(Functions)
Core标签库
核心标签库主要包括通用标签、条件标签、迭代标签和与URL相关的标签
在使用Core标签库的JSP的开始部分,添加代码:%@tagliburi=”http://java.sun.com/jsp/jstl/core” prefix=”c”%
通用标签:
• <c:out>标签
– 用于将表达式的结果输出到当前的JspWriter对象中。其功能类似于JSP的表达式<%= %>,或者EL表达式${}。
– 语法
<c:out value=“value” [default=“default value”] [escapeXml=“true|false”]/>
<c:out value=“value” [escapeXml=“true|false”]><!--为true时,对输出内容中的<、>、“、‘和&字符进行转义,分别转成<、>、'、"和&-->
default value
</c:out>
Eg:
<%
request.setAttribute("user","lisi");
%>
<c:out value="helloworld"/><br/>
<c:out value="${userName}"default="xxxx"/><br/>
<c:out value="<h1>你好!!!</h1>" escapeXml="false"/><br/>
<c:out value="${userName}">文本内容</c:out>
• <c:set>标签
– <c:set>标签用于设置JSP页面的各种域范围中的变量,或者设置java.util.Map对象或JavaBean对象的属性。
– 语法
• <c:set value=“value”var=“name” [scope=“范围”]/>将value的值保存到名为name的变量中,同时name变量保存到选定的作用范围中。例如,
<c:set value=“sunwk” name=“username” scope=“session”/>
范围可以是:可以是page|request|session|application
• <c:set var=“name” [scope=“范围”] >
value
</c:set>
将标签体中的内容保存到名为name的变量中,同时name变量保存到选定的作用范围中。例如,
<c:set var=“username” scope=“session”>
sunwk
</c:set>
• <c:set value=“value”target=“target” property=“propertyName” />将value的值保存到target对象的propertyName属性中。
• <c:set target=“target”property=“propertyName”>
value
</c:set>
将标签体的内容保存到target对象的propertyName属性中。
Eg:
<c:set value="sunwukong"var="user" scope="request"></c:set>
${user}<br/>
<c:set var="user"scope="request">
zhubajie
</c:set>
${user }<br/>
<%
Map map=new HashMap();
request.setAttribute("map",map);
%>
<!-- 给指定范围内的某一个集合去设置键值对 -->
<c:set value="tangseng"property="aaa" target="${map}"></c:set>
${map.aaa }<br/>
<!-- 给javaBean里的属性赋值 -->
<%
Person p=new Person();
request.setAttribute("person",p);
%>
<c:set value="Jerry"property="name" target="${person}"></c:set>
${person.name}
• <c:remove>标签
– <c:remove>标签用于移除JSP页面中指定域范围中的变量。
– 语法
<c:remove var=“name” [scope=“范围”]/>
<c:remove var="person"scope="request"/>
<c:out value="${person.name}" default="没有该人"/>
• <c:catch>标签
– <c:catch>标签用于捕获嵌套在标签体内的内容抛出的异常对象,并将异常信息保存到变量中。
– 语法
<c:catch [var=“name”]>
body content
</c:catch>
将可能发生异常的代码放到该标签中,如果发生异常,异常信息保存到name变量中。
<!-- catch捕获异常,将可能发生异常的内容放在catch中
,异常对象会以属性的方式保存在某个作用域中,
var是在指定范围内存异常对象的内容 -->
<c:catch var="myex">
<%
int i=10/0;
%>
</c:catch>
异常:<c:out value="${myex }"></c:out><br/>
异常的原因是:<c:out value="${myex.cause}"></c:out><br/>
异常消息:<c:out value="${myex.message}"></c:out>
异常堆栈轨迹:<c:out value="${myex.stackTrace}"></c:out>
条件标签
• <c:if>标签
– <c:if>标签用来做条件判断,功能类似于JSP中的<%if(boolean){}%>。
注意:对于判断标签的test属性,可以使用一些关系操作符,如==、!=、<、>、>=、<=等,也可以将这些关系操作符用eq、ne、lt、le、gt、ge取代。
Eg:
<c:if test="${userName==null }"var="xx" scope="request">
该用户没有登录
</c:if>
• <c:choose>、<c:when>、<c:otherwise>标签
– <c:choose>标签用于提供条件选择的上下文,它必须与<c:when>和<c:otherwise>标签一起使用。
– <c:when>作为<c:choose>的子标签,<c:when>有一个test属性,该属性的值为布尔型,如果test的值为true,则执行<c:when>标签体的内容。
– <c:otherwise>标签没有属性,它必须作为<c:choose>标签的最后分支出现。
Eg:
<%
request.setAttribute("age",18);
%>
<c:choose>
<c:when test="${age>70}">
老年人
</c:when>
<c:when test="${age<=70&& age>35}">
中年人
</c:when>
<c:when test="${age<=35&& age>18 }">
青年人
</c:when>
<c:when test="${age<=18&& age>0}">
少年或儿童
</c:when>
<c:otherwise>
输入错误
</c:otherwise>
</c:choose>
迭代标签:
• <c:forEach>标签
– <c:forEach>标签用于对包含了多个对象的集合进行迭代,重复执行它的标签体,或者重复迭代固定的次数。
注意:
Ø items属性并不是一定要有的属性,但是当没有使用items属性时,就一定要使用begin和end属性。
Ø varStatus:用来保存现有遍历计数相关的信息。例如,如果varStatus=“i”,那么会将相应信息放到名称为i的变量中,i变量有四个属性值,index、count、first和last。
Index是现在操作的成员的索引
Count是操作成员总数
First是所操作成员是否是第一个成员
Last是所操作成员是否是最后一个成员
Eg:
<c:forEach begin="1" end="10"step="1">
helloworld
</c:forEach><br/>
Eg2:按照表格类型显示,奇数行和偶数行颜色不同,当光标放到栏位上时,整个栏位会变色
<head>
<style type="text/css">
.even{
background-color:#ffff99;
color:#ff0000;}
.odd{
background-color:#ffff00;
color:#ff0000;}
tr:hover{
background-color:#0000ff;}
</style>
</head>
<body>
<%
Listlist=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
list.add("fff");
list.add("ggg");
list.add("hhh");
list.add("iii");
list.add("jjj");
request.setAttribute("list",list);
%>
<!--varStatus存的是状态对象,在迭代过程中的状态信息,不支持EL表达式,状态信息有4个属性:index,count,first和last -->
<table border="1"width="50%">
<c:forEach items="${list}"var="str" begin="1"end="9" step="1"varStatus="status">
<!--status.count%2!=0判断是否是奇数行,奇数行——even,偶数行——odd -->
<tr class="${(status.count%2!=0)?'even':'odd'}">
<td>${str}</td>
<td>${status.index}</td>
<td>${status.first}</td>
<td>${status.last}</td>
<td>${status.count}</td>
</tr>
</c:forEach>
</table>
</body>
• <c:forTokens>标签
– <c:forTokens>标签用来浏览一字符串中所有的成员,其成员是由定义符号(Delimiters)所分隔的。
Eg:
<c:forTokens items=“a:b:c:d” delims=“:”var=“token”>
<c:outvalue=“${token}” /> <br>
</c:forTokens>
注意:这个标记的使用效果相当于java.util.StringTokenizer类。将字符串“a:b:c:d”以“:”分隔符分开,token是循环到当前所分割得到的字符串。
URL相关的标签:
<c:import>标签:可以把其他静态或者动态文件包含到本身的JSP页面中。与JSP的动作<jsp:include>的区别在于:<jsp:include>只能包含和自己在同一个Web应用中的文件,<c:import>不仅能包含和自己在同一个Web应用下的文件,还可包含其他Web应用或其他网站的文件。
Eg:
<!-- 如果写var属性的话,MyJsp.jsp中的内容会包含到secondPage中,必须用EL表达式在本页显示一下 -->
<c:import url="/MyJsp.jsp"var="secondPage"/>
${secondPage}
• <c:url>标签
– <c:url>标签在JSP页面构造一个URL,它提供了3个功能元素,它们可以在URL前面附加当前Servlet上下文的名称;可以为会话管理重写URL;可以对请求参数名称和值进行URL编码,这些功能在为J2EE Web应用程序构造URL时特别有用。
• <c:param>标签
– <c:param>标签的作用是为一个URL添加请求参数,在前面的<c:url>、<c:redirect>和<c:import>标签中都已经见过<c:param>的用法。
<%session.setAttribute("xxxxx","xxxxx"); %>
<%
session.setAttribute("user","www");
%>
<!-- value构建地址,以var属性名来存储到作用域,scope存储的作用域 -->
<!-- index.jsp加/,下面再显示时,会显示详细的路径 -->
<c:url value="/index.jsp"var="strUrl" scope="request">
<!-- c:param给url附加参数 -->
<c:param name="pageNo" value="2"></c:param>
</c:url>
${strUrl}
<a href="${strUrl}">首页</a>
<a href="<c:url value='/index.jsp'/>">首页</a>
• <c:redirect>标签
– <c:redirect>标签用于向用户的浏览器发送HTTP重定向响应,它是JSTL中与 javax.servlet.http.HttpServletResponse的sendRedirect()方法功能相当的标记。
Eg:
<!-- url重定向的地址 -->
<c:redirect url="/MyJsp.jsp">
</c:redirect>