JSTL改进JSP来简化网页的实现过程(4)

js|过程|网页

格式标记库:格式动作

如果你已经使用了Java的 DateFormat 和NumberFormat类,在下面的标记中使用的方法应该看起来眼熟,因为JSTL格式化动作是在这些类之上建立的。这些Java类普遍提供一个format( )函数,它将一个Java类型转化为一个格式化的String和创建对应于该String的Java对象。

fmt:formatNumber动作有一个value属性和一个pattern属性。value属性是一个与我们吹降钠渌黺alue属性类似的EL表达式或者变量。pattern属性与在NumberFormat类中定义的模式一样。下列动作发送一个格式化的String到JSP页的输出上:

<fmt:formatNumber value="1000.001" pattern="#,#00.0#"/>

在这个fmt:formatNumber动作里,我们使用了type属性来指定:格式化我们需要格式化的值为一个货币值。我们保存格式化的结果在一个变量名为dollars中。在一个美国的locale类中,下面的程序生成一个字符串$3456.79(注意,它将使用的货币值四舍五入了):

<fmt:formatNumber value="3456.789" type="currency" var="dollars"/>

用于上面的type属性的可能值包括currency、 number、 和percent。

在例中,我们使用了另一种方法——使用了一个包括在value属性中的一个格式化的域(currency,每type属性)的一个文本字符串。并且解析它来获取一个数字。结果储存在由var属性指定的一个变量内。尽管这个属性是可选的,还是会经常使用它。另外,解析的值送到页输出上:

<fmt:parseNumber value="${currencyInput}" type="currency" var="parsedNumber"/>fmt:formatDate动作有一个value属性、一个format属性、一个指向处理格式化的格式类的属性(典型的,如java.util.Date):<jsp:useBean id="now" class="java.util.Date" /><fmt:formatDate value="${now}" timeStyle="long"dateStyle="long"/>

像数字格式化一样,JSTL页提供一个机制来解析一个代表日期的、进入Date对象的字符串:

<fmt:parseDate value="${dateInput}" pattern="MM dd, YYYY" />

查看java.util.DateFormat类,了解如何处理格式化和模式的更多详细的资料。

格式标记库:国际化动作

Java本地化的一个关键点是ResourceBundle类。JSTL动作允许你用这个类简单的工作。这个例子使用了fmt:bundle动作来得到与当前Locale 和 fmt:message动作对应的一个ResourceBundle动作,从而查看该资源包中的本地化的字符串:

<fmt:bundle basename="myBundle"><%-- Use values in myBundle --%><fmt:message key="Introduction">   <fmt:param value="${loginName}"/>   <fmt:param value="${loginCount}"/></fmt:message><fmt:formatDate value="${now}" var="parsedDate"/></fmt:bundle>

经常,fmt:message动作简单的查看了对应于一个关键词的字符串。在上面的例子中,在ResourceBundle中的字符串包含了取代两个值的占位符。这些值在fmt:param动作中定义过,这就像Java MessageFormat类使用的方法。

有一些类似的动作可指定一个时区,时区可应用到在标记的体中计算的任何事上:

<fmt:timeZone value="someTimeZone"><!-- actions in this context will be evaluated using someTimeZone  --></fmt:timeZone>

上述的fmt:bundle 和 fmt:timeZone动作有分别对应的fmt:setBundle和fmt:setTimeZone的动作。这些动作添加了可选的scope属性;因此,你可以使用这些动作在任何等同于应用范围的范围内设定一个资源捆绑或者一个时区。

如果你用非欧洲的locale类工作的话,你可能得担心编码的问题,JSTL支持用fmt:requestEncoding动作编码。

SQL标记库

JSTL 允许容易的数据库的集成。但是,值得注意的是:沙箱之外的JSTL的执行有一些限制。主要的问题与连接池有关。建立并维护到数据库的连接是很消耗资源的。JSTL SQL动作使得许多数据库连接建立起来,通常的,每个用户至少有一个。因此,JSTL SQL标记对于原型开发的或低容量的、基于Web的应用程序意义重大。但是它不适合于大规模的应用程序。一个可缩放的产品应用程序一般是在一个页面内处理数据库访问如隐藏数据库访问和处理像连接池之类的细节。但是,还是有方法允许你实现连接池和用一点自定义码来使用JSTL SQL动作
我们看一些简单的例子。这些例子使用来自SQL库的JSTL标记。如果你熟悉SQL基础的话,你应该能够改编这些例子用在你的应用程序上。

