WebSphere快速入门

 转帖自   http://www.jspcn.net/htmlnews/11049301359681992.html

 

1.3 Web基本知识
Web(World Wide Web、万维网)技术是电子商务的核心技术。Web的思想可追溯到Tim Berners-Lee于1989年3月在CERN (Centre European pour la Recherche Nucleaire,或称European Laboratory for Particle Physics、欧洲粒子物理实验室)写的一个关于信息管理的项目建议书(Information Management: A Proposal)。该建议书提出了分布式超文本系统的设想,旨在将CERN已有的几个信息服务器一体化,并提供一个简单的用户界面来存取各种形式的信息。1990年Web浏览器和Web服务器使用面向对象技术相继在CERN实现。Berners-Lee 和他的合作伙伴成功引入了构成Web体系结构的基本元素:Web服务器、Web浏览器、浏览器与服务器之间的通信协议HTTP(Hypertext Transfer Protocol 、超文本传输协议)、写Web文档的语言HTML(Hypertext Markup Language、超文本标记语言)、以及用来标识Web上资源的URL(Universal Resource Locator 、统一资源定位器)。1993年,美国伊利诺斯大学国家超级计算应用中心NCSA (National Center for Supercomputing Applications)的Marc Andreesen及其合作者发布了称为Mosaic的浏览器,这是第一个较健壮的易用的浏览器,它具有友善的图形用户界面。从此,Web迅速成长为全球范围内的信息宝库。1994 年,W3 联盟在Tim Berners-Lee的领导下成立,该组织通过制定技术规范与提供参考软件来发展Web的技术标准并促进Web产品之间的互操作性。
URL(Universal Resource Locator 、统一资源定位器)用来唯一标识Web上的资源,包括Web 页面、图象文件(如gif 格式文件和jpeg格式文件)、音频文件(如au格式)、视频文件 (如mpeg格式文件)。URL的格式为:协议://主机名<:端口号>/标识符(例如 http://www.seu.edu.cn:80/index.html )。协议可以是HTTP、HTTPS(安全的超文本传输协议)、FTP;主机名用来标识被请求的服务器;端口通常为不同协议保留,例如FTP和HTTP守护进程侦听不同的端口,FTP缺省的端口号为21,HTTP缺省的端口号为80;标识符说明被请求的是什么,可以是文件名(含路径)或一个应用关键字 (如/cgi-bin/和/servlet/)加上一些信息(如一个脚本的名字和servlet的名字)。例如,用户键入URL格式的地址(例如 http://www.seu.edu.cn:80/index.html );浏览器请求主机www.seu.edu.cn 在80端口提供的HTTP服务,并要求取得该服务器上的index.html文件;服务器接受请求,取得该文件;服务器把文件返回浏览器,并告诉浏览器这是一个HTML文件;浏览器在显示器上显示这个页面。在浏览器和web服务器之间使用的协议是HTTP。
HTTP(Hyper Text Transfer Protocol、超文本传输协议)是用来在互连网上传输文档的协议,它是Web上最常用也是最重要的协议,也是Web服务器和Web客户(如浏览器)之间传输Web页面的基础。HTTP是建立在TCP/IP之上的应用协议,但并不是面向连接的,而是一种请求/应答(Request/Response)式协议。浏览器通常通过HTTP向Web服务器发送一个HTTP请求,其中包括一个方法、可能的几个头、一个体。常用的方法类型包括:GET(请求一个网页)、POST(传送一个表单中的信息)、PUT(存入这个信息、类似于FTP中的PUT)和DELETE(删除这个信息)。Web服务器接受到HTTP请求之后,执行客户所请求的服务,生成一个HTTP应答返回给客户。HTTP应答有一个状态行、可能的几个头、一个体。在头中可以定义返回文档的内容类型(MIME类型)、Cache控制、失效时间。MIME类型包括:“text/html”(HTML文本)、“image/jpeg”(JPEG图)、“audio/ra”(RealAudio文件)。HTTP本身也在不断完善和发展,目前,常用的是HTTP1.1,它更好地利用TCP的特性,对HTTP1.0作了改进。
HTML (Hypertext Markup Language、超文本标记语言)是Web诞生与发展的要素之一,它旨在使得Web页面能显示在任何HTML使能的浏览器中,而与连网的机器平台无关。HTML并不是一个程序设计语言,而是一个标记语言,它所提供的标记是由SGML(Standard Generalized Markup Language,标准的通用标记语言)定义的。SGML是ISO(国际标准化组织)在1986年推出的一个用来创建标记语言的语言标准,它源自IBM早在1969年开发的GML(Generalized Markup Language),该语言的名称也正好包含了三位创始人姓字的第一个字母,他们分别是Charles F. Goldfarb, Edward Mosher,Raymond Lorie。SGML是一种元语言,即用来定义标记语言的语言,它提供了一种将数据内容与显示分离开来的数据表示方法,使得数据独立于机器平台和处理程序。这些特性促使Tim Berners-Lee 采用SGML来创建称之为HTML的标记语言。1993年形成HTML 1.0,以后不断完善,HTML 4.0发表于1997年。特别需要指出的是HTML提供的链接机制是Web的本质特性之一。但是,HTML更多的关注Web浏览器如何在页面上安排文本、图象和按钮等,过多地考虑外观使其缺乏对结构化数据的表示能力。另外,HTML中有限的标记不能满足很多Web应用的需要,如基于Web的大型出版系统和新一代的电子商务,而为各种应用需要不断地往HTML中增加标记显然不是最终的解决方法,究其原因是HTML缺乏可扩展性。解决方案应该是简化SGML使之能应用到Web上。为此,从1996年开始,W3C(World Wide Web Consortium) 的一个工作组在Jon Bosak的领导下致力于设计一个超越HTML能力范围的新语言,这个语言后来被命名为XML(Extensible Markup Language,可扩展标记语言)。1998年2月,W3C发布了XML 1.0作为其推荐标准。现在,W3C已经用XML设计出一个与HTML4.01功能等价的语言,称为XHTML1.0 (Extensible HyperText Markup Language)。
Web客户通常指的是Web浏览器,如Netscape Navigator和Microsoft Internet Explorer。这种浏览器能理解多种协议,如HTTP、HTTPS、FTP;也能理解多种文档格式,如text、HTML、JPEG(一种图象文件格式)、XML(有的尚未支持);也具备根据对象类型调用外部应用的功能。需要指出的是HTML文档中的链接在Web浏览器中通常以带下划线的方式显示,用户点击某个链接就能浏览到所链接的Web资源,这也是Web的魅力所在。
Web服务器(或称HTTP服务器)提供HTTP服务。本来Web服务器只提供“静态”内容,即返回在URL里指定的文件的内容,一般具备将URL名映射到文件名的功能,并能实施某种安全策略。现在,可采用CGI(通用网关接口)技术或Java Servlet技术从一个运行的程序里得出“动态”内容,可以采用应用关键字(如/cgi-bin/和/servlet/)来组织脚本文件和Servlet文件,而且现在的Web服务器通常还具备连接数据库的功能,这些形成了Web应用的出现。通常,一个Web服务器还提供其它服务,如FTP服务。有的还可作为代理服务器。一个代理服务器是一个可以从别的服务器上为它的客户取文件的服务器。代理服务器可以通过缓存应答(页面)使得响应时间更快,也可以降低网络流量,对外能隐藏内部网信息。
总之,URL、HTTP、HTML(以及XML)、Web服务器和Web浏览器是构成Web的五大要素。Web的本质内涵是一个建立在Internet基础上的网络化超文本信息传递系统,而Web的外延是不断扩展的信息空间。Web的基本技术在于对Web资源的标识机制(如URL)、应用协议(如HTTP和HTTPS)、数据格式(如HTML和XML)。这些技术的发展日新月异,同时新的技术不断涌现,因此Web的发展前景不可限量。
1.4 Java 简介
现代技术的发展,尤其是网络技术,给现代企业带来了许多新的机遇和挑战,如改善客户服务、全球化和信息检索等,这些在技术上反映为信息的获取、系统管理、系统集成、新技术的开发、Internet、Intranet等等与商业的结合。而这些要求一个随处可用的开放的结构和在不同的平台之间低成本的信息传递方式,Java正好满足这些要求。
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。
Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1.x版发展到1.2版。目前常用的Java平台基于Java1.2。
Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:
1) Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2) Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
3) Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4) Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5) Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
7) Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
8) Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
9) Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10) Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
11) Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
1) JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口。
2) EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。
3) Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。
4) Java IDL(Java Interface Definition Language) 提供与CORBA(Common Object Request Broker Architecture)的无逢的互操作性。这使得Java能集成异构的商务信息资源。
5) JNDI(Java Naming and Directory Interface)提供从Java平台到的统一的无逢的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。
6) JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。
7) JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。
8) JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。

在Java技术中,值得关注的还有JavaBeans,它是一个开放的标准的组件体系结构,它独立于平台,但使用Java语言。一个JavaBean是一个满足JavaBeans规范的Java类,通常定义了一个现实世界的事物或概念。一个JavaBean的主要特征包括属性、方法和事件。通常,在一个支持JavaBeans规范的开发环境(如Sun Java Studio 和IBM VisualAge for Java)中,可以可视地操作JavaBean,也可以使用JavaBean构造出新的JavaBean。JavaBean的优势还在于Java带来的可移植性。现在,EJB (Enterprise JavaBeans) 将JavaBean概念扩展到Java服务端组件体系结构,这个模型支持多层的分布式对象应用。除了JavaBeans,典型的组件体系结构还有DCOM和CORBA,关于这些组件体系结构的深入讨论超出了本书的范围。
第二章 电子商务应用框架
要转变传统的业务过程,就需要开发和部署电子商务应用系统的一个基础,电子商务应用框架正是这样的一个基础。许多企业希望电子商务应用系统具备下列特征:
1) 基于标准;
2) 以服务器为中心;
3) 可伸缩;
4) 能利用已有的核心系统;
5) 可快速部署和易用;
6) 易管理。
本章介绍的电子商务应用框架能满足企业开发电子商务应用系统的上述需求。所谓一个框架是指一个可复用的设计,表示为一组抽象的元素范例以及元素范例之间合作的接口。框架是有针对性的,如一个用户界面框架只为软件系统的用户界面提供了一个设计,而一个应用框架为整个应用系统提供了一个设计。一个应用框架中的元素范例也可称之为组件。本节介绍的电子商务应用框架基于业界标准;它为开发和部署电子商务应用系统提供了一组完整的服务;它提供的Web应用编程模型定义了Web应用拓扑结构以及使用框架提供的服务来设计Web应用的一个模型。这个框架基于独立于平台和提供商的技术标准,包括关于客户端、应用服务器、网络、数据和基础设施的标准。这些标准使得客户能在任何时候在网络上的任何地方存取有关数据和服务,也使得开发的应用软件只需写一次就能到处运行,并能即插即用各种组件。下面介绍电子商务应用框架的基本系统模型、体系结构和Web应用编程模型。

 

#################################################

 

2.1 基本系统模型
电子商务应用框架为设计电子商务解决方案提供了一个模型。这个框架基于一个多层的分布式环境,在这个环境中,任何多的各层应用逻辑和商业服务分离为各种组件,这些组件通过网络相互通信。在它的最基本的形式中,可以被描述为一个“逻辑上”的3层计算模型,即分层是在逻辑上的,并不要求是物理上的。这个基本的3层系统模型包括客户、Web 应用服务器、服务器(见图2-1)。在这3个逻辑层中的应用元素通过一组业界标准的协议、服务和软件连接器互相连接起来。
图2-1:基本系统模型

1. 客户。这个应用框架支持广泛的客户端设备,从个人数字助理(PDA)、智能卡(smartcard)、数字无绳电话等大众普遍使用的设备到网络计算机和个人计算机。将这些客户端设备连结到Web应用服务器的思路是使用一组被广泛支持的基于Internet的技术和协议。客户端的主要作用是将应用产生的结果信息显示给用户。正因为如此,这种客户通常被称为“瘦客户”,也就是说在客户端执行的应用逻辑很少或没有,这样,很小的软件(如Web浏览器)需要在客户端安装。
2. Web应用服务器。Web应用服务器是这样的一个平台,它为应用的业务逻辑提供了一个运行环境。它包括HTTP服务器和企业Java服务,支持分布式网络环境下应用软件的快速开发和部署。应用软件在Web应用服务器及其内嵌的JVM(Java Virtual Machine,Java虚拟机)中运行。这些服务端的组件通过HTTP或IIOP(Internet Inter-ORB Protocol)与客户和其它组件通信,并利用网络基础架构提供的目录和安全服务。这些组件还可以利用数据库、事务处理、和群件等设施。
3. 连到外部服务的连接器。外部服务通常是企业在信息技术上多年投资的结果,是人们日常工作所依赖的应用和数据。这些应用和数据是重要的商务资源,需要以一种安全且可控的方式连接到Web上,使得企业充分发挥它们的作用为顾客、业务伙伴和员工服务。连接器就是使得它成为现实的一种机制。连接器将中间层内新增的业务逻辑连结到企业已有的应用和数据,从而将Internet的力量无缝地连接到企业中来。

这个电子商务基本系统模型集中体现了面向Web的网络计算风格,并结合了显示、业务逻辑、数据存贮这3层应用元素。这个基本系统模型的特性如下:
1. 基于Web浏览器/Java applet使能的广泛的客户连接。
2. 易管理的客户,通过配置需要很少或无须本地的软件安装和数据备份。
3. 写一次、到处可运行的应用软件的快速开发及即时部署。
4. 提倡软件复用,使得新添程序量最小化、生产效率最大化,并提高软件质量。
5. 与外部服务的连接,在这些外部服务系统中驻留着已有业务应用和数据,充分发挥它们的作用为顾客、业务伙伴和员工服务。
2.2 体系结构
电子商务应用框架的体系结构为开发和部署电子商务应用系统提供了一组完整的服务。这个体系结构由下列关键元素构成(参见图2-2):

图2-2:应用框架的体系结构

1) 客户基于Web浏览器/Java applet模式,使得对应用系统的存取变得很普遍,并且应用组件能即时发送。
2) 网络基础设施提供了如TCP/IP、目录和安全等服务,这些服务的能力可通过开放且标准的接口和协议来存取。
3) 应用服务器软件为电子商务应用系统提供了一个平台,包括HTTP服务器、数据库和事务处理服务、邮件和群件服务、和消息服务。
4) 应用集成使得异构应用系统间相互通信,使得Web能存取现有数据和应用系统。
5) Web应用编程环境为创建动态和健壮的电子商务应用系统提供了服务端Java编程环境。
6) 电子商务应用服务为方便电子商务解决方案的创建提供了高层应用的特定功能。
7) 系统管理用来满足网络计算的管理需求,系统中的元素包括用户、应用、服务、基础构架、和硬件。
8) 开发工具用来创建、组装、部署、和管理应用系统。

