仓酷云

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

[学习教程] JAVA网站制作之JSTL改善JSP来简化网页的完成历程(4)

[复制链接]
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!js|历程|网页格局标志库:格局举措

假如你已利用了Java的DateFormat和NumberFormat类,鄙人面的标志中利用的办法应当看起来眼生,由于JSTL格局化举措是在这些类之上创建的。这些Java类广泛供应一个format()函数,它将一个Java范例转化为一个格局化的String和创立对应于该String的Java对象。

fmt:formatNumber举措有一个value属性和一个pattern属性。value属性是一个与我们吹降钠渌value属性相似的EL表达式大概变量。pattern属性与在NumberFormat类中界说的形式一样。以下举措发送一个格局化的String到JSP页的输入上:
  1. <fmt:formatNumbervalue="1000.001"pattern="#,#00.0#"/>
复制代码

在这个fmt:formatNumber举措里,我们利用了type属性来指定:格局化我们必要格局化的值为一个泉币值。我们保留格局化的了局在一个变量名为dollars中。在一个美国的locale类中,上面的程序天生一个字符串$3456.79(注重,它将利用的泉币值四舍五进了):
  1. <fmt:formatNumbervalue="3456.789"type="currency"var="dollars"/>
复制代码

用于下面的type属性的大概值包含currency、number、和percent。

在例中,我们利用了另外一种办法――利用了一个包含在value属性中的一个格局化的域(currency,每type属性)的一个文本字符串。而且剖析它来猎取一个数字。了局贮存在由var属性指定的一个变量内。只管这个属性是可选的,仍是会常常利用它。别的,剖析的值送到页输入上:
  1. <fmt:parseNumbervalue="${currencyInput}"type="currency"var="parsedNumber"/>fmt:formatDate举措有一个value属性、一个format属性、一个指向处置格局化的格局类的属性(典范的,如java.util.Date):<jsp:useBeanid="now"class="java.util.Date"/><fmt:formatDatevalue="${now}"timeStyle="long"dateStyle="long"/>
复制代码

像数字格局化一样,JSTL页供应一个机制来剖析一个代表日期的、进进Date对象的字符串:
  1. <fmt:parseDatevalue="${dateInput}"pattern="MMdd,YYYY"/>
复制代码

检察java.util.DateFormat类,懂得怎样处置格局化和形式的更多具体的材料。

格局标志库:国际化举措

Java当地化的一个关头点是ResourceBundle类。JSTL举措同意你用这个类复杂的事情。这个例子利用了fmt:bundle举措来失掉与以后Locale和fmt:message举措对应的一个ResourceBundle举措,从而检察该资本包中的当地化的字符串:
  1. <fmt:bundlebasename="myBundle"><%--UsevaluesinmyBundle--%><fmt:messagekey="Introduction"><fmt:paramvalue="${loginName}"/><fmt:paramvalue="${loginCount}"/></fmt:message><fmt:formatDatevalue="${now}"var="parsedDate"/></fmt:bundle>
复制代码

常常,fmt:message举措复杂的检察了对应于一个关头词的字符串。在下面的例子中,在ResourceBundle中的字符串包括了代替两个值的占位符。这些值在fmt:param举措中界说过,这就像JavaMessageFormat类利用的办法。

有一些相似的举措可指定一个时区,时区可使用到在标志的体上钩算的任何事上:
  1. <fmt:timeZonevalue="someTimeZone"><!--actionsinthiscontextwillbeevaluatedusingsomeTimeZone--></fmt:timeZone>
复制代码

上述的fmt:bundle和fmt:timeZone举措有分离对应的fmt:setBundle和fmt:setTimeZone的举措。这些举措增加了可选的scope属性;因而,你可使用这些举措在任多么同于使用局限的局限内设定一个资本绑缚大概一个时区。

假如你用非欧洲的locale类事情的话,你大概得忧虑编码的成绩,JSTL撑持用fmt:requestEncoding举措编码。

SQL标志库

