JSTL
来源:互联网 发布:统计型定位算法模型 编辑:程序博客网 时间:2024/06/06 04:34
JSTL是sun公司开发的一套标签库,主要为基本输入输出、流程控制、迭代操作和URL操作提供了定制标签,从而替换页面中的脚本代码。
1、核心标签库
JSTL核心标签库总共有13个,分为4类,如下表
类别
标签
表达式控制
out、set、remove、catch
流程控制
if、choose、when、otherwise
循环控制
forEach、forTokens
URL操作
import、url、redirect
在页面中使用JSTL核心标签需完成以下2步:
<1>导入jstl.jar和standerd.jar两个JSTL的jar文件;
<2>在jsp页面中使用<%@tablib url=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>元素导入标签库。
1.1、表达式控制
1) <c:set>
<c:set>用于在jsp中保存数据将指定的数据保存在指定范围的变量中,格式为:
<c:setvalue=”value” var=”varName” [scope=”{page|request|session|
application}”]>
此外,<c:set>还可以将指定的数据保存到指定对象(javabean、map)的属性中,格式
<c:setvalue=”value” target=”target” property=”propertyName”>
参数值
描述
value
指定要保存的对象,可以采用el表达式
var
指定保存后对象的名字
scope
指定保存在那个范围中
target
指定将要保存的对象保存到那个目标对象中
property
指定target的属性名
用法举例:
<c:setvalue="ssl"var="name"scope="page"/>
<c:set value="ssl"target="${requestScope.map}"property="name"/>
<c:outvalue="${pageScope.name}"/>
<c:out value="${requestScope.map.name}"/>
2) <c:out>
<c:out>用于在jsp页面中显示数据,格式
<c:out value=”value” [default=”defaultValue”]>
default:当value为null时,显示defaultValue
3) <c:remove>
<c:remove>用于在jsp页面中删除变量,格式
<c:remove var=”varName” [scope=”page|request|session|application”]>
4) <c:catch>
用于在jsp页面中捕获异常,并将异常信息保存在指定的变量中。格式为:
<c:catch [var=”varName”]>
需要捕获异常的代码段
</c:catch>
其中,var用来指定保存异常信息的变量名。
<c:catchvar="err">
<%
String str=null;
str.trim();
%>
</c:catch>
错误信息:<c:outvalue="${err}"default="未发生错误"/>
1.2、流程控制
5) <c:if>
<c:if>与if的作用一致,进行条件判断,语法格式为:
<c:if test=”${condition}” [var=”varName”] [scope=”{page|request|session|
application}”]>
满足条件时,将执行的代码段
</c:if>
其中test:为条件表达式,采用EL表达式,var存放条件表达式结果的变量。
<c:iftest="${param.name=='ssl'}"var="result">
ssl,你好
</c:if>
条件判断的结果:<c:outvalue="${result}"/>
6) <c:choose>
<c:choose>、<c:when>、<c:otherwise>配套使用进行条件分支的流程控制,与switch的功能一致。其中<c:when>和<c:otherwie>必须放在<c:choose>标签内,<c:when>必须位于<c:otherwise>之前。每个<c:when>代表一个分支,当所有分支都不满足时,将执行<c:otherwise>代码段,如下
<c:choose>
<c:when test=”${condition}”>
为真时的代码段
</c:when>
<c:when test=”${condition}”>
为真时的代码段
</c:when>
<c:otherwise>
所有条件都不满足时的代码段
</c:otherwise>
</c:choose>
<%
Random random=new Random();
request.setAttribute("luck", random.nextInt(10));
%>
<c:choose>
<c:whentest="${luck==6}">恭喜,幸运数字6</c:when>
<c:whentest="${luck==8}">恭喜,幸运数字8</c:when>
<c:whentest="${luck==9}">恭喜,幸运数字9</c:when>
<c:otherwise>谢谢您的参与,欢迎下次再来</c:otherwise>
</c:choose>
1.3、循环控制
7) <c:forEach>
<c:forEach>用做循环控制,当条件成立时执行<c:forEach>标签内的代码,常常用于迭代集合元素。迭代元素时语法格式为:
<c:forEach items=”collection” begin=”begin” end=”end”[step=”step”]
[var=”varName”] [varStatus=”varStatusName”]>
循环执行的代码
</c:forEach>
循环控制的格式:
<c:forEach begin=”begin” end=”end” [step=”step”]
[var=”varName”] [varStatus=”varStatusName”]>
循环执行的代码
</c:forEach>
参数
说明
items
被遍历的集合对象
begin
开始位置,必须大于等于0,默认为0
end
结束位置,默认为最后一个元素
step
每次循环的增量值(步长),默认为1
var
指向当前成员的引用(变量)
varStatus
存放当前成员相关信息的变量,主要有index(当前成员的索引值)、count(已访问过的成员数)、first(是否为第一个成员)、last(是否为最后一个成员)
<!-- 循环操作 -->
<table>
<c:forEachbegin="0"end="8"varStatus="status">
<tr><td>id</td><td>${status.index}</td></tr>
</c:forEach>
</table>
<%
String[] names=new String[]{"ssl","lff","cj"};
request.setAttribute("names",names);
%>
<!-- 遍历集合 -->
<c:forEachitems="${names}"var="name">
${name}<br>
</c:forEach>
<!-- 遍历Map元素 -->
<%
Map<String,String> map=new HashMap<String,String>();
map.put("name", "ssl");
map.put("address", "shanghai");
map.put("school","dhu");
request.setAttribute("map", map);
%>
<!-- var指定的是entry对象 -->
<c:forEachitems="${map}"var="entry">
${entry.key}${entry.value}<br>
</c:forEach>
8) <c:forTokens>
<c:forTokens>用于遍历一个字符串中所有由定义符号所分割的成员,格式为:
<c:forTokens items=”str” delims=”delimiters” begin=”begin”end=”end” [step=”step”] [var==”varName”] [varStatus=”varStatusName”]>
条件满足时被循环执行的代码段
</c:forTokens>
参数
说明
items
被分割的字符串
delims
用做分割的字符串
begin
开始位置,必须大于等于0,默认为0
end
结束位置,默认为最后一个元素
step
每次循环的增量值(步长),默认为1
var
指向当前成员的引用(变量)
varStatus
存放当前成员相关信息的变量,主要有index(当前成员的索引值)、count(已访问过的成员数)、first(是否为第一个成员)、last(是否为最后一个成员)
<%
String names="ssl,lff,cj";
request.setAttribute("names",names);
%>
<c:forTokensitems="${names}"delims=","var="name">
${name}<br>
</c:forTokens>
1.4、URL操作
9) <c:import>
<c:import>用于将一个静态或动态文件包含到该jsp页面中,所包含的对象不再局限于本web应用程序,其他web应用程序中的文件或FTP资源同样可以被包含进来。
10) <c:url>
<c:url>在jsp页面中产生一个URL。语法格式:
<c:url value=”url” [conetxt=”context”] [var=”varName”] [scope=”{page|
request|session|application}”]>
[<c:param name=”paramName”value=”paramValue”/>]
</c:url>
参数
说明
value
指定url值
context
同一个容器的其他应用中的URL资源,以/开头
var
保存生成url内容的变量
scope
var变量的作用域
c:param
可以传递URL参数
<c:urlvalue="http://www.baidu.com"var="url">
<c:paramname="name"value="ssl"/>
</c:url>
<ahref="${url}">百度</a>
11) <c:redirect>
<c:redirect>用于请求重定向,格式如下
<c:redirect value=”url” [conetxt=”context”] >
[<c:param name=”paramName”value=”paramValue”/>]
</c:redirect>
2、格式化标签库
JSTL格式化标签库主要提供对数字、日期的格式化操作。在jsp页面中使用<%@tablib url=”http://java.sun.com/jsp/jstl/fmt” prefix=”fmt” %>元素导入标签库。主要的标签有:
1) <fmt:formatNumber>
<fmt:formatNumber>实现数字的格式化,语法如下
<fmt:formatNumber value=”value”
[var=”varName”]
[scope=”{page|request|session|application}”]
[type=”{number|currency|percent}”]
[currencyCode=”currrencyCode”]
[currencySymbol=”currencySymbol”]
[groupingUsed=”{true|false}”]
[maxFractionDigits=”maxFractionDigits”]
[maxIntegerDigits=”maxIntegerDigitals”]
[minFractionDigits=”minFractionDigits”]
[minIntegerDigits=”minIntegerDigitals”]
[pattern=”pattern”]/>
参数
说明
value
用于格式化的数字
var
存放格式化结果的变量
scope
var变量的作用范围
type
数字、货币、百分比
currencyCode
标准的货币代码,如cny(人民币)、$(美元)
currencySymbol
标准的货币符号,如¥、$
groupingUsed
是否将数字进行区隔,如123,456.0
maxFractionDigits
最多小数位
maxIntegerDigits
最多整数位
minFractionDigits
最少小数位
minIntegerDigits
最少整数位
pattern
格式化数字格式
<fmt:formatNumber value="6789.3581"
var="result"
type="currency"
maxFractionDigits="2"
groupingUsed="true"/>
${result}<br>
<fmt:formatNumbervalue="0.653789"
type="percent"
var="result"
maxFractionDigits="2"
groupingUsed="false"/>
${result}<br>
2) <fmt:parseNumber>
<fmt:parseNumber>实现将字符串形式的数字、货币、百分比转换成数字;语法格式为
<fmt:parseNumber value=”value”
[var=”varName”]
[scope=”{page|request|session|application}”]
[type=”{number|currency|percent}”]
[parseLocale=”parseLocale”]
[integerOnly=”{true|false}”]
[pattern=”pattern”]/>
参数
说明
value
用于格式化的数字
var
存放格式化结果的变量
scope
var变量的作用范围
type
数字、货币、百分比
parseLocale
语言地区代码,如zh_CN(中文)、en(英文)
integerOnly
是否只显示整数部分
pattern
格式化数字格式
<fmt:parseNumbervalue="¥6789.3"
var="result"
type="currency"/>
${result}<br>
<fmt:parseNumbervalue="3.1415926圆周率"
var="result"/>
${result}<br>
<fmt:parseNumbervalue="78.90%"
var="result"
type="percent"/>
${result}<br>
3) <fmt:formatDate>
<fmt:formatDate>实现格式化时间和日期,语法格式如下:
<fmt:formatDate value=”value”
[var=”varName”]
[scope=”{page|request|session|application}”]
[type=”{time|date|both}”]
[dateStyle={“default|short|medium|long|full”}]
[timeStyle={“default|short|medium|long|full”}]
[timeZone=”timeZone”]
[pattern=”pattern”]/>
参数
说明
value
用于格式化的数字
var
存放格式化结果的变量
scope
var变量的作用范围
type
时间、日期、时间和日期
dateStyle
日期的显示方式
timeStyle
时间的显示方式
timeZone
设置时区,如CST(中部标准时间)
pattern
格式化时间,日期的格式,如yyyy-MM-dd hh:mm:ss
<jsp:useBeanid="now"class="java.util.Date"/>
<fmt:formatDatevalue="${now}"
var="result"
type="date"
pattern="yyyy-MM-dd"/>
${result}<br>
<fmt:formatDatevalue="${now}"
var="result"
type="both"
pattern="yyyy-MM-ddhh:mm:ss"/>
${result}<br>
4) <fmt:parseDate>
<fmt:parseDate>将字符串形式的时间和日期转换为日期时间类型,语法格式如下
<fmt:parseDate value=”value”
[var=”varName”]
[scope=”{page|request|session|application}”]
[type=”{time|date|both}”]
[dateStyle={“default|short|medium|long|full”}]
[timeStyle={“default|short|medium|long|full”}]
[timeZone=”timeZone”]
[pattern=”pattern”]/>
<c:setvalue="2010-05-01 06:00:44"var="now"/>
<fmt:parseDatevalue="${now}"
var="result"
type="date"
pattern="yyyy-MM-dd"/>
${result}<br>
<fmt:parseDatevalue="${now}"
var="result"
type="both"
pattern="yyyy-MM-ddhh:mm:ss"/>
${result}<br>
5) 其他标签
格式化标签库,还有<fmt:setTimeZone>、<fmt:timeZone>、<fmt:setLocale>、<fmt:requestEncoding>、<fmt:setBundle>、<fmt:message>、<fmt:param>、<fmt:bundle>等标签。
3、自定义标签
自定义标签是用户自定义的jsp页面元素,通过封装反复执行的代码使之可以在多个应用程序之间重复使用,从而提高开发效率。
自定义标签的一般步骤:
1) 编写标签处理类,一般继承TagSupport类
方法名
描述
doStartTag
遇到自定义标签开始时调用该方法,返回值可以为
SKIP_BODY:表示不处理标签体,直接调用doEndTag
EVAL_BODY_INCLUDE:正常执行标签体
doAfterBody
重复执行标签体内容的方法,返回值
SKIP_BODY:表示不处理标签体,直接调用doEndTag
EVAL_BODY_AGAIN:重复执行标签体内容
doEndTag
遇到自定义标签结束时调用该方法,返回值可以为
SKIP_PAGE:忽略标签后面JSP的内容,终止JSP页面执行;
EVAL_PAGE:处理标签后,继续处理JSP后面的内容
release
释放所获得的所有资源
2) 创建标签库描述文件(TLD)
采用XML文件格式来描述用户自定义的标签库,该文件与web应用的配置文件web.xml在同级目录,主要内容如下
<taglib>
<tlib-version>taglib1.0</tlib-version> <!---版本号-->
<jsp-version>jsp2.0</jsp-version> <!---JSP版本号-->
<short-name>customtag</short-name><!---默认前缀-->
<uri>http://xxxx.yyy.zzz/customtag</uri><!---访问标识符-->
<tag> <!---tag元素定义一个标签-->
<name>permission</name> <!---标签名-->
<tag-class>customtags.PermissionTag</tag-class><!---实现类-->
<body-content>jsp</body-content><!--标签体内容,取值为empty(没有标签体)、jsp(标签体可以有jsp程序代码)、tagdependent(标签体的内容由标签自己处理)-->
<attribute> <!—定义属性,对应实现类的属性-->
<name>module</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue> <!—属性值是否支持jsp表达式-->
</attribute>
</tag>
</taglib>
3) 在jsp页面中引入标签库
<%@ tag prefix=”customtag” uri=http://xxx.yyy.zzz/customtag%>
4) 在jsp页面中使用标签
<customtag:permission module=”manager”>
….
</customtag:permission>
示例如下
/**实现类*/
public class PermissionTag extends TagSupport
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Stringmodule;
private Stringprivilege;
public StringgetModule()
{
returnmodule;
}
public void setModule(String module)
{
this.module =module;
}
public StringgetPrivilege()
{
returnprivilege;
}
public void setPrivilege(String privilege)
{
this.privilege =privilege;
}
@Override
public int doStartTag() throws JspException
{
booleanresult=true;
HttpServletRequest request=(HttpServletRequest)pageContext.getRequest();
returnresult?EVAL_BODY_INCLUDE:SKIP_BODY;
}
}
/**标签描述文件*/
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEtaglib PUBLIC "-//SunMicrosystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>ssl</shortname>
<uri>http://www.ssl.org/</uri>
<tag>
<name>permission</name>
<tagclass>org.ssl.book.web.tag.PermissionTag</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>module</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>privilege</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
/**jsp页面*/
<%@ taglib uri="http://www.ssl.org/"prefix="ssl"%>
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<h1>book-web</h1>
<ssl:permissionprivilege="add"module="department">
<h1>permission</h1>
</ssl:permission>
</body>
</html>
- jstl
- jstl
- JSTL
- jstl
- JSTL
- JSTL
- JSTL
- JSTL
- jstl
- JSTL
- JSTL
- JSTL
- jstl
- jstl
- jstl
- JSTL
- JSTL
- jstl
- 转发
- uva live 5031 Graph and Queries(Treap x 并查集)
- css颜色样式
- 进程通讯 线程同步方式
- FTP异常 -- it.sauronsoftware.ftp4j.FTPException [code=550, message= Directory not found] (System.err)
- JSTL
- 对多维数据指定元素排序
- C语言利用链表实现有效内存管理
- Mac上Homebrew的使用
- Error:Can't have more than one marked region along edge.
- 面向客户端的服务
- 十个C开源项目
- 将linux默认python升级到2.7.4版本
- SMTP基本原理与C++实现向多人发送邮件