1. 客户
客户通常为“瘦客户”,也就是说在客户端执行的应用逻辑很少或没有,这样,很小的软件(如Web浏览器)需要在客户端安装。在这个模型中,应用被安排在服务器上并动态地即时(on-demand )下载到发出请求的客户。正因为如此,新一代应用的客户端部分应该用HTML、DHTML、XML、Java applets来实现。这种新一代应用支持广泛的客户端设备,从大众普遍使用的个人数字助理(PDA)和智能卡(smartcard)等设备到网络计算机和个人计算机。

2. 网络基础设施
它为整个体系结构提供了一个安全的可伸缩的分布式网络平台,包括下列均基于开放标准的服务:
1) TCP/IP和网络服务。如DHCP和WAP,DHCP为进入网络的设备动态地分配IP地址,而WAP(Wireless Application Protocol、无绳应用协议)将信息和电话服务发送到移动电话和其它的无绳设备。
2) 安全服务。基于公开密钥技术的安全服务支持用户辨认和鉴别、存取控制、保密、数据完整性和交易的无否认性。
3) 目录服务。基于LDAP(Lightweight Directory Access Protocol、轻型目录存取协议)的目录服务定位网络中的用户、服务和资源。
4) 文件和打印服务。可以通过Web浏览器来存取和管理文件和打印服务

3. 应用服务器软件
应用服务器软件层为开发和支撑运行在Web应用服务器上的电子商务应用系统的商务逻辑提供了核心功能。包括下列服务:
1) HTTP服务器。它协调、收集并组合包含静态和动态内容的Web页面,并将它们发送给客户。
2) 邮件和社团服务。它们提供e-mail、工作日历、小组工作安排、聊天、新闻组讨论等服务。
3) 群件服务。它提供一个丰富的共享的虚拟工作间,并支持业务工作流程的协调。
4) 数据库服务。它将一个面向对象数据库的特性及功能与Web应用服务器集成起来。
5) 事务处理服务。它通过提供一个高可用的、健壮的、可扩充的、安全的事务处理应用执行环境来扩展Web应用服务器的功能。
6) 消息发送服务。它提供健壮的异步通信和消息代理设施来支持通信的发表/订阅模型和消息转换。

4. 应用集成
应用集成部分使得异构应用系统间在企业内或跨越企业相互通信,这些异构应用系统可能是用不同的程序设计语言实现的,也可能建立在不同的体系结构之上。企业目前的大量关键数据和应用程序(特别是事务处理程序)驻留在已有的系统中。应用集成使得Web客户以及服务器能与企业已有系统中的数据和程序一起工作,将Internet的力量无缝地连接到企业中来。所支持的集成方法包括连接器、应用消息发送服务、商务过程集成与工作流服务、组件集成服务。

5. Web应用编程环境
Web应用编程环境基于Java servlets、Java Server Pages (JSP)、Enterprise Java services 和 Enterprise JavaBean 组件模型, 为创建在Web应用服务器上的动态和健壮的商务应用提供了编程环境。该环境提供了有关服务来鼓励业务逻辑与显示的分离,使得应用能按用户兴趣和客户端设备来动态剪裁内容。

6. 电子商务应用服务
电子商务应用服务部分便利电子商务解决方案的创建。该部分包括的是面向高层应用的组件。它们建立在应用服务器软件及网络基础设施的基础上,并面向特定应用类型的功能需求按照应用框架的编程模型来实现的。比如支付服务和定单管理服务。
7. 系统管理
对于企业内部,系统管理服务为支持端到端的管理提供了核心功能,提供的有关工具和服务来支持应用系统整个生命周期的管理,从安装和配置到运作特性的监控。跨越企业,系统管理服务提供一个协作管理途径,包括策略管理和数据仓库等。
8. 开发工具
开发工具用来创建、组装、部署、和管理应用系统。

##########################################

 

2.3 Web应用编程模型
Web应用是这样的应用系统,它利用Web客户(如Web浏览器)、Web服务器和标准的Internet协议。通常,Web应用也能利用来自外部非Web服务的应用系统和数据。Web应用编程模型定义了Web应用拓扑结构以及使用框架提供的服务来设计Web应用的模型。

图2-3:Web应用的拓扑结构

图2-3显示了Web应用的拓扑结构(包括主要的元素)。值得注意的是,Web应用服务器和外部服务是不同逻辑层,它们可能运行在同一台机器上。另外,Web应用服务器的功能可能分散在多台机器上。通常,一个Web应用中的前端和业务逻辑部分运行在不同的机器上。Web应用的拓扑结构包含的元素有客户、Web应用服务器、基础设施服务和外部服务。
1. 客户
客户使用Internet技术标准(如TCP/IP、HTTP、HTML和XML)与Web应用服务器通信来存取业务逻辑和数据。客户端的基本功能是接受并验证用户输入,显示从Web应用服务器到用户的返回结果。客户可以是Internet 、Intranet(内部网)和Extranet(外部网)中的客户。Web应用编程模型的重要准则之一是Web应用的商务逻辑总是运行在服务端而不是在客户端。其优点如下:
1) 支持更广泛的客户端设备
2) Web应用服务器能集成对资源(如数据库)的存取,从而简化应用的设计,增强可伸缩性,并提供对资源的更好保护。
3) 运行在服务端的商务逻辑容易得到保护、更新和维护。
4) 运行在服务端的商务逻辑使得用户的应用环境得到集中管理并能在不同的客户机上重建。

2. Web应用服务器
Web应用服务器是 Web应用拓扑结构的核心,它为Web应用提供了广泛的程序设计、数据存取和应用集成等服务。我们可以把一个Web应用看作一个客户与Web站点之间一系列的交互作用。整个交互过程从显示在Web浏览器中一个页面开始。用户单击该页面上的一个按钮或链接就产生一个请求,该请求被送到Web应用服务器。Web应用服务器对这个请求进行处理,产生新的页面,并送回到客户端。在Web浏览器中显示的新页面就是这一次请求的结果,可能也是下一次请求的开始。所以说,Web应用包含了一组交互或处理步骤,每一步必须产生一个页面形式的响应,这个页面作为后继交互作用的入口。

图2-4:Web应用的交互模型

深究单个交互的细节,不难发现这里有三个共用的处理要求,包括业务逻辑层、用户界面层和交互控制器层(参见图2-4)。具体来讲:
1) 业务逻辑层。记录并处理用户输入的部分。比如:对应于在购物篮中添加一项商品的数据库更新操作,或从一个银行帐户到另一个的资金转帐操作。
2) 用户界面层。构造HTML页面的部分。构造出来的页面将被送回给用户,它决定了交互结果的显示形式和风格。
3) 交互控制器层。控制其它元素的部分。处理HTTP请求,从业务逻辑层选择要运行的组件,根据业务逻辑的运行结果从用户界面层选择相应的组件,以构造响应页面。
这三层正好对应到经典的M/V/C(Model/View/Controller,模型/视图/控制器)范例。这一点很重要,因为不同层通常需要不同的开发技术和工具。应用框架为各层提供使用各种组件的支持,这些组件之间有一个良定的接口。

3. 基础设施服务
除了上述程序设计机制, 应用开发者还需要运行时刻的服务来支撑Web应用。方便地定位应用组件、保证它们的可用性以及对它们安全的存取和执行等等都是在Internet、Intranet和Extranet环境中实施Web应用的关键要素。基础设施服务为支持Web应用提供下列设施:
1) 目录服务,本框架支持使用JNDI来存取基于LDAP协议的安全目录服务。
2) 认证授权,这个设施能产生用来鉴别用户和服务器的证书。公开密钥技术已经成为电子商务首选的可信赖的机制,而认证授权是公开密钥技术中的一个关键部分,它提供了数据保密、数据完整性、签名验证和用户鉴别等特性。
3) 防火墙,它作为可信赖的内部网络和不可信赖的外部网络之间的一个接口。通常,防火墙使用报文过滤器根据报文的源地址、宿地址、和服务类别(即端口号)来过滤报文流。使用防火墙来控制外部网络中的那些(IP级)能允许存取内部网络、能使用那种类别的应用服务;同样的模式能控制内部网络对外部网络的存取。
4) 代理服务器,它起到为多个浏览器检索Internet上数据的作用。作为客户和Web应用服务器之间的一个管道,代理服务器将客户的请求递交给有关的服务器并把服务器的响应返回给客户。这种工作方式还可以提供附加功能,如地址安全性和缓冲功能。

4. 外部服务
在这些外部服务系统中驻留着企业已有的应用和数据、以及商业伙伴的服务系统,如支付服务和外部信息服务。通常,这些应用和服务系统控制着关键的商务过程,需要与Web服务器集成起来为顾客、业务伙伴和员工服务。

使用电子商务应用框架开发和部署电子商务应用系统带来下列优势:
1) 极大地方便电子商务应用系统的快速开发和部署。
2) 适应任何客户端设备。
3) 确保应用系统能移植到各种不同的服务器环境中。
4) 利用并扩展已有的信息技术资源。
这也是形成这个电子商务应用框架的重要原则。

