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被用于视图部分。

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

第二章:xml、jsp基础本章内容:I.xml基本语法II.jsp介绍III.context中的jstl标签库IV.jsp范围变量2-1xml介绍首 先要提一下html。html拥有一套标签,如,标签...
  • feng8008
  • feng8008
  • 2007年09月13日 08:59
  • 7013

如何使用JSTL来读取Action中的变量

我们知道,JSTL默认是从page,request,session,application这四个Scope逐次查找相应的EL表达式所对应 的对象的值。那么如果要使用JSTL来读取Action中的变量,...
  • dddddz
  • dddddz
  • 2013年03月19日 13:11
  • 1283

UltraEdit for Linux 破解

转自:http://www.pppei.net/blog/post/407
  • xiaokang06
  • xiaokang06
  • 2015年02月26日 20:10
  • 3563

JAVA相关基础知识 转自[http://www.blogcn.com]

AVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并 不打算了解全部问题,而只是选择其中的一部分,...
  • sandxu
  • sandxu
  • 2005年07月18日 17:56
  • 614

struts2中使用JSTL读取action中的变量注意事项

背景:今天做个项目过程中,一种无法使用${}去读取后台对象的值,只可以获取简单对象定义的值 String user。 原因:我在定义变量的时候,使用了小写t开头,导致了jstl无法获取到值; 例如...
  • SZMS1
  • SZMS1
  • 2015年06月22日 10:00
  • 887

敏捷的大拇指,中国第一家Swift开发者社区 http://www.swifthumb.com

论坛建好了  http://112.126.69.97/大家赶紧去注册占座啊,越早越资深啊,跟QQ号一样的...
  • Anewczs
  • Anewczs
  • 2014年06月09日 12:45
  • 2050

在Struts2中,如何使用JSTL来读取Action中的变量?

这是一个历史悠久的问题。因为事实上,很多朋友(包括我在内)是不使用Struts2自身的标签库,而是使用JSTL的,可能因为JSTL标签库比较少,简单易用的原因吧。我们知道,JSTL默认是从page,r...
  • xufaxi
  • xufaxi
  • 2011年04月01日 09:21
  • 3294

jsp 函数标签库(http://java.sun.com/jsp/jstl/functions)

    * boolean   fn:contains(string, substring)    * boolean   fn:containsIgnoreCase(string, substrin...
  • xiaofanku
  • xiaofanku
  • 2009年07月02日 16:48
  • 3630

JSTL http://java.sun.com/jsp/jstl/functions / 标签详解

1: 函数说明 函数名函数说明使用举例fn:contains判断字符串是否包含另外一个字符串fn:containsIgnoreCase判断字符串是否包含另外一个字符串(大小写无关)fn:...
  • tfy1332
  • tfy1332
  • 2014年04月02日 17:14
  • 3780

http://hl756799782.iteye.com/blog/1185455 JSTL

一、JSTL安装    下载地址为http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/,本网址上最...
  • zsykimi1
  • zsykimi1
  • 2013年05月19日 19:56
  • 451
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jstl in action 第一章 (转自http://www.blogcn.com/blog/trackback.asp?mydiary=23140833 )
举报原因:
原因补充:

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