仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 713|回复: 13
打印 上一主题 下一主题

[学习教程] JAVA编程:Java-JSTL(JSP尺度标签库)先容

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习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[0]}标明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的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
若相依 该用户已被删除
沙发
发表于 2015-1-19 09:21:30 来自手机 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-19 23:00:05 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
透明 该用户已被删除
地板
发表于 2015-1-25 07:44:40 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
柔情似水 该用户已被删除
5#
发表于 2015-1-25 13:25:10 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
金色的骷髅 该用户已被删除
6#
发表于 2015-1-26 06:04:05 | 只看该作者
是一种为 Internet发展的计算机语言
老尸 该用户已被删除
7#
发表于 2015-1-29 19:24:10 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
深爱那片海 该用户已被删除
8#
发表于 2015-2-6 03:31:13 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
蒙在股里 该用户已被删除
9#
发表于 2015-2-6 20:48:59 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
再现理想 该用户已被删除
10#
发表于 2015-2-8 12:24:35 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
分手快乐 该用户已被删除
11#
发表于 2015-2-25 11:19:08 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
活着的死人 该用户已被删除
12#
发表于 2015-3-7 20:08:13 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-3-12 16:35:36 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
爱飞 该用户已被删除
14#
发表于 2015-3-20 00:10:16 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表