2.4 WebSphere
电子商务的灵魂是软件,而电子商务应用系统通常采用以Web服务器为中心的计算模式(参见基本系统模型),因此,Web应用服务器软件是电子商务市场的焦点。IBM WebSphere Application Server(WebSphere应用服务器)是众多Web应用服务器软件中的杰出代表。
事实上,IBM WebSphere产品系列是一套典型的电子商务应用开发工具及运行环境。该产品系列包括:
1) NetObject Fusion提供许多构建和组织站点的工具,可用来建立和管理整个Web站点;
2) NetObject BeanBuilder是一个构建applets的可视化写作工具;
3) NetObjects ScriptBuilder提供了Smart HTML、JavaScript、JSP等的编辑器;
4) Lotus Domino Go Webserver是一个Servlet使能的Web服务器;
5) IBM WebSphere Studio提供了项目工作台和有关向导,这些向导可用来存取数据库、创建JavaBean和servlet等等;
6) IBM WebSphere Application Server (WebSphere应用服务器)是一个Web应用服务器(内含IBM Http Server),它本质上是适合于servlet的Web服务器插件,提供了增强的Servlet API和Servlets管理工具,并集成了JSP技术和数据库连接技术。
第三章 WebSphere Studio应用开发
本章结合IBM WebSphere Studio产品的使用,介绍电子商务应用开发技术。
3.1 Lotus Domino Go Webserver
Lotus Domino Go Webserver是一个Web服务器软件。它具有下列特性:
= 支持CGI、Servlet和一些其它的应用编程接口。这些应用编程接口用来创建动态页面。
= 具备代理服务器(Proxy Server)的功能。一个代理服务器是一个请求代理(Broker)。浏览器把请求发到代理服务器,代理服务器从网上或从缓存里取这个页。
= 支持SSL 3.0。SSL用来确保在web服务器和web浏览器之间安全通信。
= 支持PICS(Platform for Internet Content Selection)。PICS使得用户可以过滤他们遇到的材料,按照材料的分级(由Web管理员设置)接受或者拒绝材料。
= 集成了搜索引擎。集成的搜索引擎是NetQuestion.
= 易维护性。如很容易地维护用户和访问控制列表
下面就Domino Go Webserver的特性及有关使用技术加以详述,包括Web服务器的配置、启动Web服务器、URL与目录映射规则、服务器日志、访问控制、代理服务器。
1.Web服务器的配置
配置Lotus Domino Go Webserver有两种方式,一种是使用Web浏览器来配置和管理,另一种是直接编辑配置文件。第一种方法更简单。安装Lotus Domino Go Webserver 之后,启动Web服务器,使用web浏览器打开http://127.0.0.1/frntpage.html,输入用户名和口令后,浏览器就显示配置和管理Web服务器的表单。.这些表单是CGI程序和HTML表格的结合,为配置Web服务器或查看Web服务器的当前配置提供一个简单的方法。浏览器可以和服务器在同一台机器上或在访问Web服务器的远程的客户机上。在远程的客户机上进行配置和管理时需要访问http://your.server.name/,当然要求输入正确的用户名和口令。另一种方法是直接编辑配置文件。缺省地,配置文件名为httpd.cnf,在系统目录下,通常是C:WINNT。配置文件是由指示语句(directive)构成的。通过更新这些directives来设置Web服务器的配置项,如主机名(Hostname)和URL传递规则(Passing Rules)。
2.启动Widows NT上的Web服务器
有两种方式来启动Widows NT上的Web服务器。第一种是从服务面板启动(NT Service Panel->StartUp Panel),有3个可选的启动类型(Auto、Manual、Disable),并提供了从系统帐号启动的方式,当选择从系统帐号启动Web服务器时,还可以选择在桌面上启动图形用户界面来显示日志或跟踪信息。另一种是用命令行启动,命令的语法为:whttpg [-p port] [-r config_file]。其中,端口号(port)指定Web服务器侦听的端口,而配置文件名(config_file)指定Web服务器的配置文件,通常不是缺省的配置文件(在WINNT目录下的httpd.cnf文件)。
需要指出的是在一个Widows NT上可以运行多个Web服务器,但是有两个注意事项。第一,同时运行的Web服务器必须使用不同的端口。第二,最多有一个Web服务器可以从服务面板启动,也就是说,附加的Web服务器需要用命令行启动,并使用不同的端口,但可以使用同一个配置文件(建议使用不同的配置文件为妥)。另外,一个Web服务器可以有多个IP地址,每个IP地址有不同的主机名,这称为多IP服务器。一个Web服务器也可以只有一个IP地址,但是有多个主机名,这称为虚拟主机。多IP和虚拟主机可以为不同的虚拟主机提供不同的信息,尽管不同的虚拟主机是由同一个Web服务器服务的。
3.URL与目录映射规则
URL(Uniform Resource Locator、统一资源定位器)是指定Web上资源项的地址的约定规则。它包括协议、后面跟着完整的主机名、和请求。一个URL的语法时:
协议://主机名[:端口][/[目录名[/...][/文件名[?变量名= 值[&...]]]]]。
协议指的是提供http、https、ftp等服务的有关协议,Go WebServer服务器提供自己的http和https服务,并代理ftp、gopher、wais等服务。通常,Web服务器把URL的主机名和端口后面的部分映射到一个路径和文件名,即所谓的目录映射。Go WebServer的Web文档根目录缺省为c:WWWHTML,在安装该Web服务器软件时可以指定Web文档根目录。当服务器收到的URL请求没有规定文件名字时,Web服务器会在相应的目录里搜索某个文件名列表,该文件名列表称为欢迎页面(Welcome Pages)列表。欢迎页面列表通常包括Welcome.html和index.htm等。关于目录映射,Go WebServer使用URL传递规则来实现所需的目录映射。传递模板及示例如下:
传递模板 动作 请求模板 替代的文件路径
示例 Pass /test/* c:myhome est*
其中,请求模板代表被请求的URL,可以包含(*)通配符。当一个URL匹配请求模板时,Web服务器按照替代的文件路径访问系统资源。这些规则可以用来维护物理文件系统的独立性。而动作类型及其含义如下:
(1) Map:Web服务器按照替代的文件路径改变URL,继续比较。
(2) Pass:Web服务器接受请求。
(3) Fail:Web服务器拒绝请求。
(4) Exec:Web服务器接受请求,并按照替代的文件路径运行一个CGI程序。
(5) Redirect:Web服务器使用一个由替代的文件路径确定的URL来响应。
(6) NameTrans:Web服务器接受请求,在处理请求的名字转换步骤中,运行一个由替代的文件路径
确定的API应用。
(7) Service:Web服务器接受请求,在处理请求的服务步骤中,运行一个由替代的文件路径确定的API
应用。
如果设置了下列传递规则:
= Map /beta/* /text/*
= Exec /cgi-bin/* c:wwwcgi-bin*
= Pass /* c:wwwhtml*
= Pass /abc.html c:abc.html
URL请求与实际的系统资源之间的对应举例如下:
表3-1:URL到系统资源之间的对应举例
URL请求 对应的系统资源 应用的规则
/cgi-bin/search.exe c:wwwcgi-binserch.exe 规则1)、2)
/index.html c:wwwhtmlindex.html 规则3)
/beta/download.html c:wwwhtml estdownload.html 规则1)、3)
/abc.html c:wwwhtmlabc.html 规则3)
在匹配了Map规则以后,服务器会继续比较余下的规则。服务器会在Exec和Pass规则后停止比较。第4个规则永远不会被使用,因为任何可以匹配第4个规则的都会匹配第3个规则。因此,Pass /* 规则通常应该放在最后。

 

3.2 IBM WebSphere Studio
Web站点的内容是由静态和动态内容组成的。静态内容以HTML、图片等形式出现。除了在客户端的动态效果以外,在一个Web服务器上动态内容通常以服务器端程序的形式存在,它们在被请求时产生动态内容。许多站点已经使用applet来达到在web上的动态效果。虽然这个方法能做到这一点,但是java和网络性能的问题阻碍了这种方法的大规模应用。服务器端生成动态内容在大多数情况下是更好的方法。因为:
= 更容易支持瘦客户。
= 提供更大的灵活性和安全性。
= 在大多数情况下动态内容来自数据库。
= 服务器端程序可以执行数据库操作,然后向浏览器报告结果。
服务器端生成动态内容符合瘦客户或超瘦客户设计模式,它使得软件开发者在一个web应用的客户端放尽量少的商务或数据访问逻辑。而胖客户是指在一个应用的客户端放置了太多商务逻辑和访问。这会影响网页的下载时间,可能引起其它问题。服务器端数据库访问是一个好的解决方案,可以更好地利用服务器,从客户减轻客户端的负担。通过Java访问数据库是利用JDBC(Java Database Connectivity)应用编程接口进行的。总之,在为一个网站提供动态内容时,会涉及到服务器端应用程序。CGI和/或Servlets将是典型的部署载体。Servlet是生成动态内容的焦点。然而,大多数动态内容会涉及到数据库。
WebSphere Studio提供了项目工作台和有关向导。项目工作台用来把各种生成的组件集成进一个项目,而各种向导可用来存取数据库、创建JavaBean和servlet等等。
1.项目工作台
项目工作台是一个在资源控制管理下的Web站点对象管理工具,其站点管理能力与NetObject Fusion大致雷同。项目工作台具有下列特性:
(1) 同任何网站开发工具互操作。通过将站点对象的文件类型注册到相关的应用,项目工作台可用来启动应用(工具)来操作(打开,显示)站点对象。从而能有效的管理那些与站点有关的对象资源,与资源控制环境的交互使得Web站点的小组开发得以有效地进行。因此它是能集成很多网站开发工具的理想的工具集成环境。
(2) 提供灵活的站点发布能力。项目工作台为两类对象资源提供各自独立的发布路径,一类是Servlets和JavaBeans,另一类是所有其它的东西。项目工作台提供了网站的本地发布或远程发布两种方式。
WebSphere Studio 有一个双框图形用户界面,还有许多与桌面应用程序相似的功能特性。以下分别介绍框架、分解视图、具栏和按钮、过滤器。
(1) 框架
左边的框架显示所选项目及其文件夹的图形分层。右边的框架显示在左边框架中选择的一些项目的细节。
l 一个项目可包含文件和文件夹。
l 文件夹可包含文件或其它文件夹。
l 文件包含数据。
您可以按喜欢的方法来组织文件,并使它容易地将一个项目中的有关文件作为一个单元进行管理,比如,公布一个项目中的若干个文件或所有文件至目标服务器上(如 WebSphere 应用服务器)。
(2) 分解视图
当您从视图菜单中选择分解视图表,文件夹及子文件夹中的所有文件将显示在详细视图表中。表格包括附加的路径信息以帮助您区分它们。文件夹本身不显示。 快捷方式按钮位于工作台的右下方,您可对分解视图的开或关进行切换。
(3) 工具栏和按钮
此界面包括菜单栏、工具栏、状态栏和过滤器按钮的垂直行。
l 菜单栏允许您访问所有的可用功能。
l 工具栏允许您快速访问大多数的普通功能和向导。
l 过滤器通过文件扩展名或文件类型来控制显示文件。
l 状态栏列出一般信息,例如您的视图的大小和对象的数目,也包括被过滤器隐藏的文件数。
(4) 过滤器
过滤器按钮位于主窗口的右边。它通过文件类型和文件扩展名来控制哪些文件显示在详细框架中。单击它可进行开和关的切换。打开过滤器,请单击过滤器按钮,在详细视图中将显示此种文件类型的文件。过滤器类别是:HTML 文件、图像文件、SQL 文件、Java 文件、Java 类文件、文本文件。同时要打开多个过滤器,请在单击每个过滤器按钮时按下 Ctrl 键。要暂时关闭所有过滤器,请先从视图菜单中选择“过滤器”,然后选择“显示全部”。
在分解视图上使用过滤器能够管理在分组中选择文件类型的所有文件,而不考虑它们的相对位置。 例如,若要打开一个包含文件夹及子文件夹的项目,但其中只有 HTML 文件, 您就可打开分解视图和 HTML 文件过滤器来显示整个项目中的所有 HTML 文件。
2.向导
有关向导及其基本功能如下:
(1) SQL 向导:创建一个可被数据库访问 Servlet 使用的 SQL 语句。语句可查询关系数据库,并从表中选择数据显示在 Web 页面上。SQL向导要求连接数据库,以验证连接参数,提取元数据来支持SQL语句的开发。
(2) 数据库访问向导:创建 Servlet 来访问关系数据库。使用一个生成的SQL文件,数据库访问sevlet向导生成5个文件:servlet、servletBean、输入HTML表格、输出页面(JSP)、和可选的错误页面(JSP)。其中,可选的输入表格(HTML)用来为SQL命令传参数,ServletBean提供一个可执行方法来调用SQL命令,Servlet创建那个ServletBean的一个实例,执行它的方法,然后决定调用有关结果页面。
(3) 基本 Servlet向导:创建使用指定的 JavaBean(包括 Navigator 和为 VisualAge for Java Enterprise Access Builder 建立 VisualAge 时的命令)的 Servlet。它同时产生一个调用 Servlet 及捕捉用户输入的输入页面和显示结果的输出页面。
(4) 到期 HTML Servlet向导:创建随日期而更改内容的Servlet。则它生成 Servlet 以及包括 HTML 的变量部分的页面。
(5) 注册Servlet向导:创建一个可在 WebSphere应用服务器 的 UserProfile 特性中设置或获得数据的Servlet。这使可维护 Web 访问器的详细信息,并且此访问器对于用户注册和其它的 Web 应用程序都是一样的。 向导同时产生一个调用 Servlet 及捕捉用户输入的输入页面和显示结果的输出页面。
(6) JavaBean向导:创建能够进行编辑和扩展的JavaBean的基本实现。 指定在 Bean 中所需的属性,向导将创建方法来设置和获得其值。 一旦完成 Bean,就可在基本向导中使用它。
上述向导对快速地制作用于创建和显示动态内容的中间层(和客户层)元素的原型有用,对提供模板代码来定制有用。而且与WebSphere应用服务器的“编程模型”紧密集成。下面以使用数据库访问向导为例来创建访问数据库的Servlet。数据库访问向导帮助创建Java Servlet,它用来从关系数据库中检索指定数据并在 HTML 页面中显示信息。
向导需要 SQL 语句文件,Studio SQL 向导将帮助创建它。该 SQL 语句告诉数据库访问 Servlet 连接哪个数据库、搜索哪个表格、选择哪个数据以及如何排序。实际上,无需知道 Java 或 SQL 语法,就可创建数据库访问 Servlet。浏览至想放置 .jsp 文件的文件夹。
从“工具”菜单,选择“Studio 向导”。
(1) 选择“数据库访问 Servlet”。
(2) 单击“下一步”启动向导,继续标记的页面。
(3) 当完成所有要求后单击“完成”。
(4) 当完成后,可“照原样”使用文件或根据需要进行定制。
向导将创建:
(1) 调用 Servlet 的输入页面(.html)
(2) 提供实现指定 SQL 语句数据库访问逻辑的 JavaBean 文件(.class 和 .java)
(3) 配置 Servlet 的 Servlet 配置文件(.servlet)
(4) 包含选中数据库列 JSP 和 HTML 的输出标记的 JSP 文件(.jsp)
(5) 按照下列步骤完成数据库访问 Servlet 向导:
注意:可使用这样的方式建立和测试数据库Servlet,使用某一现有数据库,通过修改 .servlet 配置文件中的一个或多个以下值,将其创建为另一个 Servlet:
= URL
= driver
= userID
= password
此方法可能需要数据库服务器的模式别名。请参阅 Servlet 配置文件,了解更多关于 .servlet 文件的详细信息。
3.脚本编辑
IBM WebSphere Studio能与NetObjects ScriptBuilder很好的集成起来。从WebSphere Studio的项目工作台项可以启动ScriptBuilder来对有关文件进行编辑,可编辑的文件类型包括HTML、JavaScript、Java、JSP和XML等。
NetObjects ScriptBuilder是适合于Web的脚本开发工具,为Web站点的客户端和服务器端脚本提供了一个快速的开发方法。它将强大的脚本编辑器与丰富的可视化开发工具有机结合,以加速脚本的开发。它也是架构Netscape,、Microsoft、 IBM、Sun Microsystems等各大公司的不同Web脚本环境的桥梁。它支持CFML (Cold Fusion Markup Language)、Dynamic HTML、 ECMAScript、 HTML、JSP、Java、LotusScript、ASP、CDF (Channel Definition Format)、DOM (Document Object Model)、Jscript、VBScript、JavaScript、LiveWire、Perl、和WML (Wireless Markup Language)。使用NetObjects ScriptBuilder, 开发者能够:
(1) 检查脚本的语法错误
(2) 创建面向对象的脚本组件。
(3) 访问语言的参考书目
(4) 使用XML定制语言参考书
(5) 检查文档与浏览器的兼容性
(6) 把所需的语言元素拖放到文档中。
(7) 使用标准的Web语言或其它语言
(8) 快速导航到嵌入的函数和组件
(9) 自动化重复性的任务
(10) 预览文档
4.服务器日志
缺省地web服务器会在c:wwwlogs目录下记录所有东西,Web服务器每天在午夜启动一个新的日志文件(如果那时它在运行的话)。否则,Web服务器会在某天首次启动时开始一个新的日志文件。日志文件通常包括下列类型:
(1) httpd-log:记录Web被访问的统计情况。
(2) agent-log:记录客户使用的Web浏览器的情况。
(3) referer-log:记录引用到请求页面的页面的情况。
(4) httpd-error:记录Web服务器内部错误的情况
(5) cgi-error:记录CGI错误的情况。
日志的删除可以选择在若个天后删除,或在若个MB存储空间被用完后删除,或运行“User Exit” 删除。也可以通过配置:对某些请求不作记录。
5.访问控制
Web服务器中的资源通常需要各种不同程度的保护。可以在Web服务器的配置文件里进行保护设置,也可以在每一个目录里设置ACL(Access Control List),ACL是一个包含保护规则列表的文件,用来保护同一个目录的文件。保护的类型有用户名保护和地址保护等方式,用户名保护决定谁可以访问这个资源(可以要求口令验证),地址保护使用地址模板来决定哪些客户机(IP地址)可以访问这个资源。
6.代理服务器
代理服务器是一个可以为它的客户从别的服务器那里取得文件的服务器。一个代理可以降低网络流量,对Internet隐藏内部网信息。可以代理http、ftp、gopher、wais和SSL隧道(如https和snews),通常通过设置URL传递规则来实现。为启用SSL代理,还必须启用connect方法。要使用Web服务器提供的代理功能,浏览器必须设置该Web服务器为代理服务器并指定这个Web服务器的端口。
启用的代理缓存功能可以提高运行效率。代理缓存是在代理服务器端保存http、https或ftp等缓存文件以减少不必要的重复的请求处理。有几个设置参数需要注意:缓存文件的一个给定的存储空间称为缓存容量,存放缓存文件的目录称为缓存文件的根目录,对某些URL进行缓存(其它的不需要)称为缓存过滤。另外,未被使用的缓存文件的时间限制用来规定服务器保存未被使用的缓存文件的最长时间,而存储空间回收用来移走过期的缓存文件。  

 

3.3 NetObjects Fusion
NetObject Fusion是一个可视化的Web站点的构建和管理工具。NetObjects Fusion是Web站点构建过程的中心。NetObjects Fusion是一个面向站点的工具,而不是仅仅处理单个页面。在Web站点开发的过程中,会创建许多页面,页面之间有很多链接。手工地更改这个结构是相当困难的。用NetObjects Fusion可以设计Web站点的通用元素,创建并维护Web站点的结构,构建各个页面,并能容易地维护这些页面。
总之,使用NetObject Fusion,可以设计Web站点、构建各个页面、容易地维护Web站点。下面介绍NetObject Fusion 中的站点视图(Site view)、页面视图(Page view)、样式视图(Style view)、对象集视图(Assets View、或称资源视图)、和发布视图(Publishing view)。
1.站点视图
站点的结构视图(参见图3-1)是站点视图的一种,单击“轮廓视图”标签就显示站点的轮廓视图。在结构视图中,页面的颜色是可以由开发者选择,通常用来为页面分组,但是页面颜色对实际页面没有影响。用户站点的文件格式为“*.nod”,模板文件格式为“*.nft”, 样式文件格式为“*.ssf”。使用站点视图,可以创建(或修改)一个站点的层次结构、操纵页面、引入/导出(Import/Export)站点、引入模板以改变站点的风格、打印站点的结构图等等。例如,可以引入一个已有的站点将它转成NetObjects Fusion的格式或保留为外部HTML页面。如果这些被引入的页面不会被改变,通常可以将引入的页面保留为外部HTML页面。
图3-1:站点视图

2.页面视图
站点的页面视图(见图3-2)包括页面布局(Page Layout)和主控边框(MasterBorder),并提供面板和工具栏。面板包括属性面板和对象树,工具栏包括标准工具栏、表单工具栏、组件工具栏、和高级工具栏。对象树是关于当前页面中所有对象的树状结构,开发者可以通过对象树来定位目标对象,也可以直接选择目标对象。一旦选定目标对象,属性面板就显示该对象的属性,对象属性依赖于对象的类型,不同类型的对象(如文本和applet)有不同的属性,可以使用属性面板来设置对象属性,当然有的属性可以可视地编辑。
在页面视图中,可以可视地或通过属性面板来定义主控边框和页面布局。主控边框勾画出一个页面的五个区域:中间的布局区域和四个(左、右、上、下)边缘区域。这些边缘区域包含多个页面共有的元素,如水平标注和导航条,可以通过属性面板设置主控边框的自动边框(AutoFrame)属性,把某些边缘设置成框架(frame)。关于布局,而布局区域用来放置该页面的内容。需要注意的是页面布局包括页面的实际内容,不仅仅是页面的布局,也许一个页面有好几个布局或版本,例如有框架(frame)的和没有框架的版本。NetObjects Fusion使用表格(table)来组织它生成的HTML页的内容,也可以通过设置布局属性来选择布局是表单。也可以通过弹出菜单或单击属性面板中的“HTML”按扭在来显示生成的HTML文档。
图3-2 页面视图
工具栏通常在窗口的边上,也可以拖进窗口里面(如图3-2)。工具栏包括标准工具栏、表单工具栏、组件工具栏、和高级工具栏。这些工具栏为页面的制作提供了许多实用工具。
(1) 标准工具条
= 选择(Select):选择一个特定的组件并移到另一个地点或重新设置大小。
= 缩放(Zoom In/Out):使页面的视图围绕鼠标击中的区域放大或缩小。
= 文本(Text):向页面增加一个包含一些文本的组件。
= 图片(Picture):向页面增加一个图片。可以是一个.gif或.jpg文件。Fusion接受BMP,PCX,PICT,GIF,JPEG的图。
= 热点(Hotspots):把一个图片中的某个区域标记为可单击(链接到某个URL),从而使该区域成为热点。这个区域可以是圆形、矩形、和多边形
= 布局区域(Layout Region):在布局区域或主控边框里创建一个布局区域,它可以拥有与包含元素不同的布局属性(例如,一个不同的背景色)。
= 表格(Table):创建一个HTML表格,可以规定表格的行数和列数。
= 表单区域(Form Area):创建一个或多个表单。可以选择创建基于布局区域的表单、基于表格的表单、或基于文本的表单。也可以把一个表单加到边缘区域,从而能在多个页面里显示。
= 导航条(Navigation Bar):用来创建导航条。可以使用按钮或文字形式,从当前页面链向站点里的别的页面,比如在Web站点结构里的父层、当前层或子层。
= 水平标注(Banner)。用来在页面的任何地方创建一个水平标注,反映这个页面的名字。通常在页面的顶部,来标志这个页面。
= 绘制(Draw):绘制工具,这些工具用来在一个页面里画圆形、矩形、圆角矩形和多边形。
= 直线(Line):画直线的工具,这些工具用来在一个页面里画水平线、任意角度的在线、站点样式的水平线。
需要注意的是Hotspots、Draw、Line这三个工具还包括可选的子工具,按下按扭不放就会显示可选的子工具,保持按下按扭并移动就可选择所要的工具。
(2) 表单工具栏
这些工具用来创建表单。表单可以用来收集信息,然后送回服务器端CGI程序或Java Servlet。
= 表单按扭(Button):一个表单按钮通常被用来启动一个后端服务程序或来重置表单。
= 表单复选框(Check Box):一个复选框代表一个布尔值,选中表示真值,否则表示假。
= 表单单选按扭(Radio Button):一个单选按钮是一组单选按扭的一部分,这组单选按扭是互斥的,即只能有一个为真,而别的都为假互斥的。
= 表单编辑字段(Edit Field):表单上的一个区域,用户可以输入一行信息如名或姓。
= 表单多行文本(Multi-Line):表单上的一个区域,用户可以输入多行信息,如对一个产品的说明或目录里的一项。
= 表单组合框(Combo box):一个下拉列表,用户可以选择。一个例子是:头发颜色的列表。用户可以选一个。
(3) 组件工具栏
= 动态按扭(DynaButtons):对按钮使用站点风格
= 磁带(Ticker Tape):一个水平滚动文字区域,不断重复。
= 站点映射器(Site Mapper):一个用来显示站点结构的按扭。
= 消息板(Message Board):一个BBS 设施
= 表单句柄(Form Handler):实现一个简单的CGI程序。用来检查表单中的字段
= 图片反转(Picture Rollover):一个反转按扭。当鼠标滚过图片,图片改变成指定的图片反转。当= 鼠标在图片上单击,图片会改变,一个URL链接会显示。
= 基于时间的图片(Time Based Picture):在这个地点的不同时间显示不同的图。
= 图片加载器(Picture Loader):使用其它资源中的图片
= 旋转图片(Rotating Picture):简单动画。通常用来显示广告。
(4)高级工具栏
= Media:一个子工具条,包括了一些项目象Shockwave、Quicktime、Video、Sound和别的插件
= Java:允许往页面上加一个Java applet。
= ActiveX Control:允许往页面上加一个ActiveX控件。
= Data:一个子工具条,允许你访问内部和外部数据对象。
= External HTML:包括一些需要特殊的、手工写的HTML页面。可以在外部引用HTML文件并把
它们放在站点的任何地方,而不是引入并转换这个HTML。NetObjects Fusion在发布Web站点时不分析这个HTML。
上述工具栏提供的有关工具可用来增加页面的互动性。如可以在页面上增加脚本、放置ActiveX控件、增加Java applets等等。脚本可以加到一个Fusion生成的HTML元素的前面、后面或里面。增加Java applets时使用Java对象属性设置有关参数,Fusion将增加的class文件作为对象集(assets)中的元素。
3.样式视图
样式视图(参见图3-3)可用来选择站点样式、编辑样式、或创建新的样式。Fusion提供的样式适合于简单的站点或者可用来取得用户的反馈信息,重要的站点通常需要创建新的样式。Fusion用样式中指定的字体生成水平标注和按钮上的文字。因此,应该为水平标注和按钮选择任何你的系统里的字体,Fusion将使用指定的字体生成有关图象,浏览器只看到一个图象。对于在HTML里创建的文字组件,浏览器可以控制自己使用的字体。
图3-3:样式视图

4. 对象集视图
对象集视图(参见图3-4)是一个管理所有对象的地方,包括文件、链接、数据对象、变量,对象通过别名来访问。Fusion提供预定义的变量,如日期、时间和站点名等等。开发者可以创建自己的变量,并在对象集视图中管理。每当开发者需要选择图象或别的文件时,打开文件对话框(Open File dialog)上会有一个对象集标签(Assets tab),单击该标签就显示对象集中的有关文件,开发者就可以选择所需要的文件。这种就对象进行统一管理的方式支持“一次更新,每个地方都更新”。例如标识公司的图案(logo),如果一个公司改变了它的标识图案,只要在对象集视图中改变有关标识图案的文件,Fusion可以改变这个站点里的每一页。

图3-4:对象集视图

5.发布视图
发布视图(参见图3-5)用来配置发布选项,并进行发布。发布选项包括本地发布位置和远程发布位置等。本地发布是指发布到本机的文件系统里,远程发布需要使用FTP把文件传输到服务器。如果你选择发布到一个远程站点,这个站点必须支持FTP,发布者必须知道所需的用户名和口令。通常在正式发布之前需要发布到一个临时服务器上进行测试,并需要使用不同平台上的不同浏览器进行测试。发布时,Fusion将生成HTML页面以及目录结构,拷贝所有的对象到指定的目录,这些目录里包含HTML文件、图象、Java 类等等。目录结构可以是单一的(flat)、基于对象类型的(asset)、或基于站点区域的(section)。所有生成的HTML使用相对路径。在发布之前还可以使用预览功能。预览创建HTML文件,生成任何需要的图象,但它不拷贝任何别的对象,从而不显示嵌入的组件。在按下CTRL 键时单击预览按扭就可以只预览当前页。

图3-5:发布视图

总之,Fusion是一个Web站点的组装工具,对管理站点范围的格式模板有强力支持,支持丰富的“对象”,链接和对象集管理使得部署到多个站点变得很容易。可以使用Fusion设计站点结构、构建和管理站点页面、设计和写页面内容、设计站点的图形化风格、管理和测试站点的对象集、把站点发布到本地或远程服务器、更新和维护站点。

3.4 NetObjects BeanBuilder
NetObjects BeanBuilder是创建多媒体Java applet的可视化写作工具。它的前身是Lotus BeanMachine。NetObjects BeanBuilder使得开发者能用多媒体、特效、灵巧的表单和动态数据来丰富网站,而不要写一行Java代码,或者只需写一些简单的Java代码。BeanBuilder是通过把JavaBean结合进applet的可视化编辑工具来实现这一强大的功能。开发者只要从BeanBuilder的样式库(Palette)里选择丰富的可重用的JavaBean,设置几个属性,就完成了多媒体Java applet的开发。如果在样式库里没有需要的那个JavaBean,可以用BeanBuilder的部件引入向导(Import Part Wizzard)引入JavaBean或Java 类。甚至也可以引入已有的applet。
1.Applet 概述
Applet是Panel的一个子类,可以包含GUI组件。与一般的应用程序不同的是,applet只能在浏览器里运行。Applet使用称之为沙箱(“sandbox”)的安全模型。在这个模型中,网上下载的applet缺省地是不可信代码(不可信Applet),不可信Applet有下列约束:
(1) 不能读或写本地文件系统;
(2) 不能进行网络操作,除非是对于applet的源主机;
(3) 不能装载某些类,如SecurityManage子类和URLContentFactory等;
(4) 不能访问它所运行的线程组以外的线程或线程组;
(5) 不能使用广播字节套(multicast sockets);
(6) 不能访问java.security包
这个安全模型使得用户放心地使用applet。然而,这些安全限制使编程的任务变得更困难。在JDK1.1里,Applets可以被签署(sign)。如果运行时环境的安全政策认为“签署者”是可信任的话,这些被签署的applets可以被认为是“可信任的”代码。在JDK1.2里,所有的Java代码都是能被限制的或签署的。
Applets通常被嵌入HTML文档中,applet标记是在一个Web页面里使用applet的标准机制。举例如下:
<Applet
CODE= Register.class
WIDTH=500
HEIGHT=500
CODEBASE= classes
ARCHIVE= Register.jar>
<PARAM NAME= fullName VALUE= "Henry Burns">
<PARAM NAME= age VALUE= "12">
</Applet>
CODE,WIDTH,HEIGHT属性是必需的选项,其它的属性和包含的标记是可选的,如ARCHIVE属性和CODEBASE属性和PARM标记。有关属性和标记,及其它们的含义如下:
(1) CODEBASE= Java代码所在的URL(不是document base)。CODEBASE允许规定.class文件所在的路径,使用页面服务器上的路径或URL。
(2) CODE= Applet类文件的名字。CODE属性可以指定为在页面服务器上的路径或URL,值对大小写敏感,而且必需包括.class扩展名。
(3) WIDTH= applet显示区域的宽度。
(4) HEIGHT= applet显示区域的高度。WIDTH和HEIGHT用像素点规定浏览器定位的空间。
(5) ALT=如果浏览器不能理解标记的话,要使用的文字
(6) ARCHIVE=允许使用JAR文件,作为发现applet文件的地方
(7) NAME= applet的名字。多个applets之间的通信要用到这个。
(8) ALIGN= 告诉浏览器怎样在显示区域里排列applet
(9) VSPACE= applet和别的组件在垂直方向上的间隔
(10) HSPACE= applet和别的组件在水平方向上的间隔
(11) PARM标记,要求一个NAME和一个VALUE成对出现。使用PARAM标记来指定一个applet
的参数。PARM标记必须在<APPLET>和</APPLET>之间出现。NAME部分是大小写不敏感的,而VALUE部分是大小写敏感的。所有传给applet的参数都被当作字符串。
在上述嵌入HTML文档的applet例子中,Applet类由Register.class定义,该文件存放在Web服务器中HTML文档目录的classes子目录中,而且Register.class 文件很可能被包含在Register.jar 文件中。Jar文件是包括一个附加的”manifest”文件的压缩ZIP文件,通常用来把一个applet需要的二进制文件、源文件和资源文件等有关文件结合进一个文件。浏览器取得jar文件之后,需要解压缩得到所需的.class文件及可能的相关资源文件。Jar文件也可以用于Java应用程序或Servlet,但一般用于Applet。如果一个Jar文件用于一个应用程序或Servlet,在运行它们以前会有一个额外的解压缩的过程。对applets而言,这个额外的解压缩处理是值得的,因为节约了网络传输时间。最后,jar文件也可以被用作一个分发Java软件包的机制。
在applet代码中,程序员可以使用getDocumentBase()方法来获得包含applet标记的HTML页面的URL。使用getCodeBase()来找出CODEBASE属性选项的设置。如果CODEBASE属性选项是空白的,getCodeBase()方法返回与getDocumentBase()一样的值。使用getParameter(String)方法取得参数的值,通常需要对传进Applet的VALU还要进行差错处理。
2.标准样式库
样式库中包含了许多用于组成applet的 bean。BeanBuilder 提供了缺省的样式库,为了把样式库中的某个 bean 放置在applet中,可以在样式库中单击这个 bean 的图标。此操作可将 bean 装载到光标上,并将光标变成十字指针形状,然后在设计器上再次单击鼠标放置 bean。样式库上的beans包括附件Beans、控件Beans、多媒体Beans、和网络Beans四种类型。
A.附件分类
(1) 布尔求值:用于对布尔值进行 AND 和 OR 运算;
(2) 数学公式:用于执行基本的数学运算;
(3) 数字求值:用于比较两个数字的大小;
(4) 文本源:用于访问文本文件的内容,对于一个远程文件可以使用一个URL表示,或对于一个在
可信任的applet里的本地文件使用一个文件名表示。
B.控件分类
(1) 按钮:按钮 bean。
(2) 复选框:复选框 bean。
(3) 选择框:下拉列表bean。
(4) 标签:显示单行文本的bean。
(5) 列表框:列表框 bean。
(6) 面板:可以包容其他 bean 并且具有布局样式的 bean。
(7) 文本区:可以输入多行文本的bean。
(8) 文本域:只能输入单行文本的bean。
这些是标准的AWT控件,但是,这些控件提供的有关事件更丰富。
C.多媒体分类
(1) 动画:用于显示一组连续的图片。
(2) 声音:用于播放声音剪辑。
(3) 时钟:用于显示日期和时间。
(4) 图像:用于显示图片文件。
(5) 动作:用于沿着路径移动其它bean。
(6) 跳跃文本:用于显示在屏幕上跳动的文本。
(7) 感应按钮:当鼠标经过时可以改变图像。
(8) 阴影文本:显示带有阴影的文本。
(9) 打字机:用于显示文本字符并伴随播放声音。
(10) 文本:用于显示文本。
(11) 行走文本:用于在屏幕上显示移动的文本。
(12) 计时器:用于计算时间。
D.网络分类
(1) 数据库:用于显示数据库中的数据。
(2) 电子邮件:用于组织和发送电子邮件而不用浏览器邮件对话框。
(3) 新闻摘要:用于显示包含 URL 链接的滚动文本列表。
(4) HTML参数:用于读取 HTML 参数。
(5) 邮件链接:用于显示浏览器的邮件对话框。
(6) URL 链接:用于连接到其他 Web 页面。生成的URL以./开头的,即使用相对于HTML页面的
相对路径,正斜杠和反斜杠都是一样的。
(7) 大字标题;用于显示带URL链接的滚动文字列表
BeanBuilder提供的控件同VisualAge for Java提供的不一样。例如,BeanBuilder有出色的多媒体和动画控件。

3.添加与定制样式库
在样式库中添加 JavaBean。只要单击添加按钮,就将出现对话框(参见图3-6)以进行选择。典型情况下可以从 .jar 文件添加现有的 bean。为此目的,单击“从 jar 文件中添加 bean”单选按钮,在文本框中输入 jar 文件的路径或单击查找...按钮以查找所需的 .jar 文件。使用分类域中的下拉列表以指定添加 bean 的样式库分类。单击确定增加 bean。如果指定的 jar 文件有多个 bean,所有的将添加到指定的分类中。如果想要在添加 bean 时添加新的分类,只要在分类域中输入新名称。然后单击确定添加 bean 和新的分类。注意:也可通过将 .jar 文件放置到 BeanBuilder 的“Beans”文件夹将 bean 添加到样式库中。“Beans”文件夹包含所有 bean 的 BeanBuilder 样式库。下一次 BeanBuilder 启动时,它将会探测到新添了 bean,并自动将它添加到样式库中。BeanBuilder 选择 jar 文件的名称作为 bean 分类的名称。通常也可以用VA Java来创建beans,然后添加到BeanBuilder 样式库。
除了向 BeanBuilder 样式库添加以外,还可以定制样式库。要定制样式库,单击样式库上的定制按钮。这将显示对话框以提供选项。可以重新排列 bean、隐藏 bean 或删除它们。
(1) 要重新排列样式库中的 bean,可在列表中选择想要移动的 bean,并使用箭头按钮在列表中移动它到想要的位置。甚至可以移动它到另一个分类。

图3-6:添加到样式库

(2) 也可以隐藏特定的 bean 或整个分类的 bean。要隐藏 bean 或分类,可单击它旁边的复选框。如果框包含复选标记,此特定 bean 或分类将显示在样式库中。如果框不包含复选标记,bean 或分类将在视图中隐藏。
(3) 要完全删除 bean,突出显示该 bean 并单击删除按钮。如果可能以后需要该 bean,可使用隐藏替代删除,这样能够快速恢复此 bean 而不用重新增加它到样式库中。
注意:虽然可以删除创建的分类,但不能删除 BeanBuilder 所带的分类。要注意到删除按钮在这些分类突出显示时,是不能使用的。如果删除分类,所有的 bean 将会消失。
4.构建applet
单击 Windows 的“开始”按钮,从“程序”菜单中启动 BeanBuilder 进入“新建applet向导”。可以通过这个向导快速创建第一个applet。阅读并熟悉向导,在准备就绪之后单击“下一步”,在“动画”附签中选择“是”。单击“查找”定位动画的第一帧,将BeanBuilder安装目录的doc 文件夹中的 dot001.jpg 作为动画的第一帧。BeanBuilder 使用相同的基础文件名(dot002.jpg、dot003.jpg 等)在第一帧图像所在的文件夹中搜索其他序号的文件,从而自动定义动画的其余帧。在本样例中,BeanBuilder 查找到 7 个文件来完成动画。BeanBuilder 自动识别动画中剩余帧。选择“中速”定义动画的播放速度。可以单击“预览”按钮预览动画的播放效果。这样就简单的完成了动画的创建。单击“完成”继续下面的操作。此时的设计器窗口如图3-7所示:
图3-7:设计器窗口

下面让我们通过创建“连接”来使它动起来。连接可以看作是两个部件之间的命令或交互作用。连接的作用方式为“当事件发生时,执行操作”。操作可以是诸如播放声音剪辑或者设置属性(背景颜色)之类的任意动作。在本样例中,操作就是播放动画。记住,所有的操作都要由事件触发。通过直接定义触发操作的事件来创建连接。在本样例中,我们需要在单击按钮之后开始播放动画。因此在创建连接之前,首先添加一个按钮。
BeanBuilder 中提供了多种按钮,可以使用标准按钮或是更为生动的感应按钮。感应按钮中附加了一些内置特性,当将鼠标移动到感应按钮上,或者在其上按下鼠标时,可以自动显示不同的图像。首先确保样式库中显示多媒体分类;如果没有,从下拉框中选择它。当多媒体分类出现后,单击感应按钮 bean。此时的光标将转换成十字指针,并且装载感应按钮 。下一步,将光标移动到applet画布上,单击鼠标并放置 bean。需要设置某些属性,以便定制感应按钮。可以在详细信息窗口的属性附签中将感应按钮链接到创建的图片文件上。根据按钮状态的不同,显示的图片也有所不同:
(1) 正常图片:鼠标指针没有移动到按钮上时的图片。
(2) 移入时图片:鼠标指针移动到按钮上时的图片。
(3) 按下时的图片:鼠标单击按钮时的图片。
(4) 禁止时图片:用户不能操作按钮时的图片。
在详细信息窗口的属性附签中为不同的感应按钮状态指定不同的图片。选择图片属性,然后单击右边的按钮。屏幕上将显示“打开”对话框,可以指定 3LSbutton3.jpg 作为图片属性,3LSbutton3P.jpg和 3LSbutton3R.jpg分别作为按下时图片和移入时图片属性。将按钮的名称属性修改为3LostSoulsButton。如果没有定义感应按钮的移入时图片、单击时图片或者禁止时图片,那么 BeanBuilder 将使用已经指定的艺术图片。
在创建连接之前,选择动画 bean 并且将它的自动启动属性设置为否。如果将这个属性设置为是,自动启动属性将告诉applet在启动时自动播放动画。但是,在本样例中,我们希望单击感应按钮之后再播放动画。现在,我们开始创建连接。首先,必须确定选中按钮。通过下面的三种方法可以知道当前选中的 bean:选中 bean 的四周会显示选取控制端点,它的名称会显示在详细信息窗口的标题条中,它的名称会显示在主工具条的选定 Bean 的下拉列表中。如果选中了感应按钮,那么详细信息窗口(参见图3-8)的标题条将显示详细信息?3LostSoulsButton。单击连接附签,由于还没有定义任何连接,此时连接列表的内容为空。在事件下面选择第一个元素,屏幕上将显示一个下拉列表,可以在这里查看感应按钮的事件。因为我们希望单击按钮后播放动画,因此从列表中选择“单击”。接着选择 Bean 下面的元素,在这里查看当前applet中可以与感应按钮进行连接的 bean。在列表中选择动画1,最后的单元是操作列表,可以在这里查看单击感应按钮时动画 bean 执行的操作。为使动画在单击按钮时开始,选择启动操作。
图3-8:详细信息窗口

现在,请保存这个applet。保存之后,可以单击主工具条上的运行按钮进行测试。短暂的停顿之后,屏幕上将出现applet查看器(Applet Viewer)窗口并显示刚创建的运行applet。单击按钮测试动画的播放效果。测试完成之后,关闭applet查看器窗口。
通过类似的方法,可以添加声音并创建一些有趣的连接。单击主工具条上的试演按钮可以进行试演。单击主工具条上的发布按钮可以将刚才创建的 3 Lost Souls applet中包含的图像文件、动画文件以及 BeanBuilder 创建的 Java (.class) 文件放到服务器上。单击主工具条上的发布按钮启动发布向导,在向导的指导下将applet放置在本地文件系统或远程的任何地方。在这里,我们将applet发布到本地文件系统。定位域中已经添入文件夹名 Publish。这是运行applet所需的所有文件的位置。当然,可以修改此文件夹为所需文件夹。在发布向导上单击完成按钮之后,BeanBuilder 整理applet中包含的所有文件并把它们复制到指定的文件夹中。如果已经设置好 Web 服务器,那么只需把这些文件从发布文件夹复制到服务器的文件夹中即可。记住,必须把applet中的所有文件和 Java (.class) 文件放置在服务器的同一个文件夹中,以便applet能够正确运行。这样就完成Java动画的开发和发布。
总之, BeanBuilder 是一个applet开发环境。它提供了非常灵活的手段,帮助用户发挥 Java 的强大功能,并自带丰富的JavaBeans。它使得放置可视化控件、创建动画applet、写简单的Java代码变得容易。对需要客户端动态的页面,applet是理想的,而BeanBuilder是开发applet的及其优越的可视化制作工具。

 

3.5 VisualAge for Java
如果您熟悉 Java 程序设计,可以使用VisualAge for Java(VAJ)来创建和定制 JavaBean。在您使用Studio的向导构建Servlet时很可能需要复杂的JavaBean,这些JavaBean一般可使用VAJ来开发。也可使用VAJ来修改与完善由 Studio 向导生成的 Java Servlet 和 Bean。
VAJ是一个全功能的Java开发环境,包含一个智能化集成开发环境,内含丰富的Java类库、高性能Java编译器和虚拟机,集成了包括向导和调试器在内的多种工具,支持JavaBeans的开发,通过先进的版本控制技术和贮存(Repository)机制支持团队开发(team development)。
VAJ的工作台为你提供各种视图,每个视图作为笔记薄(Notebook)中的一页
l 项目-在工作区中所有项目及所含包、类的树状视图
l 包-所有包、类、方法的树状视图
l 类-工作区中的所有类的列表
l 接口-工作区的所有接口及其方法的列表
l 所有问题-所有出错元素及相应错误信息的列表
项目页允许你为一个元素作标签,这样只需简单的一次单击就可定位到它。另外,当你保存文件时,将进行编译和错误标志,更正错误无需长时间编译,从而体现了应用的快速开发。使用VAJ的工作台进行Java 编程的步骤如下:
l 创建项目(和包)
l 创建类(可使用向导)
l 添加方法(可使用向导)
l 在源代码页中编辑方法,在菜单上单击保存-将进行快速编译
l 单击“运行”按钮测试代码
使用VAJ的导入/导出功能可以将有关文件(JAR、class、java)导入或导出VAJ的开发环境。值得关注的是,WebSphere可在整个VAJ中运行,允许你在VAJ环境中编写和调试servlet和JSP。对于VAJ2.0来说,需要下列步骤:
l 安装VisualAge for Java update
l 载入JSP 执行监视器,改正语法错误
l 在com.ibm.servlet包中启动SERunner web服务
而VAJ3.0已经和WebSphere Application Server、WebSphere Studio、DB2 Universal Database紧密集成,从而成为IBM电子商务应用框架的关键点。VAJ3.0的新的特性主要包括:
l WebSphere 测试环境
l JSP/Servlet 开发环境
l 存贮过程构建器
l SQLJ工具
l EJB 开发环境(VAJ3.0企业版)
l Domino企业存取构建器(VAJ3.0企业版)
l XML元数据交换(XML Metadata Interchange、XMI)工具包(VAJ3.0企业版-技术预演)第四章 Java Servlet技术
4.1 Servlet简介
1.Servlet 是什么?
Servlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。
Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能:
(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。
(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。
(3) 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。
(4) 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet 可
以是多参与者的游戏服务器。
(5) 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。
(6) 对特殊的处理采用 MIME 类型过滤数据,例如图像转换和服务器端包括(SSI)。
(7) 将定制的处理提供给所有服务器的标准例行程序。例如,Servlet 可以修改如何认证用户。
2.Servlet 的生命周期
Servlet 的生命周期始于将它装入 Web 服务器的内存时,并在终止或重新装入 Servlet 时结束。
(1) 初始化
在下列时刻装入 Servlet:
=如果已配置自动装入选项,则在启动服务器时自动装入
=在服务器启动后,客户机首次向 Servlet 发出请求时
=重新装入 Servlet 时
装入 Servlet 后,服务器创建一个 Servlet 实例并且调用 Servlet 的 init() 方法。在初始化阶段,Servlet 初始化参数被传递给 Servlet 配置对象。
(2) 请求处理
对于到达服务器的客户机请求,服务器创建特定于请求的一个“请求”对象和一个“响应”对象。服务器调用 Servlet 的 service() 方法,该方法用于传递“请求”和“响应”对象。service() 方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。service() 方法可以调用其它方法来处理请求,例如 doGet()、doPost() 或其它的方法。
(3) 终止
当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。
3. Java Servlet API
Java Servlet 开发工具(JSDK)提供了多个软件包,在编写 Servlet 时需要用到这些软件包。其中包括两个用于所有 Servlet 的基本软件包:javax.servlet 和 javax.servlet.http。可从sun公司的Web站点下载 Java Servlet 开发工具。 下面主要介绍javax.servlet.http提供的HTTP Servlet应用编程接口。
HTTP Servlet 使用一个 HTML 表格来发送和接收数据。要创建一个 HTTP Servlet,请扩展 HttpServlet 类, 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 <FORM> 和 </FORM> 标记定义的。表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。当提交信息时,它们还指定服务器应执行哪一个Servlet(或其它的程序)。 HttpServlet 类包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是继承的。
(1) init() 方法
在 Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。 可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init() 。
缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它,典型的是管理服务器端资源。 例如,可能编写一个定制 init() 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的 init() 方法设置了 Servlet 的初始化参数,并用它的 ServletConfig 对象参数来启动配置, 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。在调用 service() 方法之前,应确保已完成了 init() 方法。
(2) service() 方法
service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。
= 当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。
= 当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。
Servlet的响应可以是下列几种类型:
一个输出流,浏览器根据它的内容类型(如text/HTML)进行解释。
一个HTTP错误响应, 重定向到另一个URL、servlet、JSP。
(3) destroy() 方法
destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。
当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。
(4) GetServletConfig()方法
GetServletConfig()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和ServletContext。ServletContext 接口提供有关servlet 的环境信息。
(5) GetServletInfo()方法
GetServletInfo()方法是一个可选的方法,它提供有关servlet 的信息,如作者、版本、版权。
当服务器调用sevlet 的Service()、doGet()和doPost()这三个方法时,均需要 “请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径。javax.servlet 软件包中的相关类为ServletResponse和ServletRequest,而javax.servlet.http 软件包中的相关类为HttpServletRequest 和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最终与客户机通信。Servlet 能通过调用“请求”对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。Servlet 可以调用“响应”对象的方法发送响应,该响应是准备发回客户机的。
4.2 创建HTTP Servlet
创建一个 HTTP Servlet,通常涉及下列四个步骤:
1. 扩展 HttpServlet 抽象类。
2. 重载适当的方法。]如覆盖(或称为重写)doGet() 或doPost()方法。
3. 如果有 HTTP 请求信息的话,获取该信息。用 HttpServletRequest 对象来检索 HTML 表格所
提交的数据或 URL 上的查询字符串。“请求”对象含有特定的方法以检索客户机提供的信息,有3个可用的方法:
= getParameterNames(),
= getParameter(),
= getParameterValues()。
4. 生成 HTTP 响应。HttpServletResponse 对象生成响应,并将它返回到发出请求的客户机上。它
的方法允许设置“请求” 标题和“响应”主体。“响应”对象还含有 getWriter() 方法以返回一个 PrintWriter 对象。使用 PrintWriter 的 print() 和 println() 方法以编写 Servlet 响应来返回给客户机。或者,直接使用out对象输出有关HTML文档内容。
一个servlet样例(ServletSample.java)如下:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletSample extends HttpServlet { // 第一步: 扩展 HttpServlet 抽象类。

public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 第二步:重写doGet()方法

String myName = ""; // 第三步:获取HTTP 请求信息
java.util.Enumeration keys = request.getParameterNames();
while (keys.hasMoreElements());
{
key = (String) keys.nextElement();
if (key.equalsIgnoreCase("myName"))
myName = request.getParameter(key);
}
if (myName == "")
myName = "Hello";
// 第四步:生成 HTTP 响应。
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");

out.println("<head><title>Just a basic servlet</title></head>");
out.println("<body>");
out.println("<h1>Just a basic servlet</h1>");
out.println ("<p>" + myName + ", this is a very basic servlet that writes an HTML page.");
out.println ("<p>For instructions on running those samples on your WebSphere应用服务器, "+
"open the page:");
out.println("<pre>;http://<;em>your.server.name</em>/IBMWebAs/samples/index.html</pre>");
out.println("where <em>your.server.name</em> is the hostname of your WebSphere应用服务器.");
out.println("</body></html>");
out.flush();
}
}
上述ServletSample类扩展 HttpServlet 抽象类、重写doGet()方法。在重写的doGet()方法中,获取HTTP 请求中的一个任选的参数(myName),该参数可作为调用的 URL 上的查询参数传递到 Servlet。使用示例如下:http://your.server.name/servlet/ServletSample?myname=Michael

 

4.3 调用 Servlet
要调用 Servlet 或 Web 应用程序,请使用下列任一种方法:由 URL 调用、在 <FORM> 标记中调用、在 <SERVLET>标记中调用、在 JSP 文件中调用、在 ASP 文件中调用。
1. 由 URL 调用 Servlet
这里有两种用 Servlet 的 URL 从浏览器中调用该 Servlet 的方法:
(1) 指定 Servlet 名称:当用 WebSphere应用服务器 管理器来将一个 Servlet 实例添加(注册)到服务器配置中时,必须指定“Servlet 名称”参数的值。例如,可以指定将 hi 作为 HelloWorldServlet 的 Servlet 名称。要调用该 Servlet,需打开 http://your.server.name/servlet/hi。也可以指定 Servlet 和类使用同一名称(HelloWorldServlet)。在这种情况下,将由 http://your.server.name/servlet/HelloWorldServlet 来调用 Servlet 的实例。
(2) 指定 Servlet 别名:用 WebSphere应用服务器 管理器来配置 Servlet 别名,该别名是用于调用 Servlet 的快捷 URL。快捷 URL 中不包括 Servlet 名称。
2. 在 <FORM> 标记中指定 Servlet
可以在 <FORM> 标记中调用 Servlet。HTML 格式使用户能在 Web 页面(即从浏览器)上输入数据,并向 Servlet 提交数据。例如:
<FORM METHOD="GET" ACTION="/servlet/myservlet">
<OL>
<INPUT TYPE="radio" NAME="broadcast" VALUE="am">AM<BR>
<INPUT TYPE="radio" NAME="broadcast" VALUE="fm">FM<BR>
</OL>
(用于放置文本输入区域的标记、按钮和其它的提示符。)
</FORM>
ACTION 特性表明了用于调用 Servlet 的 URL。关于METHOD 的特性,如果用户输入的信息是通过 GET 方法向 Servlet 提交的,则 Servlet 必须优先使用 doGet() 方法。反之,如果用户输入的信息是通过 POST 方法向 Servlet 提交的,则 Servlet 必须优先使用 doPost() 方法。使用 GET 方法时,用户提供的信息是查询字符串表示的 URL 编码。无需对 URL 进行编码,因为这是由表单完成的。然后 URL 编码的查询字符串被附加到 Servlet URL 中,则整个 URL 提交完成。URL 编码的查询字符串将根据用户同可视部件之间的交互操作,将用户所选的值同可视部件的名称进行配对。例如,考虑前面的 HTML 代码段将用于显示按钮(标记为 AM 和 FM),如果用户选择 FM 按钮,则查询字符串将包含 name=value 的配对操作为broadcast=fm。因为在这种情况下,Servlet 将响应 HTTP 请求,因此 Servlet 应基于 HttpServlet 类。Servlet 应根据提交给它的查询字符串中的用户信息使用的 GET 或 POST 方法,而相应地使用 doGet() 或 doPost() 方法。
3.在 <SERVLET> 标记中指定 Servlet
当使用 <SERVLET> 标记来调用 Servlet 时,如同使用 <FORM> 标记一样,无需创建一个完整的 HTML 页面。作为替代,Servlet 的输出仅是 HTML 页面的一部分,且被动态嵌入到原始 HTML 页面中的其它静态文本中。所有这些都发生在服务器上,且发送给用户的仅是结果 HTML 页面。建议在 Java 服务器页面(JSP)文件中使用 <SERVLET> 标记。请参阅有关 JSP 技术
原始 HTML 页面中包含 <SERVLET> 和 </SERVLET> 标记。 Servlet 将在这两个标记中被调用,且 Servlet 的响应将覆盖这两个标记间的所有东西和标记本身。如果用户的浏览器可以看到 HTML 源文件,则用户将看不到 <SERVLET> 和 </SERVLET> 标记。要在 Domino Go Webserver 上使用该方法,请启用服务器上的服务器端包括功能。部分启用过程将会涉及到添加特殊文件类型 SHTML。当 Web 服务器接收到一个扩展名为 SHTML 的 Web 页面请求时,它将搜索 <SERVLET> 和 </SERVLET> 标记。对于所有支持的 Web 服务器,WebSphere应用服务器 将处理 SERVLET 标记间的所有信息。下列 HTML 代码段显示了如何使用该技术。
<SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE="url" initparm1="value">
<PARAM NAME="parm1" VALUE="value">
</SERVLET>
使用 NAME 和 CODE 属性带来了使用上的灵活性。可以只使用其中一个属性,也可以同时使用两个属性。 NAME 属性指定了 Servlet 的名称(使用 WebSphere应用服务器 管理器配置的),或不带 .class 扩展名的 Servlet 类名。CODE 属性指定了 Servlet 类名。使用 WebSphere应用服务器 时,建议指定 NAME 和 CODE,或当 NAME 指定了 Servlet 名称时,仅指定 NAME。如果仅指定了 CODE,则会创建一个 NAME=CODE 的 Servlet 实例。装入的 Servlet 将假设 Servlet 名称与 NAME 属性中指定的名称匹配。然后,其它 SHTML 文件可以成功地使用 NAME 属性来指定 Servlet 的名称,并调用已装入的 Servlet。NAME 的值可以直接在要调用 Servlet 的 URL 中使用。如果 NAME 和 CODE 都存在,且 NAME 指定了一个现有 Servlet,则通常使用 NAME 中指定的 Servlet。由于 Servlet 创建了部分 HTML 文件,所以当创建 Servlet 时,将可能会使用 HttpServlet 的一个子类,并优先使用 doGet() 方法(因为 GET 方法是提供信息给 Servlet 的缺省方法)。另一个选项是优先使用 service() 方法。另外, CODEBASE 是可选的,它指定了装入 Servlet 的远程系统的 URL。请使用 WebSphere应用服务器 管理器来从 JAR 文件配置远程 Servlet 装入系统。
在上述的标记示例中,initparm1 是初始化参数名,value 是该参数的值。可以指定多个“名称-值”对的集合。利用 ServletConfig 对象(被传递到 Servlet 的 init() 方法中)的 getInitParameterNames() 和 getInitParameter() 方法来查找参数名和参数值的字符串数组。在示例中,parm1 是参数名,并在初始化 Servlet 后被才被设置某个值。因为只能通过使用“请求”对象的方法来使用以 <PARAM> 标记设置的参数,所以服务器必须调用 Servlet service() 方法,以从用户处传递请求。要获得有关用户的请求信息,请使用 getParameterNames()、getParameter() 和 getParameterValues() 方法。
初始化参数是持续的。假设一台客户机通过调用一个包含某些初始化参数的 SHTML 文件来调用 Servlet。并假设第二台客户机通过调用第二个 SHTML 文件来调用同一个 Servlet,且该 SHTML 中未指定任何初始化参数。那么第一次调用 Servlet 时所设置的初始化参数将一直可用,并且通过所有其它 SHTML 文件而调用的所有后继 Servlet 都不会更改该参数。直到 Servlet 调用了 destroy() 方法后,才能重新设置初始化参数。例如,如果另一个 SHTML 文件指定了另一个不同的初始化参数值,虽然已此时已装入了 Servlet,但该值仍将被忽略。
4.在 JSP 文件中调用 Servlet
可以从 JavaServer 页面(JSP)文件中调用 Servlet。请参阅JSP技术部分。
5.在 ASP 文件中调用 Servlet
如果在 Microsoft Internet Information Server(IIS)上有遗留的 ASP 文件,并且无法将 ASP 文件移植成 JSP 文件时,可用 ASP 文件来调用 Servlet。在 WebSphere应用服务器 中的 ASP 支持包括一个用于嵌入 Servlet 的 ActiveX 控制,下面介绍ActiveX 控制AspToServlet 的方法和属性。
该方法说明如下:
(1) String ExecServletToString(String servletName);执行 ServletName,并将其输出返回到一个字符串中。
(2) ExecServlet(String servletName);执行 ServletName,并将其输出直接发送至 HTML 页面。
(3) String VarValue(String varName);获得一预置变量值(其它格式)。
(4) VarValue(String varName, String newVal);设置变量值。变量占据的总大小应小于 0.5 个千字
节(Kbyte)。且仅对配置文件使用这些变量。
其属性如下:
= Boolean WriteHeaders;若该属性为真,则 Servlet 提供的标题被写入用户处。缺省值为假。
= Boolean OnTest;若该属性为真,服务器会将消息记录到生成的 HTML 页面中。缺省值为假。
下列ASP 脚本示例是以 Microsoft Visual Basic Scripting(VBScript)书写的。
<%
´ Small sample asp file to show the capabilities of the servlets and the ASP GateWay ...
%>
<H1> Starting the ASP->Java Servlet demo</H1>
<%
´ Create a Servlet gateway object and initialize it ...
Set javaasp = Server.CreateObject("AspToServlet.AspToServlet")
´ Setting these properties is only for the sake of demo.
´ These are the default values ...
javaasp.OnTest = False
javaasp.WriteHeaders = False
´ Add several variables ...
javaasp.VarValue("gal") = "lag"
javaasp.VarValue("pico")= "ocip"
javaasp.VarValue("tal") = "lat"
javaasp.VarValue("paz") = "zap"
javaasp.VarValue("variable name with spaces") = "variable value with spaces"
%>
<BR>
Lets check the variables
<%
Response.Write("variable gal = ")
Response.Write(javaasp.VarValue("gal"))
%>
<BR>
<%
Response.Write("variable pico = " & javaasp.VarValue("pico"))
%>

<BR>
<HR>
<%
galout = javaasp.ExecServletToString("SnoopServlet")
If javaasp.WriteHeaders = True Then
%>
Headers were written <%
Else
%>
Headers were not written <%
End If
Response.Write(galout)
%>
<H1> The End ...</H1>
 

 

第五章 JSP技术
5.1 JSP简介
JSP(JavaServer Pages)是一种基于Java的脚本技术。在JSP 的众多优点之中,其中之一是它能将 HTML 编码从 Web 页面的业务逻辑中有效地分离出来。用 JSP 访问可重用的组件,如 Servlet、JavaBean 和基于 Java 的 Web 应用程序。JSP 还支持在 Web 页面中直接嵌入 Java 代码。可用两种方法访问 JSP 文件:浏览器发送 JSP 文件请求、发送至 Servlet 的请求。
1. JSP 文件访问 Bean 或其它能将生成的动态内容发送到浏览器的组件。图5-1说明了该 JSP 访问模型。当 Web 服务器接收到一个 JSP 文件请求时,服务器将请求发送至 WebSphere应用服务器。WebSphere应用服务器 对 JSP 文件进行语法分析并生成 Java 源文件(被编译和执行为 Servlet)。Java 源文件的生成和编译仅在初次调用 Servlet 时发生,除非已经更新了原始的 JSP 文件。在这种情况下,WebSphere应用服务器 将检测所做的更新,并在执行它之前重新生成和编译 Servlet。
图5-1:浏览器发送 JSP 文件请求
2. 发送至 Servlet 的请求生成动态内容,并调用 JSP 文件将内容发送到浏览器。图5-2说明了该访问模型。该访问模型使得将内容生成从内容显示中分离出来更为方便。WebSphere应用服务器 支持 HttpServiceRequest 对象和 HttpServiceResponse 对象的一套新方法。这些方法允许调用的 Servlet 将一个对象放入(通常是一个 Bean)请求对象中,并将该请求传递到另一个页面(通常是一个 JSP 文件)以供显示。调用的页面从请求对象中检索 Bean, 并用 JSP 来生成客户机端的 HTML。

图5-2:发送至 Servlet 的请求
5.2 JSP示例
浏览器通过一个Web 页面中的HTML表单请求一个servlet(PopulateBeanServlet),该servlet创建一个名为 dataBean 的DataBean 实例,并调用 JSP 文件将内容发送到浏览器。Servlet 示例和 JSP 文件示例说明了启用内容分离的 JSP 访问模型。
A. Servlet 是由下列Web 页面中的 HTML 表单来调用的。
<HTML>
<BODY>
<H1>运行 PopulateBeanServlet</H1>
<P>您是否希望运行 PopulateBeanServlet?
<FORM action="/servlet/PopulateBeanServlet" method="GET">
<INPUT type="SUBMIT" value="Yes">
<INPUT type="SUBMIT" value="No">
</FORM>
</BODY>
</HTML>
B. 被请求的servlet为PopulateBeanServlet, 其源代码如下:
/******************************************************************
*Servlet 示例:PopulateBeanServlet.java
*这个servlet创建一个名为 dataBean 的DataBean 实例,设置dataBean的若干个属性,
*将dataBean放置在当前“请求”对象中,
*调用 JSP 文件(DisplayData.jsp)来格式化并显示dataBean的数据
********************************************************************/
import java.io.*;
import java.beans.Beans;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.CreateException;