JSTL同意简单的数据库的集成。可是,值得注重的是:沙箱以外的JSTL的实行有一些限定。次要的成绩与毗连池有关。创建并保护到数据库的毗连是很损耗资本的。JSTLSQL举措使得很多数据库毗连创建起来,一般的,每一个用户最少有一个。因而,JSTLSQL标志关于原型开辟的或低容量的、基于Web的使用程序意义严重。可是它不合适于年夜范围的使用程序。一个可缩放的产物使用程序通常为在一个页面内处置数据库会见如埋没数据库会见和处置像毗连池之类的细节。可是,仍是无方法同意你完成毗连池和用一点自界说码来利用JSTLSQL举措
我们看一些复杂的例子。这些例子利用来自SQL库的JSTL标志。假如你熟习SQL基本的话,你应当可以改编这些例子用在你的使用程序上。

鄙人面的程序片段中,我们创建了一条到一个数据库的毗连,选择一组婚配一个定单ID的定单项目,而且在一个表格中显现item属性:
  1. <sql:setDataSourcedriver="com.cheapDrivers.jdbcDriver"url="jdbc:cheapDrivers:."user="guest"password="password"var="dataSource"/><sql:queryvar="orderItems"dataSource="${dataSource}">SELECT*FROMitemsWHEREorder_id=<coutvalue="${orderID}"/>ORDERBYprice</sql:query><table><c:forEachvar="row"items="${orderItems.rows}"><tr><td><c:outvalue="${row.itemName}"/></td><td><c:outvalue="${row.price}"/></td><td><c:outvalue="${row.weight}"/></td></tr></c:forEach></table>
复制代码

鄙人一个例子中,我会申明JSTL是怎样撑持数据库事件的,在数据库中,很多包括对表格多个修改的操纵必需是对一切的,大概甚么也不做:假如呈现一个成绩时,修改必需为空操纵。鄙人面例子中,sql:update举措包括在一个sql:transaction举措内,假如在事件处置过程当中,存在任何SQL毛病的话,在事件局限内实行的一切操纵都得重来。

sql:update举措的定名有一点误导:除SQLUPDATE外,sql:update也撑持INSERT和DELETE,乃至是SQLCREATE。实践上,它撑持不发生了局的任何一条SQL操纵。鄙人面的例子中,sql:update经由过程拔出变量值到一个PreparedStatement中来实行一个UPDATE举措。在这个代码片段中,我们在两个账户之间传送钱(必要事后包装在一个事件中的某些工具的一个典范的例子):
  1. <sql:transactiondataSource="${dataSource}"><sql:update>UPDATEaccountSETaccount_balance=account_balance-?WHEREaccountNo=?<sql:paramvalue="${transferAmount}"/><sql:paramvalue="${sourceAccount}"/></sql:update><sql:update>UPDATEaccountSETaccount_balance=account_balance+?WHEREaccountNo=?<sql:paramvalue="${transferAmount}"/><sql:paramvalue="${destAccount}"/></sql:update></sql:transaction>
复制代码

XML标志库

利用尺度的XML标志库,你所能做的完全的处置,出格是可扩大性单一言语变更申明(XSLT)的处置,关于另外一篇文章来讲是一个很好的主题。上面我会涵盖充足的让你入手下手的常识。

在JSTL的XML撑持遵守XPath标准。XPath的主要功效之一是为会见XML出名的分层的信息供应一个明晰的语法。大概看到每件是怎样事情的最简单的办法就是看看我们怎样利用来自于一个实在JSTL页的一个片段里的标志:
  1. !--FindandparseourXMLdocument(somewhereontheWWW)--><c:importurl="http://www.cheapstuff.com/orderStatus?id=2435"var="xml"/><x:parsexml="${xml}"var="doc"/><!--accessXMLdataviaXPathexpressions--><x:outselect="$doc/name"/><x:outselect="$doc/shippingAddress"/><x:outselect="$doc/deliveryDate"/><!--Setascopedvariable--><x:setvar="custName"scope="request"select="$doc/name"/>
复制代码

在下面的输出息争析举措中,我们装载息争析了一个指定的XML文档到一个变量doc里。在下面的每一个x:out举措中,我们利用了一个XPath表达式会见懂得析的XML文档的元素,而且发送了局到JSP页输入中。

下面的设置表达式盘算了一个XPath表达式而且将了局输出到一个限制局限的变量里(在上述例子中,它指在一个哀求局限内)。

x:out和x:set举措能够输入一个JspTagException。假如他们没有乐成的话(极有大概由于XPath表达式指向其实不存在的标志),你的页,像在一切其他情形下一样,应当智能的处置这些非常(要末经由过程传统的JSPerrorPage指令,要末利用JSTL的c:catch举措),