在下面的程序片断中,我们建立了一条到一个数据库的连接,选择一组匹配一个订单ID的订单项目,并且在一个表格中显示item属性:

<sql:setDataSource      driver="com.cheapDrivers.jdbcDriver"      url="jdbc:cheapDrivers:."      user="guest"      password="password"      var="dataSource" /><sql:query var="orderItems" dataSource="${dataSource}">SELECT * FROM itemsWHERE order_id = <cout value="${orderID}"/> ORDER BY price</sql:query><table><c:forEach var="row" items="${orderItems.rows}"><tr><td><c:out value="${row.itemName}"/></td><td><c:out value="${row.price}"/></td><td><c:out value="${row.weight}"/></td></tr></c:forEach></table>

在下一个例子中,我会说明JSTL是如何支持数据库事务的,在数据库中,许多包含对表格多个改动的操作必须是对所有的,或者什么也不做:如果出现一个问题时,改动必须为空操作。在下面例子中,sql:update动作包含在一个sql:transaction动作内,如果在事务处理过程中,存在任何SQL错误的话,在事务范围内执行的所有操作都得重来。

sql:update动作的命名有一点误导:除了SQL UPDATE外,sql:update也支持INSERT 和 DELETE,甚至是SQL CREATE。实际上,它支持不产生结果的任何一条SQL操作。在下面的例子中,sql:update通过插入变量值到一个PreparedStatement中来执行一个UPDATE动作。在这个代码片断中,我们在两个账户之间传送钱(需要预先包装在一个事务中的某些东西的一个经典的例子):

<sql:transaction dataSource="${dataSource}"><sql:update>UPDATE accountSET account_balance =account_balance -?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${sourceAccount}"/></sql:update><sql:update>UPDATE accountSET account_balance =account_balance +?WHERE accountNo = ?<sql:param value="${transferAmount}"/><sql:param value="${destAccount}"/></sql:update></sql:transaction>

XML标记库

使用标准的XML标记库,你所能做的完整的处理,特别是可扩展性单一语言变换说明(XSLT)的处理,对于另一篇文章来说是一个很好的主题。下面我会涵盖足够的让你开始的知识。

在JSTL的XML支持遵循XPath规范。XPath的重要功能之一是为访问XML著名的分层的信息提供一个清晰的语法。也许看到每件是如何工作的最容易的方法就是看看我们如何使用来自于一个真实JSTL页的一个片断里的标记:

!-- Find and parse our XML document (somewhere on the WWW) --><c:import url="http://www.cheapstuff.com/orderStatus?id=2435" var="xml"/><x:parse xml="${xml}" var="doc"/><!-- access XML data via XPath expressions --><x:out select="$doc/name"/><x:out select="$doc/shippingAddress"/><x:out select="$doc/deliveryDate"/><!-- Set a scoped variable --><x:set var="custName" scope="request" select="$doc/name"/>

在上面的输入和解析动作中,我们装载和解析了一个指定的XML文档到一个变量doc里。在上面的每个x:out动作中,我们使用了一个XPath表达式访问了解析的XML文档的元素,并且发送结果到JSP页输出中。

上面的设置表达式计算了一个XPath表达式并且将结果输入到一个限定范围的变量里(在上述例子中,它指在一个请求范围内)。

x:out 和x:set动作可以输出一个JspTagException。如果他们没有成功的话(极有可能因为XPath表达式指向并不存在的标记),你的页,像在所有其他情况下一样,应该智能的处理这些异常(要么通过传统的JSP errorPage指令,要么使用JSTL的c:catch动作),