public class PopulateBeanServlet extends HttpServlet {
public void Service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
dataBean = (DataBean) Beans.instantiate(this.getClass().getClassLoader(), "DataBean");
}
catch (Exception ex) {
throw new ServletException("Can´t create BEAN of class DataBean: "
metaData.setSQL(getSQLString());
}
// Set some Bean properties (content generation)
dataBean.setProp1("Value1");
dataBean.setProp2("Value2");
dataBean.setProp3("Value3");
// To send the Bean to a JSP file for content formatting and display
// 1) 将dataBean放置在当前“请求”对象中,
((com.sun.server.http.HttpServiceRequest) req).setAttribute("dataBean", dataBean);
// 2) 使用callPage 方法调用JSP文件,文件名为DisplayData.jsp,并把请求对象传递给JSP。
((com.sun.server.http.HttpServiceResponse) res).callPage("/DisplayData.jsp", req);
} //end of service mehtod
} /* end of class PopulateBeanServlet */

C. 被调用的JSP文件为DisplayData.jsp,其内容如下:
<!-- 该 JSP 文件获得在请求对象中传递的 dataBean,并显示该 Bean 的属性。 -->
<html>
<head>
<title>Bean Data Display</title>
</head>

<!-- Get the Bean using the BEAN tag -->
<bean name="dataBean" type="DataBean" introspect="no" create="no" scope="request">
</bean>
<body>
<!-- There are three ways to access Bean properties -->
<!-- Using a JSP scriptlet -->
<% out.println("The value of Bean property 1 is " + dataBeans.getProp1());
%>

