关闭

jstl in action 第一章 (转自http://www.blogcn.com/blog/trackback.asp?mydiary=23140833 )

5596人阅读 评论(1) 收藏 举报
PART I

背景知识

在此书的第一部分,我们将概览jstl的概念和它的工作机制。我们将从讨论网页的动态内容开始,然后比较html和xml的区别。这一步很重要,因为jstl使用了类似xml的语法,所以你必须了解它的规则。最后我们将讨论jsp基础,它是jstl植根其上的语言。

第一章:动态网页内容

动态网页内容的概念

I.jstl看上去象什么
II.运行jstl的前提
III.jstl在web应用中的角色

一个html的页面在不同的浏览器和不同的操作系统上将有些许不同的演示效果,但是,我所说的动态网页不是指的这个,而是指那些能对用户需求作出反应的页面:它能展示个性化信息、使得视图交互、从数据库和xml文档输出和打印信息。

1-1web浏览者的烦人生活

许多动态网页的设计者有这样一个错误观点:为了让网页有趣或互动,我们需要在网页中加入一些程序代码如javascript。而事实上,互联网上大多数有趣和有价值的软件运行在服务器上。

互联网架构在c/s模式上。当一个浏览器请求页面时,它不需要知道服务器如何产生页面。也许它产生于20年前用cobol写的程序,也许是使用了jstl。无论是何者产生,浏览器以同样的方式显示页面(它仅熟悉html tags)。

这个简单的事实意味着不同的服务器端web语言有着相同的目的:生成近似的web pages。无论它们是jsp、asp、php、ColdFusion等,最终产物是一样的。

换个方式说,当你查看你访问网页的源文件,你仅能看到简单的html。它产生于服务器的一个动态进程,止步于一个常规的静态页面。

必须指出的是,不是web上的所有内容都是html。无论内容的格式如何(xml、wml、xhtml等),它们都是于服务器端web语言无关的。

1-2动态web内容背后的简要概念

在web早期,生成动态web内容的唯一方式是用传统语言编写程序。这些程序(名义上应该称之为web应用程序)都是些常规程序,它们用于打印输出html而不是类似下面的文本:

请输入"yes"或"no"

早期的web程序也能够读取你通过html forms提交的数据,识别你使用的浏览器类型等等。

在web编程的第一代(即perl崛起的那段时间)后,一种不同的生成网页的模式开始流行。它们被称之为模板系统(template system)。模板系统源自于一个同样的概念:文字处理器中的邮件合并(mail merge)。例如:

亲爱的[姓名]:
你欠我[金额]元钱,如果你不还,我要打断你的[肢体部分]。

这封信有两部分:静态的模板文本(例如:亲爱的)和占位符([姓名])

为了管理邮件合并和生成个性化信函,你需要提供足够的信息来填充占位符,格式可能是这样的:

张三,12000,一条腿

用于web的模板语言也以同样的方式工作。下面的例子提供了一封看上去象jstl的邮件合并的信函:


  
    <title>催款信</title>
  
  
    <h1>亲爱的<c:out value="${姓名}"/>:</h1>
    <p>
       你欠我<c:out value="${金额}"/>元钱,如果你不还,我要打断你的<c:out value="${肢体部分}"/>。
    </p>
  


不要担心例子中的语法细节,当前我们所需要认识到的是:jstl中的占位符看上去类似html标签,学习jstl的大部分就是理解这些占位符如何工作。这些占位符叫做标签(tag),这就是为什么jstl叫做tag liberary。它是占位符的集合。

jstl的多元标签(various palceholder,对应单元标签single placeholder)帮助你获得对你的页面更多的控制权。例如:

<c:out value="${金额}"/>

假设我们需要对其进行格式处理,使得浮点数的显示符合金融数据的显示格式,如12000.1235显示为$12000.12,jstl让我们使用与上面的标签稍微不同的方式达到目的:

<c:out value="${金额}" type="currency"/>

jstl也能让我们从数据库、xml文档或web上的其他页面获得数据。

不是所有的jstl标签都被设计成输出简单的值。

http 的一个重要规则是:web必须以request/response的方式工作。也就是说,web的每一次操作都有两部分request载入数据和 response回复请求。浏览器和服务器的工作方式不像聊天室,聊天室的每一个部分都持续连接和在需要传输数据的任何时间开始传输,而web页面(包括 动态页面)是被动性的。它们只是在得到浏览器的请求后执行,输出静态模板文本并填充占位符(如果有的话)。

1-3运行jstl的前提

如我们将在第二章讨论的,jstl构建于jsp之上。jsp是一个强大的模板系统,但是伴随它强大的功能而来的是复杂性。例如:html文档中的一个jsp占位符如下:

<%=(User)session.getAttribute("user".getFirstName()%>

这个占位符和jsp中的大多数一样,基于java,如果你不是java程序员,你会觉得它难以使用。相反,jstl让你可以用如下的方式表述:

<c:out value="${user.firstName}"/>


1-3-1jsp容器

由于jstl使用jsp,你需要jsp容器来使用jstl标签。
jstl需要jsp1.2以上版本。

<笔者注释:jstl配置步骤>

在jakarta.apache.org上下载一下资源:
I.tomcat5.X系列(如果你用的是jdk1.4,可能需要下载tomcat兼容包,因为默认为java tiger版。笔者用的tomcat5.5.9,兼容包为(jakarta-tomcat-5.5.9-compat.zip)
II.jakarta-taglibs-standard压缩包

配置:

拷贝JSTL JAR文件到Tomcat的lib目录中. 

拷贝JSTL TLD文件到Tomcat的web-inf目录中 

你检查JSTL发布文件时,你应该会注意到有8个文件是以TLD扩展名结尾的。所有这8个文件都应该复制到你的web-inf目录中。 

最后,你必须修改你的web.xml,添加8个标签库的表项(entry)。需要添加的表项如下所示:
 
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/fmt</taglib-uri>  
<taglib-location>/WEB-INF/fmt.tld</taglib-location> 
</taglib> 
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/fmt-rt</taglib-uri>  
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location> 
</taglib> 
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/core</taglib-uri>  
<taglib-location>/WEB-INF/c.tld</taglib-location> 
</taglib>
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/core-rt</taglib-uri>  
<taglib-location>/WEB-INF/c-rt.tld</taglib-location> 
</taglib>
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/sql</taglib-uri>  
<taglib-location>/WEB-INF/sql.tld</taglib-location> 
</taglib>
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/sql-rt</taglib-uri>  
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location> 
</taglib>
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/x</taglib-uri>  
<taglib-location>/WEB-INF/x.tld</taglib-location> 
</taglib>
<taglib> 
<taglib-uri>::URL::http://java.sun.com/jstl/x-rt</taglib-uri>  
<taglib-location>/WEB-INF/x-rt.tld</taglib-location> 
</taglib> 

验证:
index.jsp
试试看能否正常显示
 
 
<title>Count to 10 in JSP scriptlet</title> 
 
 
<% 
for(int i=1;i<=10;i++) 
{%> 
<%=i%><br/> 
<% 

%> 
 
 

1-4jstl在web中的角色

请读者自行参考mvc模式,笔者在此不翻译该段落,网上资料足够多了^_^

1-5总结

在继续后继章节前,请你明确以下观点:

I.浏览器不关心web页面如何产生。

II.在web模板系统中,模板文本与一些占位符相混合。当页面需要回应web请求时,占位符被填充。

III.jstl是一种占位符类似html标签的模板系统。

IV.jstl基于jsp技术。

V.在大型真实的web应用中,jstl被用于视图部分。
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:46368次
    • 积分:704
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:12篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论