JSTL容易处理XSLT转换。在下面的示范页中,我们使用来自XML标记库中的x:transform动作,用一个XSLT stylesheet创建一个来自于XML源文档的一个格式化的页。x:transform动作最重要的属性是XML和XSLT属性,在下面的例子中,我们设置了一个来自于我们在同一页初始化的变量的xslt属性;我们也在动作的体中设置了XML属性。该动作默认为x:transform动作。

默认的,转换的结果送到页输出上;你也可以保存结果到一个带x:var属性的变量内:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %><c:set var="xsltSource"> <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="/">      <xsl:apply-templates/></xsl:template><xsl:template match="music"><html><head></head><body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0"><table cellpadding="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>      <!---Set up for loop to collect all the artist information //-->      <!-- <xsl:for-each select="./*[name()= artists ]"> -->      <xsl:for-each select="artists">        <tr>          <td><xsl:value-of select="artist"/></td>          <td><xsl:value-of select="album"/></td>          <td><xsl:value-of select="year"/></td>         <td><xsl:value-of select="genre"/></td>        </tr>     </xsl:for-each></table></body></html></xsl:template></xsl:stylesheet></c:set> <x:transform xslt="${xsltSource}" ><music><artists>    <artist>Jonny B</artist>    <album>Feedback and Distortion</album>    <year>2001</year>     <genre>Rock</genre>      </artists>      <artists>      <artist>Harmony s Nieces</artist>      <album>Sappy Pop Ballads</album>      <year>2002</year>      <genre>Pop</genre>      </artists> </music></x:transform>

你也能使用c:import动作再定义一个额外的源文档和stylesheet,就好像在这个示范的代码片断展示的一样::

<c:import var="${xmlSource}" url="${someDocumentURL}" /><c:import var="${xsltSource}" url="${anotherDocumentURL}" /><x:transform xml="${xmlSource}" xslt="${xsltSource}" >

结束语

至此,你应该对JSTL、它的四种标准标记库、和它如何使网页开发更为容易 有了很好的理解。现在你开始写一些JSTL!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索jstl
, 标记
, 属性
, 例子
, 动作
一个
jstl 简化、jsp 页面引入 jstl、jsp jstl、jsp引入jstl标签库、jsp引入jstl,以便于您获取更多的相关知识。

时间: 2025-01-20 13:32:17

JSTL改进JSP来简化网页的实现过程(4)的相关文章

JSTL改进JSP来简化网页的实现过程(3)

js|过程|网页 流程控制 让我们转为讨论JSTL的流程控制和条件标记.如果你已经用任何一种语言使用了条件和流程控制语句,理论上这里没什么新鲜的东西. c:if动作处理简单条件语句的测试.计算测试属性中的Boolean表达式的值,如果表达式为真的话,计算体的内容.在下面的动作中,我们也说明了备选项var属性.为了以后的使用,var属性保存测试结果在页(如果没有指定其他scope属性的话)中. <c:if test="${status.totalVisits == 1000000}"

JSTL改进JSP来简化网页的实现过程(1)

js|过程|网页 概述 Java Server Pages (JSP) 标准标记库 (JSTL)的版本的发布对于JSP/servlet开发者来说是一个重大的进展.有了一个表达语言(EL)和一组四种强大的.易于学习的标准标记库,JSTL极有可能不久后成为实现动态的.基于Java的站点的主要方法. 1996年对JSP servlet的介绍使得Java成为动态网页开发的合理的选择.随后出现的Java服务器页(JSP)是走向快速的.可维护的Java网页实现过程的合理进化的一步,紧接着就出现了JSP标记的

JSTL改进JSP来简化网页的实现过程(2)

js|过程|网页 JSTL标记库 至此,我已经解释了一些基本原理并且涵盖了EL语法.我要专门讨论四种JSTL标记库.我主要讨论核心库,因为它是你一定要使用的:但是,我也会详细的讨论其余几个,以便你能启动它. 首先,尽管我应该更多地谈论JSTL标记库的两种风格,我上面提到的每个JSTL标记库以两个版本出现:一个支持褂肊L的表达式:另一个支持标准JSP表达式.当你引入任何标记库到一个JSP页时,你要定义一个前缀,该前缀指定了与库中标记相对应的命名空间. 四种标准标记库,和他们的JSTL规范定义的前缀