<!-- Using a JSP expression -->
<p>The value of Bean property 2 is
<%= dataBean.getProp2() %> </p>

<!--Using the INSERT tag -->
<p>The value of Bean property 3 is
<insert bean=dataBean property=prop3 default="No property value" >
</insert></p>

</body>
</html>
5.3 JSP 语法
JSP 文件(扩展名为 .jsp)可以包含指令(或称为指示语句)、Class-wide 变量和方法、直接插入的 Java 代码(scriptlet)、访问 JavaBean、变量数据的 HTML 模型、变量数据的 Java 表达式的组合。
1.JSP 指令
使用 JSP 指令(在<%@ 和 %>内的)来指定所使用的脚本语言、Servlet 实现的接口、Servlet 扩展的类、Servlet 导入的软件包。JSP 指令的一般语法形式为:<%@ 指令名 ="值" %>。其中有效的指令名为:
(1) language:文件中所使用的脚本语言。此时对于 Java 程序设计语言来说,仅 java 为有效值和缺省值。该指令作用于整个文件。当多次使用该指令时,只有第一次使用是有效的。示例如下:<%@ language ="java" %>。
(2) Method:由嵌入的 Java 代码(scriptlet)生成的方法的名称。生成的代码会成为指定方法名的主体。缺省的方法是service。当多次使用该指令时,只有第一次使用是有效的。示例如下:<%@ method ="doPost" %>。
(3) Import:Servlet 导入的 Java 语言软件包名或类名列表,该列表是用逗号分隔的。在 JSP 文件中,可以多次指定该指令来导入不同的软件包。示例如下:<%@ import ="java.io.*,java.util.Hashtable" %>。
(4) content_type :生成的响应的 MIME 类型。缺省值为 text/html。当多次使用该指令时,只有第一次使用是有效的。 该指令可用以指定在其中对页面进行编码的字符集。示例如下:<%@ content_type ="text/html; charset=gb2312" %>。
(5) mplements:用于生成 Servlet 实现的 Java 语言接口列表,该列表是用逗号分隔的。可以在一个 JSP 文件中多次使用该命令,以实现不同的接口。示例如下:<%@ implements = "javax.servlet.http.HttpSessionContext" %>。
(6) extends:Servlet 扩展的 Java 语言类的名称。该类必须是有效的,且不能是一个 Servlet 类。该指令作用于整个 JSP 文件。当多次使用该指令时,只有第一次使用是有效的。示例如下?lt;%@ extends ="javax.servlet.http.HttpServlet" %>。
2.class-wide 变量和方法
使用 <SCRIPT> 和 </SCRIPT> 标记来说明 Servlet 类的 class-wide 变量和 class-wide 方法。一般语法如下:
<script runat=server>。
// class-wide 变量和方法的代码
</script>
属性 runat=server 是必需的,它表明该标记是用于服务器端处理的。指定 class-wide 变量和方法的示例如下:
<script runat=server>
// class-wide 变量
init i = 0;
String foo = "Hello";
// class-wide 方法
private void foo() {
// 该方法的代码
}
</script>