JSTL简单处置XSLT转换。鄙人面的树模页中,我们利用来自XML标志库中的x:transform举措,用一个XSLTstylesheet创立一个来自于XML源文档的一个格局化的页。x:transform举措最主要的属性是XML和XSLT属性,鄙人面的例子中,我们设置了一个来自于我们在统一页初始化的变量的xslt属性;我们也在举措的体中设置了XML属性。该举措默许为x:transform举措。

默许的,转换的了局送到页输入上;你也能够保留了局到一个带x:var属性的变量内:
  1. <%@tagliburi="http://java.sun.com/jstl/core"prefix="c"%><%@tagliburi="http://java.sun.com/jstl/xml"prefix="x"%><c:setvar="xsltSource"><?xmlversion="1.0"?><xsl:stylesheetxmlns:xsl="http://www.w3.org/1999/XSL/Transform"version="1.0"><xsl:templatematch="/"><xsl:apply-templates/></xsl:template><xsl:templatematch="music"><html><head></head><bodymarginheight="0"marginwidth="0"topmargin="0"leftmargin="0"><tablecellpadding="0"cellspacing="0"border="1"bgcolor="#ffffff"><tr><td><STRONG>Artist</STRONG></td><td><STRONG>Album</STRONG></td><td><STRONG>Year</STRONG></td><td><STRONG>Genre</STRONG></td></tr><!---Setupforlooptocollectalltheartistinformation//--><!--<xsl:for-eachselect="./*[name()=artists]">--><xsl:for-eachselect="artists"><tr><td><xsl:value-ofselect="artist"/></td><td><xsl:value-ofselect="album"/></td><td><xsl:value-ofselect="year"/></td><td><xsl:value-ofselect="genre"/></td></tr></xsl:for-each></table></body></html></xsl:template></xsl:stylesheet></c:set><x:transformxslt="${xsltSource}"><music><artists><artist>JonnyB</artist><album>FeedbackandDistortion</album><year>2001</year><genre>Rock</genre></artists><artists><artist>HarmonysNieces</artist><album>SappyPopBallads</album><year>2002</year><genre>Pop</genre></artists></music></x:transform>
复制代码

你也能利用c:import举措再界说一个分外的源文档和stylesheet,就仿佛在这个树模的代码片段展现的一样::
  1. <c:importvar="${xmlSource}"url="${someDocumentURL}"/><c:importvar="${xsltSource}"url="${anotherDocumentURL}"/><x:transformxml="${xmlSource}"xslt="${xsltSource}">
复制代码

停止语

至此,你应当对JSTL、它的四种尺度标志库、和它怎样使网页开辟更加简单有了很好的了解。如今你入手下手写一些JSTL!

其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
老尸 该用户已被删除
沙发
发表于 2015-1-30 15:25:18 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
兰色精灵 该用户已被删除
板凳
发表于 2015-2-3 23:15:34 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
分手快乐 该用户已被删除
地板
发表于 2015-2-6 15:58:48 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
小魔女 该用户已被删除
5#
发表于 2015-2-7 12:36:16 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
小女巫 该用户已被删除
6#
发表于 2015-2-11 02:47:40 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
透明 该用户已被删除
7#
发表于 2015-3-1 19:44:38 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
若天明 该用户已被删除
8#
发表于 2015-3-10 22:43:12 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
简单生活 该用户已被删除
9#
发表于 2015-3-17 12:02:41 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
海妖 该用户已被删除
10#
发表于 2015-3-19 08:45:35 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
冷月葬花魂 该用户已被删除
11#
发表于 2015-3-27 15:07:37 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
深爱那片海 该用户已被删除
12#
发表于 2015-3-27 16:09:35 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
灵魂腐蚀 该用户已被删除
13#
发表于 2015-4-4 16:05:38 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
再见西城 该用户已被删除
14#
发表于 2015-4-8 09:52:46 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-16 04:11:24 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
因胸联盟 该用户已被删除
16#
发表于 2015-4-17 03:07:03 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
金色的骷髅 该用户已被删除
17#
发表于 2015-4-26 06:03:36 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
愤怒的大鸟 该用户已被删除
18#
发表于 2015-5-1 16:09:11 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
精灵巫婆 该用户已被删除
19#
发表于 2015-5-4 10:42:02 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
再现理想 该用户已被删除
20#
发表于 2015-5-9 10:07:37 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-21 02:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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