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

转载 2007年09月13日 08:57:00
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被用于视图部分。

相关文章推荐

Qt全局热键(windows篇)(转自:http://www.cuteqt.com/blog/?p=2088)

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:Qt全局热键(window...
  • lslxdx
  • lslxdx
  • 2012-03-28 21:29
  • 1229

构造函数的继承(转自http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html)

主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。 今天要介绍的是,对象之间的"继承"的五种方法。 比如,现在有一个"动物"对象的构造函数。   function...

互联网协议入门(一)(转自:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html)

我们每天使用互联网,你是否想过,它是如何实现的?   全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不...

【hasLayout触发方式】和【hasLayout——IE中css bug的罪魁祸首】(转自:http://hi.baidu.com/oxid/blog/item/8481e6a28128b3a0caefd044.html 和 http://www.k6

【hasLayout触发方式】 IE中的HTML元素要实现透明,则其必须具备layout,这样的元素有仅可读的属性hasLayout,且其值为true。具体情况如下:body、img、table、tr...
  • lslxdx
  • lslxdx
  • 2011-05-23 19:49
  • 2039

怎么做gzip压缩(转自:http://www.siviy.com/webnews/newsshow.asp?id=510)

在网站建设或者运营中,特别是在网站优化中,我们可能会遇到一个词:“gzip压缩”。那么什么是gzip呢?怎么做gzip压缩呢? gzip是GNU zip的缩写,它是一个GNU自由软件的文件压...

asp.net内置对象(转自:http://zhoufoxcn.blog.51cto.com/792419/166803)

RequestResponseServerSessionCookieApplication及表达式        准确地说,asp.net并没有内置对象这一说,jsp里确实把request、respo...

asp.net内置对象(转自:http://zhoufoxcn.blog.51cto.com/792419/166803)

RequestResponseServerSessionCookieApplication及表达式        准确地说,asp.net并没有内置对象这一说,jsp里确实把request、respo...

http://www.useragentman.com/blog/2010/07/27/creating-cross-browser-html5-forms-now-using-modernizr-w

Creating Cross Browser HTML5 Forms Now, Using modernizr, webforms2 and html5Forms July 27th, 2010 b...

c++ string http://www.byvoid.com/blog/cpp-string/

C++ string 详解 任何人对本文进行引用都要标明作者是Nicolai M.Josuttis ////////////////////////////////////////////...

http://www.ruanyifeng.com/blog/2015/07/flex-examples.html

Flex 布局教程:实例篇 作者: 阮一峰 日期: 2015年7月14日 上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)