3.访问 JavaBean
JSP 对 JavaBean 的支持使您能通过 Web 站点重复使用组件。JavaBean 可以是类文件或串行化 Bean,也可由 Servlet 动态生成。请使用 <BEAN> 标记来创建一个 Bean 实例,以使从 JSP 文件的任何地方都可对该实例进行访问。标记 <BEAN> 的语法为:
<bean name="Bean_name" varname="local_Bean_name"
type ="class_or_interface_name" introspect="yes|no"
beanName="ser_filename" create="yes|no"
scope="request|session|userprofile" >
<param property_name="value">
</bean>
其中的属性及其含义如下:
(1) name:用于在相应的范围(由 scope 属性指定)内查找 Bean 的名称。例如,这可能是用于存储 Bean 的会话(session)关键值。该值是分大小写的。
(2) varname:用于在 JSP 文件中的任何地方引用 Bean 的名称。该属性是可选的。缺省值为 name 属性值。该值是分大小写的。
(3) type:Bean 的类文件名。该名称用于以代码说明 Bean 实例。缺省值为 Object 类型。该值是分大小写的。
(4) Introspect:当该值为真时,JSP 处理器检查将所有的请求属性,并调用与请求属性匹配的 set 属性方法集(该属性是在 BeanInfo 中传递的)。该属性的缺省值为是。
(5) BeanName:Bean 的 .class 文件名、Bean 软件包名或包含 Bean 的串行化文件(.ser 文件)的文件名。(该名称是给 Bean 实例程序的)。仅当 Bean 不在指定的范围中,且创建属性被设置成是时,才使用该属性。该值是分大小写的。文件路径必须在应用服务器的Java 类路径中指定,除非文件在 applicationserver_rootservlets 目录下。
(6) Create:当该值为真时,如果处理器在指定的范围内没有找到 Bean,则 JSP 将创建一个 Bean 实例。缺省值为真。
(7)Scope:Bean 的生命期。该属性是可选的,其缺省值为 request 。有效值为:
= request - 由 Servlet 将 Bean 设置成请求的上下文,该 Servlet 使用 JSP API 中描述的 API 调
用 JSP 文件。如果 Bean 不是请求上下文的一部分,则将创建该 Bean,并将其存储在请求上下文中,除非创建属性已设置为否。
= session - 如果当前对话中存在 Bean,则 Bean 已被重用。如果不存在 Bean,且创建属性设置
为是,则它已被创建并作为会话的一部分存储起来。
= userprofile - 由 Servlet 请求对象检索、造型成指定的类型,并进行内省的用户简要表文件。(在
IBM WebShere应用服务器中,缺省类型为 com.ibm.servlet.personalization.userprofile.UserProfile)。
(8) param:属性和值配对的列表。属性是在 Bean 中用内省自动设置的。只在实例化 Bean 时,才对属性进行设置。
除了使用 <param> 属性来设置 Bean 属性外,还可以使用其它三种方法:第一,在请求包含 Bean 的 Web 页面(JSP 文件)的 URL 时,指定查询参数。必须将内省属性设置成“是”。其示例如下:http://www.myserver.com/signon.jsp?name=jones&password=d13x,其中 Bean 属性名将设置为 jones。第二种方法,将属性指定成由 HTML <FROM> 标记提交的参数。必须将 mothod 属性设置成 post。将 action 属性设置成调用 Bean 的 JSP 文件的 URL。必须将 introspect 属性设置成“是”。其示例如下:
<form action="http://www.myserver.com/SearchSite" method="post">
<input type="text" name="Search for: ">
<input type="submit">
</form>
第三中方法是使用 JSP 语法设置 Bean 属性。
在指定了 <BEAN> 标记后,就可以从 JSP 文件中的任何地方访问 Bean。这里有三种访问 Bean 属性的方法:使用 JSP scriptlet、使用 JSP 表达式、使用 <INSERT> 标记(如同 变量数据的 HTML 模板语法中所说明的)。请参阅JSP示例(DisplayData.jsp 文件)以获取三个访问 Bean 方法的每个方法示例。
4.直接插入的 Java 代码(scriptlet)
可以在 JSP 文件的 <% 和 %> 标记间直接嵌入任何有效的 Java 语言代码。这样嵌入的代码称为 scriptlet。如果没有指定 method 指令,则生成的代码将成为 service 方法的主体。用于 Servlet 的 scriptlet 可以使用一个预定义的变量集,该变量集符合基本的 Servlet、输出和输入类:
(1) request:由 javax.servlet.http.HttpServletRequest 定义的 Servlet 请求类
(2) responses:由 javax.servlet.http.HttpServletRequest 定义的 Servlet 响应类
(3) out:由 java.io.PrintWriter 定义的输出转录程序类
(4) in:由 java.io.BufferedReader 定义的输入阅读程序类
其示例如下:
<%
foo = request.getParameter("Name");
out.println(foo);
%>
5.变量数据的 HTML 模板语法
当页面被返回给浏览器时,应用服务器HTML 模板语法使您能将变量字段放在 HTML 页面上,并使 Servlet 和 JavaBean 可利用数据库的值动态地替换变量。该功能是 JSP 的一个 IBM 扩展,它使引用变量数据变得十分容易。该语法只能用于 JSP 文件中。HTML 模板语法包括:
= 基本 HTML 模板语法;
= 替代 HTML 模板语法;
= <REPEAT>标记。
这些标记通过 HTML 编写工具被设计成传递交互操作的标记。每一个标记有一个相应的结束标记。每一个标记是分大小写的,它们的一些属性也是分大小写的。IBM WebSphere Studio 使开发 JSP 文件以包含 HTML 模板语法变得更为容易。
(1) 基本 HTML 模板语法
<INSERT> 标记是用于指定变量字段的基本标记。一般的语法为:
<insert requestparm=pvalue requestattr=avalue bean=name
property=property_name(optional_index).subproperty_name(optional_index)
default=value_when_null>
</insert>
其中的属性及其含义如下:
= requestparm:要在请求对象内进行访问的参数。该属性是分大小写的,并且不能与Bean 和property属性一起使用。
= Requestattr:要在请求对象内进行访问的属性。属性应使用 setAttribute 方法设置。该属性是分大小写的,并且不能与 Bean 和property属性一起使用。
= Bean:由 <BEAN> 标记在 JSP 文件中说明的 JavaBean 名。请参阅访问 JavaBean 以获得 <BEAN> 标记的解释。该属性的值是分大小写的。当指定了 Bean 属性,但未指定property属性时,在替换中将使用完整的 Bean 。例如,如果 Bean 是类型 String 且未指定属性,则将替代 string 的值。
= Property:访问替换的 Bean 的属性。该属性的值是分大小写的,并且是属性的独立场所名。该属性不能与 requestparm 属性一起使用。
= Default:当 Bean 属性值为空时,显示可选的字符串。如果字符串包含多个字,则该字符串必须包含在一对双引号中(例如 "HelpDesk number")。该属性的值是分大小写的。如果未指定值,则当属性值为空时,用空字符串替代。
基本语法的示例如下:
<insert bean=userProfile property=username></insert>
<insert requestparm=company default="IBM Corporation"></insert>
<insert requestattr=ceo default="Company CEO"></insert>
<insert bean=userProfile property=lastconnectiondate.month></insert>
在大多数情况下,property属性的值就是属性名。但是,可以通过指定property属性的全格式来访问属性的某一属性(子属性)。这个全格式也提供选择项给您来指定索引属性的一个索引。该可选的索引可以是一个常数(例如 2)或如重复设置 HTML 标记中描述的索引。使用属性标记的全格式示例如下:
<insert bean=staffQuery property=address(currentAddressIndex)></insert>
<insert bean=shoppingCart property=items(4).price></insert>
<insert bean=fooBean property=foo(2).bat(3).boo.far></insert>
(2) 替代 HTML 模板语法
HTML 标准不允许在 HTML 标记中嵌入 HTML 标记。因而,就无法在另一个 HTML 标记中嵌入<INSERT>标记。作为代替,请使用 HTML 模板替代语法。要使用替代语法:
= 请使用<INSERT>和</INSERT>来包含 HTML 标记,在该标记中指出替代内容。
= 指定 Bean 和property属性:
? 要指定 Bean 和属性特性,请使用下列格式:$(bean=b property=p default=d),其中 b、p 和 d
作为描述基本语法的值。
? 要指定 requestparm 属性,请使用下列格式:$(requestparm=r default=d),其中 r 和 d 作为
描述基本语法的值。
? 要指定 requestattr 属性,请使用下列格式:$(requestattr=r default=d),其中 r 和 d 作为描述
基本语法的值。
替代 HTML 模板语法的示例如下:
<insert>
<img src=$(bean=productAds property=sale default=default.gif)>
</insert>
<insert>
<a href="http://www.myserver.com/map/showmap.cgi?country=$(requestparm=country default=usa)
&city$(requestparm=city default="Research Triangle Park")&email=
$(bean=userInfo property=email)>Show map of city</a>
</insert>