jsp开发的网页在微信公众平台上显示的内容全在左边,右边是空的

问题描述 jsp开发的网页在微信公众平台上显示的内容全在左边,右边是空的 用myeclipse开发的微网页,其实也就是网页,使用jsp编写的页面,在内部是 这些元素:因为这个项目是要放在手机里访问的,所以在电脑上很正常,但是一放到手机上,打开网页链接,所有的内容都在手机屏幕的左侧,右边是空的,但是像 这些标题元素却能正常显示,求大神解答啊~~~ 解决方案 手机里面的商户html5,控件是js控制,自适应的

简化网页 优化WEB应用的方法

web|网页|优化 在最近的项目中,我发现许多过于臃肿的网页.对于内联网中的网站而言,这一般不会造成什么问题.不过,当你通过互联网向外发布网页时,性能可能是我们关心的主要问题--毕竟,多数用户并非通过高速连接访问网站.本周,我来分析一下优化WEB应用的方法. 常见问题与可能的优化方案 加载网页的时间过长,这仅仅是WEB用户的常见投诉之一,但这也是最明显的问题.WEB开发者的主要问题在于:他们认为自己的平台满足一个目标用户群.但用户的计算机配置与互联网连接速度各不相同,所以开发者应能满足用户的最低

如何简化网页优化WEB应用

web|网页|优化 在最近的项目中,我发现许多过于臃肿的网页.对于内联网中的网站而言,这一般不会造成什么问题.不过,当你通过互联网向外发布网页时,性能可能是我们关心的主要问题--毕竟,多数用户并非通过高速连接访问网站.本周,我来分析一下优化WEB应用的方法. 常见问题与可能的优化方案 加载网页的时间过长,这仅仅是WEB用户的常见投诉之一,但这也是最明显的问题.WEB开发者的主要问题在于:他们认为自己的平台满足一个目标用户群.但用户的计算机配置与互联网连接速度各不相同,所以开发者应能满足用户的最低

网站建设技术:简化网页设计 提高用户体验

在设计领域中,很多人都认同应该简化设计,以便让相应的工作更好发挥作用,设计只是增强视觉的手段. 随着网站建设技术的发展,在网页中实现复杂的功能不再是难事,网页中功能越来愈多,因此要在用户的浏览体验和网页设计的美观性中取得一个平衡点就显得非常重要. 网页设计的简化法 不同人对网页设计简化法会有不同的定义.一个简单的定义是将复杂的东西浓缩简化成简单的东西,当然在简化的同时,不能丢掉有价值的东西.总而言之,如果你的网页设计很臃肿庞大,最好去精简它. 在具体的网页设计中,可能是将网站分成几个部分,并使它

简化网页使内容更具可读性的几种方法

  很多时候,设计不可避免的会变得复杂.因为按照客户的要求去设计,往往会添加大量元素,使得页面变得较为臃肿,内容过载,让人难以理解,因此我们就需要通过设计手段,来个网页"减负". 作为设计师,我们懂得如何有创意的解决客户的问题.问题是什么并不重要,无论是为客户设计响应式网站,还是通过设计吸引用户,增加客户的销售量,重要的是网页的核心元素,通过手段凸显这些元素,让网站更好的工作,更好的服务客户.用户.给网站"减负"就是个不错的方法. 如何让界面看起来更直观.不含&qu

java-如何在输入XXX/index.jsp加载网页前进入Action获取数据

问题描述 如何在输入XXX/index.jsp加载网页前进入Action获取数据 进入Index.jsp时 里面有需要从后台获取的数据然后显示,所以进入这个页面时不先到Action获取数据再跳转回来就会报错 请问怎么解决! 解决方案 写js,页面加载时就发ajax请求到后台,然后前端得到数据,写js给页面的元素赋值 解决方案二: 在struts里面配置好,在action加载完你想加载的数据之后,返回SUCCESS或者你指定的返回结果,这个时候通过配置文件自动会跳转到XXX/index.jsp 解