JAVA编程:Java-JSTL(JSP尺度标签库)先容
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解js|尺度媒介从JSP 1.1标准入手下手,JSP就撑持在JSP中利用自界说标签了,自界说标签的普遍利用形成了程序员反复界说,如许就促进了JSTL(JavaServerPagesStandardTagLibrary)的出生。
由于事情中必要用到JSTL,但网上却苦于找不到有关JSTL的中文材料,以是就有了这篇文章。
JSTL简介
JSTL是一个不休完美的开放源代码的JSP标签库,是由apache的jakarta小组来保护的。JSTL只能运转在撑持JSP1.2和Servlet2.3标准的容器上,如tomcat4.x。可是期近将推出的JSP2.0中是作为尺度撑持的。
JSTL今朝的最新版本为1.02,终极公布版为1.0。JSTL包括两个部分:标签库和EL(ExpressionLanguage表达式言语)言语。标签库今朝撑持四种标签:标签URI前缀示例
Corehttp://java.sun.com/jstl/corec<c:tagname...>
XMLprocessinghttp://java.sun.com/jstl/xmlx<x:tagname...>
I18Ncapableformattinghttp://java.sun.com/jstl/fmtfmt<fmt:tagname...>
Databaseaccess(SQL)http://java.sun.com/jstl/sqlsql<sql:tagname...>
Core撑持JSP中的一些基础的操纵;
XMLprocessing撑持XML文档的处置;
I18Ncapableformatting撑持对JSP页面的国际化;
Databaseaccess(SQL)撑持JSP对数据库的操纵。
因为自己程度无限,本文仅先容Core标签,若有乐趣,可一同切磋别的三种标签的利用与扩大。
EL言语先容
EL言语是JSTL输入(输出)一个JAVA表达式的暗示情势。
在JSTL中,EL言语只能在属性值中利用。EL言语只能经由过程创建表达式${exp1}来举行挪用。在属性值中利用表达式有三种体例。
1、value属性包括一个表达式
<some:tagvalue="${expr}"/>
在这类情形下,表达式值被盘算出来并依据范例转换划定规矩赋值给value属性。好比:<c:outvalue="${username}"/>中的${username}就是一个EL,它相称于JSP语句<%=request.getAttribute(“username”)%>或<%=session.getAttribute(“username”)%>
2、value属性包括一个或多个属性,这些属性被文天职割或环绕
<some:tagvalue="some${expr}${expr}text${expr}"/>
在这类情形下,表达式从左到右举行盘算,并将了局转换为字符串型(依据范例转换划定规矩),并将了局赋值给value属性
3、value属性仅仅包括文本
<some:tagvalue="sometext"/>
在这类情形下,字符串型属性value将依据范例转换划定规矩转换为标签所但愿的范例。
EL言语的操纵符
获得某个对象或汇合中的属性值
为了取得汇合中的属性,EL撑持以下两种操纵
1.利用.操纵符来取得着名字的属性。比方表达式${user.username}标明对象user的username属性
2.利用[]操纵符来取得着名字或按数字分列的属性。
表达式${user["username"]}和表达式${user.username}寄义不异
表达式${row}标明row汇合的第一个条目。
在这里user是一个类的对象,它的属性username必需切合尺度JavaBean的标准,即必需为username属性界说响应的getter、setter办法。
Empty操纵符(空值反省)
利用empty操纵符来决意对象、汇合或字符串变量是不是为空或null。比方:
${emptyparam.username}
假如request的参数列表中的username值为null,则表达式的值为true。EL也能够间接利用对照操纵符与null举行对照。如${param.firstname==null}。
对照操纵符操纵符形貌
==或eq相称反省
!=或ne不等反省
<或lt小于反省
>或gt年夜于反省
<=或le小于即是反省
>=或ge年夜于即是反省
数字运算符与逻辑运算符均与JAVA言语不异,不再列表。
Core标签库
1、通用标签
<c:out>
<c:out>标签用于在JSP中显现数据,它有以下属性属性描述是不是必需缺省值
value输入的信息,能够是EL表达式或常量是无
defaultvalue为空时显现信息否无
escapeXml为true则避开特别的xml字符集否true
例子:您的用户名是:<c:outvalue=”${user.username}”default=”guest”/>
显现用户的用户名,如为空则显现guest
<c:outvalue="${sessionScope.username}"/>
指定从session中猎取username的值显现;
<c:outvalue="${username}"/>
显现username的值,默许是从request(page)中取,假如request中没着名为username的对象则从session中取,session中没有则从application(servletContext)中取,假如没有取就任何值则不显现。
<c:set>
<c:set>标签用于保留数据,它有以下属性属性描述是不是必需缺省值
value要保留的信息,能够是EL表达式或常量否
target必要修正属性的变量名,通常是javabean的实例否无
property必要修正的javabean属性否无
var必要保留信息的变量否无
scope保留信息的变量的局限否page
假如指定了target属性,那末property属性也必需指定。
例子:<c:setvalue="${test.testinfo}"var="test2"scope=”session”/>
将test.testinfo的值保留到session的test2中,个中test是一个javabean的实例,testinfo是test对象的属性。
<c:settarget="${cust.address}"property="city"value="${city}"/>
将对象cust.address的city属性值保留到变量city中
<c:remove>
<c:remove>标签用于删除数据,它有以下属性属性描述是不是必需缺省值
var要删除的变量是无
scope被删除变量的局限否一切局限,包含page、request、session、application等
例子:<c:removevar="test2"scope="session"/>
从session中删除test2变量。
2、流把持标签
<c:if>
<c:if>标签有以下属性属性描述是不是必需缺省值
test必要评价的前提,相称于if(...){}语句中的前提是无
var请求保留前提了局的变量名否无
scope保留前提了局的变量局限否page
<c:choose>
这个标签不承受任何属性
<c:when>
<c:when>标签有以上司性属性描述是不是必需缺省值
test必要评价的前提是无
<c:otherwise>
这个标签一样不承受任何属性
例子:<c:iftest="${user.wealthy}">
user.wealthyistrue.
</c:if>
假如user.wealthy值true,则显现user.wealthyistrue.
<c:choose>
<c:whentest="${user.generous}">
user.generous istrue.
</c:when>
<c:whentest="${user.stingy}">
user.stingyistrue.
</c:when>
<c:otherwise>
user.generousanduser.stingyarefalse.
</c:otherwise>
</c:choose>
只要当前提user.generous前往值是true时,才显现user.generous istrue.
只要当前提user.stingy前往值是true时,才显现user.stingy istrue.
别的一切的情形(即user.generous和user.stingy的值都不为true)全体显现user.generousanduser.stingyarefalse.
因为JSTL没无形如if(){…}else{…}的前提语句,以是这类情势的语句只能用<c:choose>、<c:when>和<c:otherwise>标签配合来完成了。
3、轮回把持标签
<c:forEach>
<c:forEach>标签用于通用数据,它有以上司性属性描述是不是必需缺省值
items举行轮回的项目否无
begin入手下手前提否0
end停止前提否汇合中的最初一个项目
step步长否1
var代表以后项目标变量名否无
varStatus显现轮回形态的变量否无
例子:<c:forEachitems="${vectors}"var="vector">
<c:outvalue="${vector}"/>
</c:forEach>
相称于java语句for(inti=0;i<vectors.size();i++){
out.println(vectors.get(i));
}
在这里vectors是一个java.util.Vector对象,内里寄存的是String数据,vector是以后轮回前提下String对象。实践上这里的vectors能够是任何完成了java.util.Collection接口的对象。
<c:forEachbegin="0"end="100"var="i"step="1">
count=<c:outvalue="${i}"/><br>
</c:forEach>
输入:
count=0
...
count=100
<c:forTokens>
<c:forTokens>标签有以上司性属性描述是不是必需缺省值
items举行轮回的项目是无
delims支解符是无
begin入手下手前提否0
end停止前提否汇合中的最初一个项目
step步长否1
var代表以后项目标变量名否无
varStatus显现轮回形态的变量否无
例子
<c:forTokensitems="a:b:c:d"delims=":"var="token">
<c:outvalue="${token}"/>
</c:forTokens>
这个标签的利用相称于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分隔轮回四次,token是轮回到以后支解到的字符串。
4.导进文件和URL
JSTL中心标签库撑持利用<c:import>来包括文件,利用<c:url>来打印和格局化URL,利用<c:redirect>来重定向URL。
<c:import>
<c:import>标签包括别的一个页面代码到以后页,它有以上司性属性描述是不是必需缺省值
url必要导进页面的url是无
context/后跟当地web使用程序的名字否以后使用程序
charEncoding用于导进数据的字符集否ISO-8859-1
var承受导进文本的变量名否page
scope承受导进文本的变量的变量局限否1
varReader用于承受导进文本的java.io.Reader变量名否无
varStatus显现轮回形态的变量否无
<c:url>
<c:url>标签输入一个url地点,它有以上司性属性描述是不是必需缺省值
urlurl地点是无
context/后跟当地web使用程序的名字否以后使用程序
charEncoding用于导进数据的字符集否ISO-8859-1
var承受处置过的url变量名,该变量存储url否输入到页
scope存储url的变量名的变量局限否page
例子:
<c:importurl="http://www.url.com/edit.js"var="newsfeed"/>
将urlhttp://www.url.com/edit.js包括到以后页确当前地位,并将url保留到newsfeed变量中
<ahref="<c:urlurl="/index.jsp"/>"/>
在以后页确当前地位输入<ahref="http://www.yourname.com/index.jsp"/>,http://www.yourname.com是以后页的地点的地位。
<c:redirect>
<c:redirect>标签将哀求从头定向到别的一个页面,它有以上司性属性描述是不是必需缺省值
urlurl地点是无
context/后跟当地web使用程序的名字否以后使用程序
例子:
<c:redirecturl="http://www.yourname.com/login.jsp"/>
将哀求从头定向到http://www.yourname.com/login.jsp页,相称于response.setRedirect("http://www.yourname.com/login.jsp");
<c:param>
<c:param>标签用来传送参数给一个重定向或包括页面,它有以上司性属性描述是不是必需缺省值
name在request参数中设置的变量名是无
value在request参数中设置的变量值否无
例子:
<c:redirecturl="login.jsp">
<c:paramname="id"value="888"/>
</c:redirect>
将参数888以id为名字传送到login.jsp页面,相称于login.jsp?id=888
JSTL的长处
1、在使用程序服务器之间供应了分歧的接口,最年夜程序地进步了WEB使用在各使用服务器之间的移植。
2、简化了JSP和WEB使用程序的开辟。
3、以一种一致的体例削减了JSP中的scriptlet代码数目,能够到达没有任何scriptlet代码的程序。在我们公司的项目中是不同意有任何的scriptlet代码呈现在JSP中。
4、同意JSP计划工具与WEB使用程序开辟的进一步集成。信任不久就会有撑持JSTL的IDE开辟工具呈现。
总结
下面先容的仅仅是JSTL的一部分,假如偶然间我会持续把别的部分写出来分享给人人。假如要利用JSTL,则必需将jstl.jar和standard.jar文件放到classpath中,假如你还必要利用XMLprocessing及Databaseaccess(SQL)标签,还要将相干JAR文件放到classpath中,这些JAR文件全体存在于下载返来的zip文件中。这个zip文件能够从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip下载。
参考材料
1、http://java.sun.com/products/jsp/jstl/
sun公司的JSTL站点
2、http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
jakarta小组的JSTL站点
3、http://www.manning.com/bayern/appendixA.pdf
JSTL的参考文档,本文良多内容都是从这个PDF文件里翻译的。
4、<<J2EE编程指南(1.3版)>>
先容了JSTL的雏形,wrox的书都是佳构。
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种将安全性(Security)列为第一优先考虑的语言 Java 编程语言的风格十分接近C、C++语言。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种为 Internet发展的计算机语言 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 是一种语言,用以产生「小应用程序(Applet(s)) 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
页:
[1]