(3) <REPEAT>标记
<REPEAT>标记的语法为:
<repeat index=name start=starting_index end=ending_index>
</repeat>
其中:
= index:是用于标识该重复数据块的一个可选的名称。该值是分大小写的。
= Start:是用于该重复数据块的一个可选的开始索引值。缺省值为 0 。
= End:是用于该重复数据块的一个可选的结束索引值。最大值是 2,147,483,647。如果结束属性的值小于开始属性的值,则忽略结束属性。
下面的示例 1、2 和 3 显示了如何使用<REPEAT>标记。如果所有的索引属性拥有 300 个或更少的元素,则这些示例将产生相同的输出。如果拥有的元素多于 300 个,示例 1 和示例 2 将显示所有的元素,而示例 3 将只显示前 300 个元素。示例 1 用缺省开始和结束索引显示了隐式索引:使用最小索引属性数的 bean 限制了循环重复的次数。
<table>
<repeat>
<tr><td><insert bean=serviceLocationsQuery property=city></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=address></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=telephone></insert></tr></td>
</repeat>
</table>
示例 2 显示了索引、开始索引和结束索引:
<table>
<repeat index=myIndex start=0 end=2147483647>
<tr><td><insert bean=serviceLocationsQuery property=city(myIndex)></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=address(myIndex)></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=telephone(myIndex)></insert></tr></td>
</repeat>
</table>
示例 3 用隐式开始索引显示了显式索引和结束索引。虽然指定了索引属性,仍可对索引过的属性城市进行隐式索引,因为不需要(i)。
<table>
<repeat index=myIndex end=299>
<tr><td><insert bean=serviceLocationsQuery property=city></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=address(myIndex)></insert></tr></td>
<tr><td><insert bean=serviceLocationsQuery property=telephone(myIndex)></insert></tr></td>
</repeat>
</table>
可以嵌套<REPEAT>数据块。独立索引每个数据块。该能力对交叉两个 bean 上的交错属性或含有子属性的属性非常有用。在示例中,将两个<REPEAT>数据块嵌套,用以显示用户购物手推车上每一张压缩光盘上的歌曲列表。
<repeat index=cdindex>
<h1><insert bean=shoppingCart property=cds.title></insert></h1>
<table>
<repeat>
<tr><td><insert bean=shoppingCart property=cds(cdindex).playlist></insert>
</td></tr>
</table>
</repeat>
</repeat>
6.变量数据的 Java 表达式
当处理 JSP 文件时,要指定分解一个 Java 语言表达式,请使用 JSP 表达式标记 <%= 和 %>。该表达式被评估和转换成一个字符串,并加以显示。原语类型,如 int 和 float 都自动转换成字符串表示法。在该示例中,foo 是在 <SCRIPT> 中加以说明的 class-wide 变量,示例请见 Class-wide 变量和方法:
<p>翻译欢迎辞<%= foo %>.</p>
当获得 JSP 文件时,文本为:翻译欢迎辞 Hello。
5.4 JSP API
有两种接口支持 JSP 技术。这些 API 提供了一种将内容生成(业务逻辑)从内容演示(HTML 格式)中分离出来的方法。这种分离使 Servlet 能生成内容并将它(如在 Bean 中)存储在请求的上下文中。生成上下文的 Servlet 通过将请求的上下文传递至 JSP 文件来生成一个响应,该 JSP 文件包含 HTML 格式。<BEAN> 标记便提供了对业务逻辑的访问。支持 JSP 的接口有:
= com.sun.server.http.HttpServiceRequest:该类实现了 javax.servlet.http.HttpServletRequest 接口和用于设置根据名称定义的属性的方法 setAttribute() 。
= com.sun.server.http.HttpServiceResponse:该类实现了 javax.servlet.http.HttpServletResponse 接口,并添加了一个使 Servlet 能调用 JSP 文件和可选地传递上下文的 callPage() 方法。
1.callPage() 方法
用 callPage() 方法在 Servlet 中对 JSP 进行服务。所服务的页面(一个 JSP 文件)作为响应返回到浏览器中。调用 Servlet 还可以通过请求对象传递某些上下文。应该对所服务的页面标题进行编码,以将用于告诉浏览器不要对文件执行高速缓存的指令包含在内。callPage() 方法的语法如下:
public void callPage(String fileName, HttpServletRequest req) throws ServletException, IOException
其中:
= fileName:用于标识文件(该文件用于生成输出并表示内容)的 URL 名。如果文件名以斜杠(/)开头,则可以假设文件位置与文档根目录有关。如果文件名不是以斜杠开头,则可假设文件位置与当前调用的请求有关。callPage() 方法不支持调用文件扩展名为 .html 的页面。如果需要使用 callPage() 方法来调用 HTML 页面,则必须首先将 HTML 文件重命名成扩展名为 .jsp 的文件。
= Req:调用该方法的是 Servlet 的 HttpServletRequest 对象。最通常的是,将上下文作为 Bean,在请求对象的上下文中进行传递。
要使用 callPage() 方法,必须将响应对象造型成com.sun.server.http.HttpServiceResponse类型。
2.使用 setAttribute() 方法
用 setAttribute() 方法来将一个特性存储在请求的上下文中。语法是:public void setAttribute(String key, Object o),其中,key代表存储的特性名,而o表示用 key 来存储的上下文对象。要使用 setAttribute() 方法,必须将请求对象造型成com.sun.server.http.HttpServiceRequest类型。


关键词:Java

5.4 JSP API
有两种接口支持 JSP 技术。这些 API 提供了一种将内容生成(业务逻辑)从内容演示(HTML 格式)中分离出来的方法。这种分离使 Servlet 能生成内容并将它(如在 Bean 中)存储在请求的上下文中。生成上下文的 Servlet 通过将请求的上下文传递至 JSP 文件来生成一个响应,该 JSP 文件包含 HTML 格式。<BEAN> 标记便提供了对业务逻辑的访问。支持 JSP 的接口有:
= com.sun.server.http.HttpServiceRequest:该类实现了 javax.servlet.http.HttpServletRequest 接口和用于设置根据名称定义的属性的方法 setAttribute() 。
= com.sun.server.http.HttpServiceResponse:该类实现了 javax.servlet.http.HttpServletResponse 接口,并添加了一个使 Servlet 能调用 JSP 文件和可选地传递上下文的 callPage() 方法。
1.callPage() 方法
用 callPage() 方法在 Servlet 中对 JSP 进行服务。所服务的页面(一个 JSP 文件)作为响应返回到浏览器中。调用 Servlet 还可以通过请求对象传递某些上下文。应该对所服务的页面标题进行编码,以将用于告诉浏览器不要对文件执行高速缓存的指令包含在内。callPage() 方法的语法如下:
public void callPage(String fileName, HttpServletRequest req) throws ServletException, IOException
其中:
= fileName:用于标识文件(该文件用于生成输出并表示内容)的 URL 名。如果文件名以斜杠(/)开头,则可以假设文件位置与文档根目录有关。如果文件名不是以斜杠开头,则可假设文件位置与当前调用的请求有关。callPage() 方法不支持调用文件扩展名为 .html 的页面。如果需要使用 callPage() 方法来调用 HTML 页面,则必须首先将 HTML 文件重命名成扩展名为 .jsp 的文件。
= Req:调用该方法的是 Servlet 的 HttpServletRequest 对象。最通常的是,将上下文作为 Bean,在请求对象的上下文中进行传递。
要使用 callPage() 方法,必须将响应对象造型成com.sun.server.http.HttpServiceResponse类型。
2.使用 setAttribute() 方法
用 setAttribute() 方法来将一个特性存储在请求的上下文中。语法是:public void setAttribute(String key, Object o),其中,key代表存储的特性名,而o表示用 key 来存储的上下文对象。要使用 setAttribute() 方法,必须将请求对象造型成com.sun.server.http.HttpServiceRequest类型。

6.1 基本特性
WebSphere应用服务器使您能够为Servlet 的开发实现 “一次写成,各处使用”的目的。该产品包括一个基于 Java 的 Servlet 引擎,独立于 Web 服务器和它所基于的操作系统。WebSphere应用服务器提供了服务器插件的选项,与大多数流行的应用程序设计接口(API)兼容。所支持的 Web 服务器有:
l IBM HTTP 服务器
l Apache Server
l Domino
l Lotus Domino Go Webserver
l Netscape Enterprise Server
l Netscape FastTrack Server
l Microsoft Internet Information Server
除了 Servlet 引擎及插件外,WebSphere应用服务器还提供:
1. JavaSoft Java Servlet API 实现,以及这些 API 的扩展和附加。
2. 示例和文档,示例 Servlet 和 Web 站点应用程序演示了简单和高级技术。联机和可打印文档供您
快速入门,并帮助掌握服务器高级功能的使用演示基本类及其扩展的示例应用程序。
3. WebSphere应用服务器的管理器,使用图形界面,易于:
(1) 为装入本地和远程的 Servlet 设置选项
(2) 设置初始化参数
(3) 管理 Servlet
(4) 指定 Servlet 别名
(5) 创建 Servlet 链和过滤
(6) 启用轻量级目录访问协议(LDAP)目录支持
(7) 记录 Servlet 消息
(8) 启用 JVM 调试
(9) 监控 WebSphere应用服务器 使用的资源
(10) 监控已装入 Servlet、活动 Servlet 会话和 JDBC 连接
(11) 控错误、事件、异常情况和日志输出
(12) 创建转储和数据快照
(13) 动态地启用和禁用跟踪
4. 缓存和再使用与 JDBC-从属数据库连接的连接管理功能。当一个 Servlet 需要数据库连接时,它
可从可用连接的缓冲池获得,从而消除了为每个请求打开一个新连接的所需花费的系统开销。
5. 附加的 Java 类,遵循 JavaBeans 规范,允许程序员访问 JDBC-从属数据库。当隐藏使用关系数
据库的复杂度时,这些数据访问 Bean 可提供增强功能。它们可用于可视集成开发环境中。
6. JSP的动态页面内容支持。JSP 技术使您能够通过服务器端脚本生成动态 Web 页面。其结果是将
呈示逻辑(例如,定义 Web 站点结构和外观的 HTML 代码)从业务逻辑(例如,访问数据库以获得要显示在 Web 站点上的信息的 Java 编码信息)中分隔出来。灵活性方面,JSP 文件可包括任何直接插入的 Java 的组合:<SERVLET> 标记、NCSA 标记和 JavaBean。
7. 启用 LDAP(轻量级目录访问协议)支持的目录服务。
8. 用于集成WebSphere应用服务器和Web服务器(如Apache Server) 到Tivoli 管理环境(Tivoli
Management Environment)以获得分布式监控和操作的模块和命令行界面。Tivoli 模块并不与WebSphere应用服务器一起发行,请访问Web 站点(http://www.software.ibm.com/webservers/appserv/)以获得更多信息。
WebSphere应用服务器对JSP的支持是通过JSP处理器来实现的。在 Web 服务器上安装 WebSphere应用服务器时,Web 服务器的配置被设置成将对 JSP 文件(即文件扩展名为 .jsp)的 HTTP 请求传递至 WebSphere应用服务器。WebSphere应用服务器配置则被设置成将 JSP 文件传递至其 JSP 处理器(pageCompile)。
JSP 处理器对每一个 JSP 文件创建并编译 Servlet。该处理器还为每个 JSP 文件产生两个文件:
(1) java 文件:包含可用于 Servlet 的 Java 语言代码;
(2) class 文件:编译过的 Servlet。
JSP 处理器把 .java 和 .class 文件放在目录 servletspagecompileJSP_file_path 下,其中 JSP_file_path 是 JSP 源文件所在的目录路径。例如,若JSP 文件在WebSphereAppServersamplesWeb
Bank 目录下,则.java 和.class 文件就在WebSphereAppServerservletspagecompileWebSphereApp Server
samplesWebBank 目录下。.java 和 .class 文件的文件名相同。处理器使用了命名约定,该命名约定包括将下划线字符和后缀添加到 JSP 文件名中。例如,如果 JSP 文件名是 login.jsp,则生成的文件为 _login_xjsp.java 和 _login_xjsp.class。
如同所有的 Servlet,由 JSP 文件生成的 Servlet 是 javax.servlet.http.HttpServlet的子类或子孙类。如果 Servlet 类是软件包的一部分,则 Servlet Java 代码包含了用于一些必需类和软件包语句的导入语句。如果 JSP 文件包含 JSP 语法(例如指令和 scriptlets),则 JSP 处理器会将 JSP 语法转换成等价的 Java 代码。如果 JSP 文件包含 HTML 标记,则处理器添加 Java 代码,以使 Servlet 能一个接一个字符地输出 HTML。  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值