Page 1
3.3 核心商务逻辑的实现及其技术基础
?3.3.1 电子商务应用系统实现概述
?3.3.2 传统程序语言与公共网关接口 CGI
?3.3.3 基于 ASP与 Activex的系统开发
?3.3.4 Java语言及其技术分析
?3.3.5 PHP开发技术分析
Page 2
3.3.1 电子商务应用系统实现概述
? 电子商务系统与电子商务应用系统的实现
? 电子商务系统的应用是基于 Web的应用, 是一种分布式的
结构, 所以开发工作可以分解成为客户端和服务器端的应
用开发两部分 。
? 由于电子商务系统的应用程序既包括编译型的程序, 也包
括解释型的脚本程序 ( 例如 Java Applet,Java Script、
VBScript等 ), 而这些脚本程序基本上都是嵌入到 HTML
页面中的, 所以, 应用程序的编写就不仅局限于编码, 而
且也包括 HTML页面的编写 。
? 借助于组件技术搭建应用日益成为未来电子商务应用开发
与集成的主流方向 。
Page 3
开发语言的选择标准
?平台无关性
?与其他部件的结合能力
?软件的可重用
?与数据库的连接能力
语言使用的简易性
Page 4
3.3.2 传统程序语言与公共网关接口 CGI
?1,CGI工作原理
?2、用 C语言编制的 CGI程序
?3,CGI程序的输出处理
?4,CGI程序的输入
Page 5
CGI工作原理
Web Brower WWW Server
Database
C G I 程序
用户提交数据
服务器所接收的数据
处理
结果
C G I 程序
处理结果
包含处理结果的H T M L 文档
数据库
操作请求
Page 6
用 C语言编制的 CGI程序
void main()
{
printf( "Content-type, text/html\n\n");
printf( "<html>\n");
printf( "<title>用 C编制 CGI程序 <title>\n ");
printf( "<body>\n ");
printf( "<p>第一个 CGI程序, 这是用 C编写的 </p>\n ");
printf( "</body></html>\n ");
}
Page 7
CGI程序的输出处理
Content-type, text/html
<html>
<title>用 C编制 CGI程序 <title>
<body>
<p>第一个 CGI程序, 这是用 C编写的 </p>
</body></html>
输出类型说明
和 HTML正文
Page 8
CGI程序的输入 --GET
? 通常情况下,CGI程序的输入是由客户端的窗体提交而产生的。窗体的
提交有 POST和 GET两种方式。这两种方式提交资料的格式是不同的。
? 在 HTML语法中, 窗体提交时的默认方式为 GET,当以此种方式交时, 用
户所提交的资料将以参数形式附在 CGI程序名的后面, 例如一个登录验
证的 HTML窗体中, 当我们填好用户名和密码后点击, 提交, 按钮, 则
地址栏显示如下:
? http://202.112.149.251/login.exe?name=bluegenius&password=myp
ass
? 当浏览器端以 GET方提交资料时, 在服务器端将自动生成一个环境变量
QUERY_STRING,该参数记录的就是浏览器提交的资料, 即,?, 后的
部分, 将该环境变量的值打印出来是这样的:
? name=bluegenius&password=mypass
Page 9
CGI程序的输入 --POST
? 当窗体采用 POST方式交资料时, 其提交的资料则被加入到服务器端的标准输入 stdin中,
其参数的形式与 GET基本相同, 同时在服务器端生成一个环境变量,CONTENT_LENGTH,该
变量说明了浏览器提交的参数总长度, 以便读入和分析参数时的控制 。 上例中, 当我们
采用 POST方式交时, 将 stdin中的内容打印出来, 则为如下形式:
? name=bluegenius&password=mypass
? 可见, 其参数的形式和意义与 GET方式全相同 。
? 无论窗体是以何种方式提交,所得到的参数串是完全相同的,下面要做的就是如何将该
参数串拆解开,以获得各输入项的值。
? 基本思路为:主程序首先调用 CgiInit将用户提交的参数串读入到自定义缓冲区 buff中,
然后调用 ParsePara将各参数拆解出来 。 其余的几个则为辅助函数, 主要用于将参数中的
汉字转换为正确的形式 。 因为在窗体提交过程中, 无论采用何种提交方式, 汉字都是被
转换成为一个个的以, %”开头的 16进制码, 如 %BC%4F等, 每 2个 16进制码表示一个汉字 。
当我们采用 GET方式提交带有汉字的参数时, 会在浏览器的地址栏中发现这些 16进制码而
不会找到一个汉字, 就是这个原因 。
? 将用户提交的参数拆解开后, 就可以分析并处理这些信息, 其过程与方法和普通的 C程序
是完全相同的, 最后 CGI程序输出处理结果, 这就是一个 CGI程序完整的处理过程了 。
Page 10
3.3.3 基于 ASP与 Activex的系统开发
? 是微软推出的动态 Web设计技术,它能够将代码直接嵌入 HTML,是一种
用于 WWW服务的服务器端脚本环境,也是一种在站点的 Web服务器上解
释脚本,可产生并执行动态、交互式、高效率的站点服务器应用程序
。利用它,可以很容易地把 HTML标记、文本、脚本命令及 ActiveX组件
混合在一起构成 ASP页,以此来生成动态网页,创建交互式的 Web站点
,实现对 Web数据库的访问。
? 由于 ASP在服务器端运行,运行结果以 HTML主页形式返回用户浏览器,
也就是说,用户在客户端浏览器看到的仅仅是 ASP页的执行结果所生成
的页,而 ASP页本身的内容用户在客户端浏览器是看不到的,因而 ASP
源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的
脚本环境,用户可自行增加 ActiveX组件来扩充其功能,拓展应用范围
。
Page 11
示例
<%@ LANGUAGE=JScript%>
<html>
<head> </head>
<body>
<%for(i=0;i<7;i++)
{ %>
<p><font size = <% = i%>>
这是一个测试程序! </font></p>
<%}%>
</body></html>
<html>
<head>
</head><body>
<p><font size = 0>
这是一个测试程序 ! </font></p>
<p><font size = 1>
这是一个测试程序 ! </font></p>
<p><font size = 2>
这是一个测试程序 ! </font></p>
<p><font size = 3>
这是一个测试程序 ! </font></p>
<p><font size = 4>
这是一个测试程序 ! </font></p>
</body></html>
Page 12
ASP编程的基本规则
? ASP编程首先要确定其使用的脚本语言 。 ASP的编程可采用各种脚本语
言, 只要服务器端安装了相应的脚本引擎即可 。
? 需要注意的是,ASP本身有一定的语法规则, 也可算作一种编程语言,
而同时所使用的脚本语言自身还有一套语法, 因此在编制 ASP程序的过
程中, 必须同时遵守这两方面的语法规定才行, 缺一不可 。
? 一个 ASP文件实际包含了两个部分,HTML部分和 ASP脚本命令部分 。 其
中, HTML部分与普通的 HTML文件的语法规则是相同的;而 ASP脚本则利
用 <%和 %>两种标记嵌入到 HTML部分之中, 在已有的 HTML基础上对其输
出实现控制 。
Page 13
ASP的内部对象
对 象 功 能
Request 从客户端取得信息
Response 向客户端输出信息
Server 提供一些 Web 服务器工具
Session 记录和管理与用户的连接与会话过程
Application 在一个 ASP-A pplicat ion 中让不同的客户端共享信息
ObjectConte xt 配合微软的交易服务器 ( MTS )进行分布式事务处理
Page 14
( 1) Request对象
? 可以使用 Request对象访问任何基于 HTTP请求传递的信息, 包括从 HTML
表格用 POST方法或 GET方法传递的参数, Cookie,用户认证及服务器端
变量等 。 同时, Request对象还能够访问客户端发送给服务器的二进制
数据 。 Request对象主要有如下几种最常见的应用:
? 获取由 POST方法提交的表单的各元素值
– Request.Form(element)[(index)|.Count]
? 获取 QueryString中各变量的值
– Request.QueryString(variable)[(index)|.Count]
? 获取 Cookie中变量的值
– Request.Cookies(cookie)[(key)|.attribute]
? 获取服务器端环境变量值
– Request.ServerVariables ( Name )
Page 15
示例
?编制页面,用户提交信息
? 该表单的提交项定义如下:
? <form method="POST" action="ShowInfo.asp">
?处理后,回显给用户
Page 16
为处理表单数据的 ASP文件,ShowInfo.asp
? <%@ Language = JScript%>
? <html><head>
? <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
? <title>New Page 1</title>
? </head>
? <body>
? <p><font color="#FF0000">您提交了如下信息,<br></font><br>
? <font color="#0000FF">
? 姓名,<%=Request.Form("Name")%><br> 性别,<%=Request.Form("Sex")%><br>
? 籍贯,<%=Request.Form("HomeTown")%><br></font><br>
? <% n = Request.Form("Hobby").Count
? if(n > 0) {%>
? <font color=“#0000FF”> 您的爱好共有 <%=n%>项:
? <%for(;n>0;n--){%>
? <%=Request.Form("Hobby")(n)%> <% }
? } else%>
? 您没有什么特别的爱好。 </font></p>
? </body> </html>
Page 17
( 2) Response对象
? 与 Request对象正相反, Response对象是用来控制发送给用户的信息,
包括直接发送信息给浏览器, 重定向浏览器到另一个 URL或设置 Cookie
的值等 。
? 设置 Cookie的值
– Response.Cookies(cookie)[(key)|.attribute]=value
? 设置 Web页面保留在客户端浏览器缓冲中的时间
?① Response,Expires = value
?② Response,ExpiresAbsolute = value
– <% Response.ExpiresAbsolute=#Dec 31,2000 9:30:30# %>
? 向浏览器输出信息
? Response.Write(String)
? 重新定向 URL
– Response.Redirect( URL)
? Response.Redirect(, http://bluegenius.dhs.org”)
Page 18
( 3) Application对象
? 下面是一个计数器程序, 也是一个比较典型的 Applicatio对象的应用方法 。
? <%@ LANGUAGE=JavaScript%>
? <html><head>
? <title>计数器示例 </title>
? </head>
? <body>
? <% Application.Lock
? //若未设定初值,则将其设为 0
? if ( isNaN(parseInt(Application("Num"))))
? Application("Num") = 0;
? Application("Num") = Application("Num") + 1
? Application.Unlock
? %>
? 您是第 <% = Application("Num")%> 位来客 !
? </body></html>
Page 19
( 4) Session 对象
? Session 对象存储特定的用户会话所需的信息 。 当用户在应用程序的页之间跳转时, 存
储在 Session 对象中的变量不会清除, 而用户在应用程序中访问页面时, 这些变量始终
存在 。
? 要注意的是, 会话状态仅在支持 Cookie 的浏览器中保留, 如果客户关闭了 Cookie 选
项, Session 也就不能发挥作用了 。
? 例如下面例子:
? <%Session("Name") = "bluegenius"
? Session(“Password”) =,12345”%>
? 在 Session中建立了 Name和 Password两个变量,在以后由其直接或间接链接而出的网页中
(注意:必须是直接或间接链接而出的一组网页才构成一组对话)就可通过如下语句获
得用户名和密码:
? <%Name = Session("Name")
? Password = Session("Password")%>
? 之后, 就可以用这个用户名和密码进行身份校验了 。
Page 20
3.3.4 Java语言及其技术分析
? Java是 SUN公司与 1990年开始,为消费者电子市场,如电视机、电话
、烤面包机等家用电器的控制和通讯,而设计的软件。设计小组最开
始使用 C++,但是它在在消费者使用的各种硬件架构及对稳定的要求上
却产生了问题,于是这个小组开发了一种新的语言,并为它命名 Java
。这个名称并不是某个简称,而是指设计人员们所喜欢的又热又香醇
的咖啡,更重要的是,它包含了激发这个技术的要素:活波、动画、
速度、互动以及其他会选择 Java的可能因素。而今天,它已经成为
Internet上的配送工具。
Page 21
( 1) Java是编程语言
? 特点:简单可靠, 是面向对象, 与平台无关的, 具有可移植性, 安全性好, 并且支持多
线程, 具有很高的性能;其次, 它最大限度地利用了网络, Java小应用程序可在网络上
传输而不受计算机和操作系统的限制 。
? Java既可以被编译, 也可以被解释 。 通过编译器, 可以把 Java程序翻译成一种中间代码
( 字节码 ) ——可以被 Java解释器解释的独立于平台的代码 。 通过解释器, 每条 Java字
节指令被分析, 然后在计算机上运行 。
JAVA
源程序
JAVA
编译器
JAVA
字节码
通过网络或
本地文件系统
传送字节码
类装载器
字节码校验器 JAVA类库
JAVA
解释器
及时
编译器
运行时系统
操作系统
硬件
JAVA
虚拟机
编译时 运行时
Page 22
( 2) Java是平台
? 平台是程序运行的硬件或软件环境 。 Java平台与大多数其他平台的不同之处在于, 它是
运行于其他硬件平台的纯软件平台, 而大多数其他平台是硬件和操作系统的结合 。
? Java平台由 Java虚拟机 ( Java Virtual Machine,简称 JVM) 和 Java应用程序接口 (
Java API) 两部分组成 。
? JVM是 Java平台的基础 。 JVM发挥抽象计算机的作用, 在 Java应用程序和本机系统之间建
立了一个绝缘层, 屏蔽掉了硬件和操作系统的不同, 使 Java程序, 编写一次, 任意运行
” 。 可以把 Java字节码看作运行在 JVM上的计算机代码指令 。 每种 Java解释器, 不管是
Java开发工具还是可以运行 Java小应用程序的 Web浏览器, 都是 JVM的实例 。
? Java API由多种 Java包 ( package) 组成, 它们提供了很多有用的功能 。 如 java.awt是
窗口工具包, 可以用来创建图形用户界面 ( GUI) ; java.io用来实现输入/输出处理;
java.sql即 JDBC包, 包含了实现数据库连接的一系列类和接口 。
? 图 6- 2描述了一个运行在 Java平台上的 Java程序, 如应用程序 ( Application) 或小应用
程序 ( Applet) 。 图中, Java API和 JVM把 Java程序从硬件依赖中分离出来 。
Java 程序
Java API
Java 虚拟机
基于硬件的平台
Java平台
Page 23
( 3) Java应用程序
? 这类程序与大多数面向对象语言所编写的程序相同, 独立运行于本地主机 。 步骤:
? 创建一个 Java源文件:使用记事本, 创建一个包含以下内容的命名为
HelloWorldApp.java的 Java源文件:
? 对一个 Java应用程序来说, main( ) 方法是必须的, 而且必须按照上述格式来定义 。
Java解释器在没有生成任何实例的情况下, 以 main( ) 方法作为入口执行程序 。
? 使用 Java编译器编译源文件:
? DOS shell(windows 95/ NT);
? javac HelloWorldApp.java
? 如果编译成功, 编译器便产生一个与 Java源文件 HelloWorldApp.java) 在同一个目录下
的名为 HelloWorldApp.class的文件 。 这个类文件包含 Java字节码, 是可以被 Java运行系
统解释的独立于平台的代码 。 如果编译失败, 请查看键人的文件名是否正确, 尤其是大
小写 。
? 在 Java解释器中运行这个 Java应用程序:
? DOS shell(windows 95/ NT);
? java HelloWorldApp
? 或 jview HelloWorldApp
? 可以看到屏幕上显示, Hello World!, 。
? javac和 java分别是 JDK提供的 Java编译器和解释器 。 JDK( Java Development Kit) 是
Sun公司推出的 Java程序开发工具, 可以从 http:// www.javasoft.com下载 。 JDK中的部
件都在 DOS状态下以命令形式运行 。 jview是 Windows自带的 Java解释器 。
// This class simply displays”Hello World” to the
// standard output.
class HelloWorldAPP{
Public static void main(String[],args){
System.out.println(, Hello World!, ) ;
}
}
Page 24
( 4) Java小应用程序
?Java小应用程序是动态, 安全, 跨平台的网络应用
程序, Java语言迅速流行的重要原因也正在于此 。
Java Applet不能独立运行, 需要嵌入在 HTML页面
中, 通过浏览页面来执行 。
Page 25
3、构建多层应用软件体系结构的 Java技术
? 在构建多层应用软件体系结构时, 选用 Java平台是一个非常好的选择
,而实现多层结构需要使用的关键技术和运行环境主要有:
? 客户层,Java Applet编程技术, 运行环境为支持 Java的浏览器或可以
直接运行 Java程序的计算机 ( 例如网络计算机 ) 。
? 顶端 Web服务层,Java Servlet编程技术, JSP技术, RMI技术和 Java
Bean编程技术, 运行环境为使用 Java语言编写的 Web服务器 ( 起代理
服务器作用 ) 。
? 应用服务层,Java Servlet编程技术, RMI技术, JDBC技术和 Java
Bean编程技术, 运行环境为使用 Java语言编写的 Web服务器 。
Page 26
J2EE标准
客 户层 客 户 机
Web层
J2EE服 务 器
商 务层
EIS层 DB服 务 器
应 用程序 动态 HTML
网 页
EJBEJB
JSP页
DB DB
Page 27
( 1) JavaBeans
? JavaBeans描述了基于 Java的软件组件模型, JavaBeans 规范将, 组件软件, 的概念引入
到 Java 编程的领域 。 组件是自含的, 可重用的软件单元;而 JavaBeans 组件, 则可以
使用可视的应用程序开发工具, 可视地将它们编写到 Java 程序中 。 JavaBeans 规范为
Java 开发人员提供了一种, 组件化, 其 Java 类的方法 。
? 如果软件重用是一个好主意, 那么是否应该让每一个 Java 类都成为 Java bean 呢? 如
果 Java 类满足某些准则, 它们就适于充当 bean 的角色:如果软件模块要既能够可视地
操作, 又能够定制以达到某些效果, 则这种软件模块就可能适于做成一个 JavaBean。
? 是否打算让它可重用? 或者, 它会是可重用的吗?
? 是否希望将它与其他可重用的 Java 组件一起使用?
? 是否预计会在 IDE 工具中使用它?
? 如果上述问题的答案都是肯定的, 则它应该作为 JavaBean 来开发 。
? JavaBean 概念是为了在 Java 编程环境中支持可重用的组件, 它是一种一般性的设
计方法, 适用于客户机或服务器机器上运行的 Java 程序 。 由于对可视的构建器工具的
强调, 也由于许多 Java bean 都是图形用户界面 (GUI) 组件, 所以 JavaBean 组件可
能被视为一种客户端技术 。 但是, 并不要求 Java bean 都是可视的, 并且它们也可以用
于服务器环境中 。
?
Page 28
( 2) EJB(Enterprise java bean)
? 是 JAVA中的商业应用组件技术, 是分布式应用系统中的组件 。
? EJB组件模型在逻辑上扩展了 JavaBeans组件模型, 以支持服务器端组件 。 服务器端组件
是可重用的, 预先包装好的, 准备在应用服务器上运行的应用程序功能片段 。 它们可以
和其他组件组合在一起创建一个符合要求的应用系统 。
? 与 JavaBeans组件有很多相似的之处, 但是 JavaBeans组件一般粒度更大而且功能更完全
,而且 EJB组件不能像 JavaBeans组件那样在 Java集成开发环境中使用 。 相反, 通过使用
由遵循 EJB的 Java应用服务器提供的工具, 它们可以在部署阶段被装配和定制 。
? EJB模型定义了 EJB组件与 EJB容器之间相互关系 。 EJB组件不需要使用任何特定的容器系
统 。 提供商可以将任何应用服务器端调节为支持 EJB技术, 只需加入规范定义的一些服务
的支持即可 。 这些服务定义了 EJB组件和容器之间的, 契约,, 有效地实现了一个可移植
层 。 任何 EB组件可以在任何支持 EJB契约的应用服务器上运行 。 一个 EJB组件可被部署到
任何一个 EJB服务器, 即使不同的服务器通过不同的方式实现它们的服务 。 EJB模型使用
EJB容器与 EJB组件之间的一组标准契约确保了 EJB组件在不同 EJB服务器上的可移植性 。
每一个 EJB组件都被要求实现一组特定接口, 允许 EJB容器管理和控制该对象 。 EJB容器也
被要求在特定的执行阶段调用此接口 。
Page 29
EJB的分布式计算结构中的六个角色
? 六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循 Sun公司提
供的 EJB规范,以保证彼此之间的兼容性。
– EJB组件开发者,
– 应用组合者,
– 部署者,
– EJB 服务器提供者,
– EJB 容器提供者,
– 系统管理员,
Page 30
( 3) JDBC
? JAVA语言作为一种具有健壮性, 易使用, 易于理解, 能够自动从网络
下载的语言, 具有开发数据库应用的极好的语言基础 。 但除此以外,
Java还需要提供一种能够与各种数据库系统交互的能力, JDBC( Java
DataBase Connectivity) 就提供了这样一种能力 。
? JDBC是一个能够执行 SQL语句的 Java API,它包含一组由 Java语言编
写的类和接口, 使得程序员能够使用纯 Java开发数据库应用 。 JDBC标
准基于 X/ OPEN的 SQL调用级接口, 它定义了一个友好的 Java界面来与
X/OPEN的 SQL调用级接口中定义的基本抽象层和基本概念层来进行连
接 。
Page 31
(4)Servlet
? Servlet是 Java技术对 CGI编程的回答 。 Servlet程序在服务器端运行,
以接收来自 Web浏览器的 HTTP请求, 动态地生成响应 ( 可能需要查询数
据库来完成这种请求 ), 然后发送包含 HTML或 XML文档的响应到浏览器
。
? Servlet 是一组运行在服务器端的软件 。 Sun公司将其取名为 Servlet
,可能是与 Applet有关 。 Applet是运行在 Web浏览器端的 JAVA程序,
Servlet是运行在 Web服务器端的 JAVA程序 。
? 与传统的 CGI和许多其他类似 CGI的技术相比, Java Servlet具有更高
的效率, 更容易使用, 功能更强大, 具有更好的可移植性, 更节省投
资 ( 更重要的是, Servlet程序员收入要比 Perl程序员高 ) 。
Page 32
Servlets 特点
? 高效 。 在传统的 CGI中, 每个请求都要启动一个新的进程, 如果 CGI程序本身的执行时间
较短, 启动进程所需要的开销很可能反而超过实际执行时间 。 而在 Servlet中, 每个请求
由一个轻量级的 Java线程处理 ( 而不是重量级的操作系统进程 ) 。 在传统 CGI中, 如果有
N个并发的对同一 CGI程序的请求, 则该 CGI程序的代码在内存中重复装载了 N次;而对于
Servlet,处理请求的是 N个线程, 只需要一份 Servlet类代码 。 在性能优化方面,
Servlet也比 CGI有着更多的选择, 比如缓冲以前的计算结果, 保持数据库连接的活动,
等等 。
? 方便 。 Servlet提供了大量的实用工具例程, 例如自动地解析和解码 HTML表单数据, 读取
和设置 HTTP头, 处理 Cookie,跟踪会话状态等 。
? 功能强大 。 在 Servlet中, 许多使用传统 CGI程序很难完成的任务都可以轻松地完成 。 例
如, Servlet能够直接和 Web服务器交互, 而普通的 CGI程序不能 。 Servlet还能够在各个
程序之间共享数据, 使得数据库连接池之类的功能很容易实现 。
? 可移植性好 。 Servlet用 Java编写, Servlet API具有完善的标准 。 因此, 为 I-Planet
Enterprise Server写的 Servlet无需任何实质上的改动即可移植到 Apache,Microsoft
IIS或者 WebStar。 几乎所有的主流服务器都直接或通过插件支持 Servlet。
Page 33
( 5) JSP
? 成为快速建立跨平台的动态网站的首选方案 。
? 1.将内容的生成和显示进行分离
? 2.可重用组件
? 3.采用标识,
? 4.适应平台
? 5.数据库连接:
? 6,所有的 JSP页面都被编译成为 Java Servlets,好处, 包括健壮的存储管理
和安全性 。 作为 Java平台的一部分, JSP拥有 Java编程语言, 一次编写, 各处
运行, 的特点 。
Page 34
4、两种体系结构的比较和选择
– 自从引入 JSP技术, 使用 Java构建的 Web应用服务器
端出现了两种架构, 第一种是只使用 JSP,第二种是同
时使用 JSPs和 Servlets,以下称之为模型一和模型二
,它们分别有各自的优缺点 。 近来模型二风行, 不仅
在网络中有很高的占有率, 而且在商业杂志中也备受
推崇 。 实际上, 很多开发者错误的认为这种架构已经
取代了模型一并且是使用 JSPs的正确方法 。 正确的使
用 JSPs的方法取决于你目前项目的实际需求, 而不是
追赶潮流 。 在这篇文章中, 我将描述这两种架构, 权
衡利弊, 告诉你一些基本的准则来帮助你决定哪一种
技术更适合你 。
Page 35
( 1)基于 JSP的模型结构
浏览器 jsp文件 Bean DB
Page 36
( 2) MVC使用 JSPs和 Servlets
Servlet
JSP文件
DBJava Bean
Page 37
基于 MVC模型的应用系统开发的组织
视图 控制器 模型 应 用
内容 页 面内容和布局 应 用流程 商 业逻辑 运行 环 境
角色 页 面制作者 应 用 组 装者 组 件提供者 WEB管理 员
部件 HTML,JSP,Servlets JavaBeans,配置数据
XML,Applets JavaBeans,XML EJB 站点使用分析
工具 WebSphere WebSphere Studio,VAJAVA ApplicationServer
培 训 Studio Studio IBM Connectors Performance Pack
SiteAnalysisTools
Page 38
( 3)模型的比较
? 对于 Web的开发者和设计者来说, 直接使用 JSP是很直观的, 但随着代码的增多会使 JSP页面负重
不堪, 而且调试困难 。 使用 Servlet控制器, 大多数的商业逻辑在从 JavaBeans传给 JSP 之前就已
经调试通过了 。
? 很有用的原则和概念来帮助选择:这两种架构的最明显的区别就是模型一是以, 页面为中心 "的
,而模型二是以 "程序为中心 "的 。 如果你正在开发一个典型的 Web应用, 只是页面之间的链接,
那模型一是比较适合的 。 但如果每个链接或按钮背后需要大量的处理后才能决定下一步要显示什
么, 那 Servlet/JSP MVC是比较适合的 。
? 另一种方法是看你的应用是面向, 请求, 的还是面向, 响应, 的 。 Servlets是面向, 请求, 的,
JSPs则更加是面向, 响应, 的, 因为 JSP页面将 HTML的响应发送给浏览器 。 如果你的 HTML代码要
大大多于 Java( 或者说只有非常少的逻辑来决定要显示给用户什么 ), 那么模型一就更加适合 。
? 有一个小技巧就是观察请求与响应之间的映射关系, 如果对于每一个的请求, 只有一个响应, 那
么使用 Servlet就意义不大 。 Sun的 J2EE蓝本中是这样描述 Servlet控制器的:, 基于用户的请求
和模型命令的输出, 控制器选择一个视图来作为响应的一部分, 。 如果请求和响应是一对一的,
那么就没什么必要使用控制器 。
? 另一方面, 如果每个请求会导致比较复杂的逻辑运算, 并且可能返回的视图也不相同, 那么使用
Servlet来做出决定和重定向视图就比较理想 。 如果你的应用需要支持不同的显示格式, 例如在
同一个通道中使用 HTML和 XML,那这一点就尤其重要了 。 Servlet能包含逻辑, 来决定客户端是什
么, 基于这一点来返回不同的文档格式 。
? 在做出决定时, 还应当考虑到开发者的技能水平 。 举例来说, 如果应用系统主要是由网
? 最后, 记住模型一和模型二是不能并存的 。
Page 39
3.3.3 PHP与 Perl
Page 40
1,PHP
? PHP动态网站开发技术与 ASP相似, 也是一种嵌入 HTML文档的服务器端脚本语言 。 其语法
大部分与 C,Java,Perl等语言相似, 并形成了自己的独有风格, 利用该语言 Web程序员
可以快速地开发出动态网页 。 PHP是 Personal Home Page的缩写, 于 1994年由 Rasmus
Lerdorf创造, 原本用途只是为知道他自己个人置于 Internet上的履历表曾被谁浏览过 。
后来由于其轻巧, 免费, 多平台等特性而迅速流行, 1997年开始开发的第三版被称之为
PHP3。 PHP广泛流行的主要原因在于其多平台能力和对数据库的广泛支持, 此外也有些其
他的独到之处 。
? ( 1) 免费, 轻巧快速, 真正跨平台 。
? 要运行 PHP, 通 常 使 用 Linux 作 为 操 作 系 统, Apache 作为 Web 服务器 。
Linux+Apache+PHP3+MySQL已经成为中小型网站最为经济的选择, 无论是性能还是安全方
面, 都要比微软的 ASP好一些 。 当然在其他操作系统上也同样可以运行, 这是因为得益于
其开放的源代码, PHP是一种跨平台的软件 。 不过, 如果不使用 Apache服务器, 那么 PHP
就只能以 CGI的方式运行, 这样就不能利用将 PHP编译进 Apache带来的性能优势 。
Page 41
( 2) 语法与 C及 Perl相近
? PHP是一个在服务器端脚本语言,其目的则为开发动态式的网页并可与数据库连结,具备
CGI及类似 JavaScript在 Client端的功能。 PHP的语法主要借鉴于 C语言,也部分参考了
JAVA和 Perl语言。与 ASP类似,它是一种嵌入式语言,即在 HTML中嵌入 PHP语法,如图中
所示的三种方法:
? PHP和一般的解释性语言一样, 不需要事先定义变量 。 如果试着使用一个没有赋过值的变
量, 那么返回的值是空字符串 。 对一个变量赋值则也就同时分配了这个变量的内存 。 PHP
的变量名前面必须有一个 $ 号, 这也是很多脚本语言的惯例了 。 PHP的变量类型可以自动
转换, 如果需要强制转换, 做法和 C的一样 。 它有 Integer,Double,String三种简单类
型 。 PHP3的变量作用域规定类似于 C,即缺省认为主程序中的变量是全局变量, 而函
数中的变量都是局部变量, 即使有同名的全局变量也不使用 。 PHP与其他跨平台语言类似
,也有正规表达式功能, PHP3的正规表达式功能当然远远比不上 Perl,但还是足够用的
。
? 当从 www,php3,net中下载了最新版本的 PHP并安装配置完毕之后, 就可以使用编辑器或
网页制作软件来编写 PHP代码了 。 如果你能使用 C或 Perl进行编程, 就会发现 PHP编程并不
复杂, C简单, 比 Perl易懂 。
<?echo(“这是 PHP语言的嵌入范例 \n”);?>
<?php echo(“这是 PHP语言的嵌入范例 \n”);?>
<script language =,php”>
echo(“这是 PHP语言的嵌入范例 \n”);
</script>
Page 42
( 3) 广泛的数据库支持能力
? PHP最强大, 也最有代表性的特点是它的数据层, 它可以支援多种数据库, 几乎含盖了各
种常见的数据库, 包括常用的 Oracle,mSQL,dBase,Sybase,Informix,MySQL等等,
并且使编写基于数据库的网页变得非常简单 。
? 同数据库相关的页面, 在服务器端以 PHP脚本的方式编写 。 实现过程如图 5,8所示:
? 从图可以看出:
? 第 1步:客户向 Web服务器发出请求 。
? 第 2步,Apache服务器分析客户的请求, 若为 PHP文件, 则将其交给 PHP处理程序进行处理
? 第 3步,Filename,php3是一个 PHP脚本, 包含了许多命令, 其中包括打开并连接数据库
,从数据库中找到所要数据的命令 。 所有同数据库相关的操作, 都由 PHP来完成 。 PHP可
以很好地完成同数据库的交互 。
? 第 4步,PHP从数据库中取得数据后, 按照 FIlename,php3文件的要求, 进行格式转换,
也即将文件内容转化为 HTML格式 。
? 第 5步:将 HTML格式的文件交给 Apache服务器 。
? 第 6步,Apache服务器再将其送给客户 。
客户
浏览器
PHP3
服务
Apache
服务器
1.客户请求 2.脚本交 PHP3
3.执行数据查询
6.页面返回 5.返回 HTML4.查询返回
MySQL
图 PHP实现过程
Page 43
示例
.,,,,
<? Mysql-connect (―localhost‖,‖webmaster‖,‖‖);
$query = ―SELECT id,name FROM customer‖;
$result = mysql-db-query(―test‖,$query);
if ($result){
echo ―found these entries in the database,<ul>‖;
while ($r= mysql-fetch-array($result)) {
$id = $r[―id‖];
$name = $r[―name‖];
echo ―<li> $id,$name‖;}
echo ―</ul>‖;
} else {
echo ―No data.‖}
mysql-free-result($result);
>,,,,
Page 44
2,Perl简介
? Perl(Practical Extraction and Reporting Language)是一个高级程序语言, 由 Larry
Wall和其他许多人所写, 融合了许多语言的特性 。 它是由 C语言, sed,awk,UNIX
shell 和至少十几种其他的工具和语言所演化而来 。
? Perl对档案和文字等有很强的处理, 变换能力, 因此有关快速原型设计, 系统工具, 系
统管理, 数据库处理, 图像程序设计, 网络连接, WWW程序设计等工作, 都能用 Perl完成
。
? Perl的设计目标是帮助 UNIX用户完成一些常见的任务, 这些任务对于 shell来说过于沉重
或对移植性要求过于严格 。
? Perl是按 GNU Public License的形式分发的, 其实质是免费的, 原先运行于 UNIX和类
UNIX系统, 现在已可以方便地在 OS/2,Windows 9x,Windows/NT等系统下运行 。
? Perl是解释运行的, 一般 Perl程序的第一行需注明自己是一个 Perl程序而不是 shell程序
,所以一般将下面一行语句:
? #! /usr/bin/perl
? 作为文件的第一行 。
Page 45
3.3.4 分析比较
? 传统的高级开发语言 C/C++等, 虽然不是专门为电子商务系统开发而设
计的, 但是其通用性比较好, 基本上所有的应用服务都可以用传统的
语言来开发, 目前的商品化软件包 ( 如数据库, 中间件产品等 ) 一般
都提供传统高级语言的 API接口, 特别是在解决电子商务系统与其他应
用互操作等问题时, 传统语言还是有一定优势的 。 需要指出的是, 传
统语言与操作系统的关系比较紧密, 跨平台能力较弱, 因此目前更多
的应用使用 Java等新的开发语言 。
? ( 1) 简介
Page 46
技术特点
( ASP:
? 使用 VBScript, JScript等简单易懂的脚本语言, 结合 HTML代码, 即可快速地完成网站
的应用程序 。
? 无须 compile编译, 容易编写, 可在服务器端直接执行 。
? 使用普通的文本编辑器, 如 Windows的记事本, 即可进行编辑设计 。
? 与浏览器无关,用户端只要使用可执行 HTML码的浏览器, 脚本语言 (VBScript,
Jscript)均在 WEB服务器端执行, 用户端的浏览器不需要能够执行这些脚本语言 。
? ActiveX Server Components(ActiveX 服务器元件 )具有无限可扩充性 。 可以使用
Visual Basic, Java, Visual C++, COBOL等编程语言来编写你所需要的 ActiveX
Server Component 。
? PHP:
? 数据库连接,PHP可以编译成具有与许多数据库相连接的函数 。 PHP与 MySQL是现在绝佳的
组合 。 你还可以自己编写外围的函数去间接存取数据库 。 通过这样的途径当你更换使用
的数据库时, 可以轻松地更改编码以适应这样的变化 。 PHPLIB就是最常用的可以提供一
般事务需要的一系列基库 。 但 PHP提供的数据库接口支持彼此不统一, 比如对 Oracle,
MySQL,Sybase的接口, 彼此都不一样 。 这也是 PHP的一个弱点 。
? 面向对象编程,PHP提供了类和对象 。 基于 web的编程工作非常需要面向对象编程能力 。
PHP支持构造器, 提取类等 。
? JSP:
? 将内容的生成和显示进行分离
? 强调可重用的组件
? 采用标识简化页面开发
Page 47
( 3)应用范围
? ASP是 Microsoft开发的动态网页语言, 也继承了微软产品的一贯传统
—— 只 能运 行 于 微软 的 服务 器 产品,IIS(Internet Information
Server) (windows NT)和 PWS(Personal Web Server)(windows 98)上
。 Unix下也有 ChiliSoft的插件来支持 ASP,但是 ASP本身的功能有限,
必须通过 ASP+ COM的组合来扩充, Unix下的 COM实现起来非常困难 。
? PHP3 可在 Windows,Unix,Linux 的 Web 服务 器 上 正 常运 行,还支持
IIS,Apache等通用 Web服务器,用户更换平台时,无需变换 PHP3代码,可
即拿即用 。
? JSP同 PHP3类似, 几乎可以运行于所有平台 。 如 Win NT,Linux,Unix.
NT下 IIS通过一个插件, 例如 JRUN或者 ServletExec,就能支持 JSP。 著
名的 Web服务器 Apache已经能够支持 JSP。 由于 Apache广泛应用在 NT、
Unix和 Linux上, 因此 JSP有更广泛的运行平台 。 虽然现在 NT操作系统
占了很大的市场份额, 但是在服务器方面 Unix的优势仍然很大, 而新
崛起的 Linux更是来势不小 。 从一个平台移植到另外一个平台, JSP和
JavaBean甚至不用重新编译, 因为 Java字节码都是标准的与平台无关
的 。
Page 48
( 4)性能比较
? 有人做过试验, 对这三种语言分别做循环性能测试及存取 Oracle数据
库测试 。 在循环性能测试中, JSP只用了令人吃惊的四秒钟就结束了
20000* 20000的循环 。 而 ASP,PHP测试的是 2000* 2000循环 ( 少一个
数量级 ), 却分别用了 63秒和 84秒 。 ( 参考 PHPLIB) 。
? 数 据 库 测 试 中, 三 者 分 别 对 Oracle 8 进行 1000 次
Insert,Update,Select和 Delete操作, JSP 需要 13 秒, PHP 需要 69
秒, ASP则 需要 73 秒 。
Page 49
ASP技术 JSP技术
WEB服务器 微软的 IIS或个人 WEB服务器 任何 WEB服务器包括 Apache,Netscape,和 IIS
操作系统平台 微软的视窗系统 绝大多数的流行平台
跨平台访问 需要第三方 ASP的引入产品 支持 WEB信息机构环境中不同系列的计算机群
可重用,跨平台组件 没有 JAVABEANS 企业级 JAVABEANS,定制 JSP标签
安全,防范系统崩溃 没有 有
内存泄露保护 没有 有
脚本语言 VBSCRIPT,JSCRIPT JAVA
定制标签 没有 有
兼容传统的数据库 可以 ( COM) 可以 ( 用 JDBC API)
集成数据源的能力 能工作在任何符合 ODBC规范的数据库 能工作在任何符合 ODBC规范的数据库, 而且能访问符合 JDBC技术规范数据库
组件 COM组件 JAVABEANS,企业级 JAVABEANS或扩展的 JSP标签
扩展工具支持 有 有
Page 50
( 5)前景分析
? 目前在国内 PHP与 ASP应用最为广泛 。 而 JSP由于是一种较新的技术, 国内采用的较少 。 但
在国外, JSP已经是比较流行的一种技术, 尤其是电子商务类的网站, 多采用 JSP。
采用 PHP的网站如新浪网 ( sina), 中国人 ( Chinaren) 等, 但由于 PHP本身存在的一些
缺点, 使得它不适合应用于大型电子商务站点, 而更适合一些小型的商业站点 。
? 首先, PHP缺乏规模支持 。 其次, 缺乏多层结构支持 。 对于大负荷站点, 解决方法只有一
个:分布计算 。 数据库, 应用逻辑层, 表示逻辑层彼此分开, 而且同层也可以根据流量
分开, 组成二维阵列 。 而 PHP则缺乏这种支持 。 还有上面提到过的一点, PHP提供的数据
库接口支持不统一, 这就使得它不适合运用在电子商务中 。
? ASP和 JSP则没有以上缺陷, ASP可以通过 Microsoft Windows的 COM/DCOM获得 ActiveX规模
支持, 通过 DCOM和 Transcation Server获得结构支持; JSP可以通过 SUN Java的 Java
Class和 EJB获得规模支持, 通过 EJB/CORBA以及众多厂商的 Application Server获得结构
支持 。
? 三者中, JSP应该是未来发展的趋势 。 世界上一些大的电子商务解决方案提供商都采用
JSP/Servlet。
? 总之, ASP,PHP,JSP三者都有相当数量的支持者, 由此也可以看出三者各有所长 。 正在
学习或使用动态页面的朋友可根据三者的特点选择一种适合自己的语言 。
Page 51
小结
?CGI
– 传统编程方法,生成 HTML文件。
– 通过 Request,Response接收和响应客户请求。
?服务器端脚本
– 程序与 HTML标记混编。
– 引擎解释程序语句,直接插入 HTML文本中。
– 通过一些对象完成通讯:接收请求,发送响应。
Page 52
3.4 商务支持平台及相关技术基础
?商务支持平台技术基础
?Web服务器与应用服务器
?Web服务器的主要功能
?应用服务器的技术分析
Page 53
商务支持平台概述
? 商务支持平台就是对企业的商务应用系统提供支持, 使企
业的商务应用能更好开展的一些服务 。
? 商务基础平台:提高系统性能, 侧重于保障系统的效率,
可靠性和优化, 为商务系统的应用软件提供辅助功能, 例
如系统开发与维护环境, 负载平衡, 系统管理等;
? 商务服务平台:提供更多的商务服务, 为企业的核心商务
逻辑提供服务, 例如供应链管理, 客户关系管理等 。
? 商务支持平台的出现使得企业能够将更多的精力集中于其
核心业务的构建 。
? 商务支持平台通常具有一定的通用性, 是大部分企业都需
要的 。 是由 IT厂商将一些通用的, 与商务应用无关的的软
件, 与 Web服务器集成在一起, 组成的应用服务器软件包
。
Page 54
服务器软件发展概述
? 传统 Web服务器的作用相当于使用 HTTP协议的文件服务
器,在这个平台上是无法实现逻辑处理、计算和数据库访问
等功能的。
? Web服务器的主要功能在于 Web页面的组织和存取,
? 功能丰富,CGI编程接口,其他应用开发接口,并增强了网
站管理等系统管理功能,有些产品的功能足以承担商务服
务处理的需要。
? 三层体系结构的提出和明确,更细致地层次划分又导致了
应用服务器的出现。将一些通用的、与具体商务应用无关
的软件集成为一个整体,为电子商务应用系统的运行提供
基础平台。
Page 55
Web服务器和应用服务器的主要功能以及
二者之间的关系
外部 应 用
HTML静 态页
JSP
Servlet
JavaApplet
EJB
ASP
WEB服 务
器管理
WEB服 务 器
应 用程序(商 务逻辑 )
组 件 处 理器
应 用服 务 引擎
应 用界面生成
服 务进 程 调 度
内容管理
事 务 管理
集成接口
开发 工具
ODBC
JDBC
CORBA
应 用服 务 器
商 务组 件第三方 组 件
服 务 器 /系 统 管理
安全管理
Java虚 拟 机
( JVM)
HTTPD服 务
进 程
数据 库
Page 56
Web服务器的核心功能
?安全性
? FTP
?搜索
?数据分析
Page 57
其他功能
?网站管理、
?应用构造、
?动态内容
?电子商务等
Page 58
Web服务器产品
?两个截然不同的区域:内部网服务器和因特网服
务器。
?目前,Web服务器软件包有 30多种,有些只能在
一种操作系统上运行,有些则可以在多种操作系
统上运行。
?Apache和微软的 IIS( Internet Information Server
)服务器软件占有了大部分的市场份额,网景公
司 Enterprise Server和 O’ Reilly公司的 Website
Professional产品也有一定的市场份额。
Page 59
应用服务器
?将应用从 Web服务器和数据库中分离出来,为处理
大量的用户与事务提供了一个更为结构化的解决
方案。应用服务器还能够提供诸如均衡负载、线
程池和恢复服务等特性,这种事务处理能力使 Web
应用能更好地扩展并从失败中更好地 恢 复。
?应用服务器的版本很多,功能差异也较大。
Page 60
( 1)高性能的应用程序运行环境
?内容缓存
?数据库连接缓存
?支持进程的多线程执行
?大量用户访问情况下的负载均衡
?支持分布式联机事务处理
Page 61
( 2)其他
?为应用提供扩充性
?会话管理
?目录及内容管理
?商务引擎
?系统管理
– 性能配置管理
– 存取控制管理
– 系统日志管理
Page 62
应用服务器的优势
?开发优势
?实施优势
?集成的管理能力
?安全性
Page 63
应用服务器的选择
?总体目标
– 具有良好的可扩展性
– 具有跨平台性
– 统一的 MIS间数据存取接口
– 实现开放的信息共享
– 实现安全的信息共享
Page 64
选择的原则
? 1,基本特性
? 基本特性是指应用服务器的实现应包括的基本运行环境和
支持标准, 主要包括以下内容:
? ( 1) 国际标准的兼容性,对 J2EE支持的程度 。
? ( 2) 操作系统平台, 支持应用服务器运行的操作系统平
台 。
? ( 3) Web服务器, 应用服务器对 Web服务器的支持策略 。
? ( 4) 数据层支持:支持的数据连接标准;支持的数据库产
品 。
? ( 5) 对象模型支持,主要考察对分布式对象模型的支持
。
Page 65
选择的原则
? 2,扩展特性
? 扩展特性描述了应用服务器为了获得高性能和竞争能
力而需要提供的特性, 只要包括以下内容,( 1) 可用性,
( 2) 可伸缩性, ( 3) 可管理性 ( 4) 安全性, ( 5) 集成
性, ( 6) 开发有效性, ( 7) 对 Web Service的支持
? 3,其他需要考虑的方面
? ( 1) 性能价格比 ( 2) 售后服务及培训 ( 3) 应用服
务器版本的更新及升级 ( 4) 技术及产品供应商的发展前
景
3.3 核心商务逻辑的实现及其技术基础
?3.3.1 电子商务应用系统实现概述
?3.3.2 传统程序语言与公共网关接口 CGI
?3.3.3 基于 ASP与 Activex的系统开发
?3.3.4 Java语言及其技术分析
?3.3.5 PHP开发技术分析
Page 2
3.3.1 电子商务应用系统实现概述
? 电子商务系统与电子商务应用系统的实现
? 电子商务系统的应用是基于 Web的应用, 是一种分布式的
结构, 所以开发工作可以分解成为客户端和服务器端的应
用开发两部分 。
? 由于电子商务系统的应用程序既包括编译型的程序, 也包
括解释型的脚本程序 ( 例如 Java Applet,Java Script、
VBScript等 ), 而这些脚本程序基本上都是嵌入到 HTML
页面中的, 所以, 应用程序的编写就不仅局限于编码, 而
且也包括 HTML页面的编写 。
? 借助于组件技术搭建应用日益成为未来电子商务应用开发
与集成的主流方向 。
Page 3
开发语言的选择标准
?平台无关性
?与其他部件的结合能力
?软件的可重用
?与数据库的连接能力
语言使用的简易性
Page 4
3.3.2 传统程序语言与公共网关接口 CGI
?1,CGI工作原理
?2、用 C语言编制的 CGI程序
?3,CGI程序的输出处理
?4,CGI程序的输入
Page 5
CGI工作原理
Web Brower WWW Server
Database
C G I 程序
用户提交数据
服务器所接收的数据
处理
结果
C G I 程序
处理结果
包含处理结果的H T M L 文档
数据库
操作请求
Page 6
用 C语言编制的 CGI程序
void main()
{
printf( "Content-type, text/html\n\n");
printf( "<html>\n");
printf( "<title>用 C编制 CGI程序 <title>\n ");
printf( "<body>\n ");
printf( "<p>第一个 CGI程序, 这是用 C编写的 </p>\n ");
printf( "</body></html>\n ");
}
Page 7
CGI程序的输出处理
Content-type, text/html
<html>
<title>用 C编制 CGI程序 <title>
<body>
<p>第一个 CGI程序, 这是用 C编写的 </p>
</body></html>
输出类型说明
和 HTML正文
Page 8
CGI程序的输入 --GET
? 通常情况下,CGI程序的输入是由客户端的窗体提交而产生的。窗体的
提交有 POST和 GET两种方式。这两种方式提交资料的格式是不同的。
? 在 HTML语法中, 窗体提交时的默认方式为 GET,当以此种方式交时, 用
户所提交的资料将以参数形式附在 CGI程序名的后面, 例如一个登录验
证的 HTML窗体中, 当我们填好用户名和密码后点击, 提交, 按钮, 则
地址栏显示如下:
? http://202.112.149.251/login.exe?name=bluegenius&password=myp
ass
? 当浏览器端以 GET方提交资料时, 在服务器端将自动生成一个环境变量
QUERY_STRING,该参数记录的就是浏览器提交的资料, 即,?, 后的
部分, 将该环境变量的值打印出来是这样的:
? name=bluegenius&password=mypass
Page 9
CGI程序的输入 --POST
? 当窗体采用 POST方式交资料时, 其提交的资料则被加入到服务器端的标准输入 stdin中,
其参数的形式与 GET基本相同, 同时在服务器端生成一个环境变量,CONTENT_LENGTH,该
变量说明了浏览器提交的参数总长度, 以便读入和分析参数时的控制 。 上例中, 当我们
采用 POST方式交时, 将 stdin中的内容打印出来, 则为如下形式:
? name=bluegenius&password=mypass
? 可见, 其参数的形式和意义与 GET方式全相同 。
? 无论窗体是以何种方式提交,所得到的参数串是完全相同的,下面要做的就是如何将该
参数串拆解开,以获得各输入项的值。
? 基本思路为:主程序首先调用 CgiInit将用户提交的参数串读入到自定义缓冲区 buff中,
然后调用 ParsePara将各参数拆解出来 。 其余的几个则为辅助函数, 主要用于将参数中的
汉字转换为正确的形式 。 因为在窗体提交过程中, 无论采用何种提交方式, 汉字都是被
转换成为一个个的以, %”开头的 16进制码, 如 %BC%4F等, 每 2个 16进制码表示一个汉字 。
当我们采用 GET方式提交带有汉字的参数时, 会在浏览器的地址栏中发现这些 16进制码而
不会找到一个汉字, 就是这个原因 。
? 将用户提交的参数拆解开后, 就可以分析并处理这些信息, 其过程与方法和普通的 C程序
是完全相同的, 最后 CGI程序输出处理结果, 这就是一个 CGI程序完整的处理过程了 。
Page 10
3.3.3 基于 ASP与 Activex的系统开发
? 是微软推出的动态 Web设计技术,它能够将代码直接嵌入 HTML,是一种
用于 WWW服务的服务器端脚本环境,也是一种在站点的 Web服务器上解
释脚本,可产生并执行动态、交互式、高效率的站点服务器应用程序
。利用它,可以很容易地把 HTML标记、文本、脚本命令及 ActiveX组件
混合在一起构成 ASP页,以此来生成动态网页,创建交互式的 Web站点
,实现对 Web数据库的访问。
? 由于 ASP在服务器端运行,运行结果以 HTML主页形式返回用户浏览器,
也就是说,用户在客户端浏览器看到的仅仅是 ASP页的执行结果所生成
的页,而 ASP页本身的内容用户在客户端浏览器是看不到的,因而 ASP
源程序不会泄密,增加了系统的安全保密性。此外,ASP是面向对象的
脚本环境,用户可自行增加 ActiveX组件来扩充其功能,拓展应用范围
。
Page 11
示例
<%@ LANGUAGE=JScript%>
<html>
<head> </head>
<body>
<%for(i=0;i<7;i++)
{ %>
<p><font size = <% = i%>>
这是一个测试程序! </font></p>
<%}%>
</body></html>
<html>
<head>
</head><body>
<p><font size = 0>
这是一个测试程序 ! </font></p>
<p><font size = 1>
这是一个测试程序 ! </font></p>
<p><font size = 2>
这是一个测试程序 ! </font></p>
<p><font size = 3>
这是一个测试程序 ! </font></p>
<p><font size = 4>
这是一个测试程序 ! </font></p>
</body></html>
Page 12
ASP编程的基本规则
? ASP编程首先要确定其使用的脚本语言 。 ASP的编程可采用各种脚本语
言, 只要服务器端安装了相应的脚本引擎即可 。
? 需要注意的是,ASP本身有一定的语法规则, 也可算作一种编程语言,
而同时所使用的脚本语言自身还有一套语法, 因此在编制 ASP程序的过
程中, 必须同时遵守这两方面的语法规定才行, 缺一不可 。
? 一个 ASP文件实际包含了两个部分,HTML部分和 ASP脚本命令部分 。 其
中, HTML部分与普通的 HTML文件的语法规则是相同的;而 ASP脚本则利
用 <%和 %>两种标记嵌入到 HTML部分之中, 在已有的 HTML基础上对其输
出实现控制 。
Page 13
ASP的内部对象
对 象 功 能
Request 从客户端取得信息
Response 向客户端输出信息
Server 提供一些 Web 服务器工具
Session 记录和管理与用户的连接与会话过程
Application 在一个 ASP-A pplicat ion 中让不同的客户端共享信息
ObjectConte xt 配合微软的交易服务器 ( MTS )进行分布式事务处理
Page 14
( 1) Request对象
? 可以使用 Request对象访问任何基于 HTTP请求传递的信息, 包括从 HTML
表格用 POST方法或 GET方法传递的参数, Cookie,用户认证及服务器端
变量等 。 同时, Request对象还能够访问客户端发送给服务器的二进制
数据 。 Request对象主要有如下几种最常见的应用:
? 获取由 POST方法提交的表单的各元素值
– Request.Form(element)[(index)|.Count]
? 获取 QueryString中各变量的值
– Request.QueryString(variable)[(index)|.Count]
? 获取 Cookie中变量的值
– Request.Cookies(cookie)[(key)|.attribute]
? 获取服务器端环境变量值
– Request.ServerVariables ( Name )
Page 15
示例
?编制页面,用户提交信息
? 该表单的提交项定义如下:
? <form method="POST" action="ShowInfo.asp">
?处理后,回显给用户
Page 16
为处理表单数据的 ASP文件,ShowInfo.asp
? <%@ Language = JScript%>
? <html><head>
? <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
? <title>New Page 1</title>
? </head>
? <body>
? <p><font color="#FF0000">您提交了如下信息,<br></font><br>
? <font color="#0000FF">
? 姓名,<%=Request.Form("Name")%><br> 性别,<%=Request.Form("Sex")%><br>
? 籍贯,<%=Request.Form("HomeTown")%><br></font><br>
? <% n = Request.Form("Hobby").Count
? if(n > 0) {%>
? <font color=“#0000FF”> 您的爱好共有 <%=n%>项:
? <%for(;n>0;n--){%>
? <%=Request.Form("Hobby")(n)%> <% }
? } else%>
? 您没有什么特别的爱好。 </font></p>
? </body> </html>
Page 17
( 2) Response对象
? 与 Request对象正相反, Response对象是用来控制发送给用户的信息,
包括直接发送信息给浏览器, 重定向浏览器到另一个 URL或设置 Cookie
的值等 。
? 设置 Cookie的值
– Response.Cookies(cookie)[(key)|.attribute]=value
? 设置 Web页面保留在客户端浏览器缓冲中的时间
?① Response,Expires = value
?② Response,ExpiresAbsolute = value
– <% Response.ExpiresAbsolute=#Dec 31,2000 9:30:30# %>
? 向浏览器输出信息
? Response.Write(String)
? 重新定向 URL
– Response.Redirect( URL)
? Response.Redirect(, http://bluegenius.dhs.org”)
Page 18
( 3) Application对象
? 下面是一个计数器程序, 也是一个比较典型的 Applicatio对象的应用方法 。
? <%@ LANGUAGE=JavaScript%>
? <html><head>
? <title>计数器示例 </title>
? </head>
? <body>
? <% Application.Lock
? //若未设定初值,则将其设为 0
? if ( isNaN(parseInt(Application("Num"))))
? Application("Num") = 0;
? Application("Num") = Application("Num") + 1
? Application.Unlock
? %>
? 您是第 <% = Application("Num")%> 位来客 !
? </body></html>
Page 19
( 4) Session 对象
? Session 对象存储特定的用户会话所需的信息 。 当用户在应用程序的页之间跳转时, 存
储在 Session 对象中的变量不会清除, 而用户在应用程序中访问页面时, 这些变量始终
存在 。
? 要注意的是, 会话状态仅在支持 Cookie 的浏览器中保留, 如果客户关闭了 Cookie 选
项, Session 也就不能发挥作用了 。
? 例如下面例子:
? <%Session("Name") = "bluegenius"
? Session(“Password”) =,12345”%>
? 在 Session中建立了 Name和 Password两个变量,在以后由其直接或间接链接而出的网页中
(注意:必须是直接或间接链接而出的一组网页才构成一组对话)就可通过如下语句获
得用户名和密码:
? <%Name = Session("Name")
? Password = Session("Password")%>
? 之后, 就可以用这个用户名和密码进行身份校验了 。
Page 20
3.3.4 Java语言及其技术分析
? Java是 SUN公司与 1990年开始,为消费者电子市场,如电视机、电话
、烤面包机等家用电器的控制和通讯,而设计的软件。设计小组最开
始使用 C++,但是它在在消费者使用的各种硬件架构及对稳定的要求上
却产生了问题,于是这个小组开发了一种新的语言,并为它命名 Java
。这个名称并不是某个简称,而是指设计人员们所喜欢的又热又香醇
的咖啡,更重要的是,它包含了激发这个技术的要素:活波、动画、
速度、互动以及其他会选择 Java的可能因素。而今天,它已经成为
Internet上的配送工具。
Page 21
( 1) Java是编程语言
? 特点:简单可靠, 是面向对象, 与平台无关的, 具有可移植性, 安全性好, 并且支持多
线程, 具有很高的性能;其次, 它最大限度地利用了网络, Java小应用程序可在网络上
传输而不受计算机和操作系统的限制 。
? Java既可以被编译, 也可以被解释 。 通过编译器, 可以把 Java程序翻译成一种中间代码
( 字节码 ) ——可以被 Java解释器解释的独立于平台的代码 。 通过解释器, 每条 Java字
节指令被分析, 然后在计算机上运行 。
JAVA
源程序
JAVA
编译器
JAVA
字节码
通过网络或
本地文件系统
传送字节码
类装载器
字节码校验器 JAVA类库
JAVA
解释器
及时
编译器
运行时系统
操作系统
硬件
JAVA
虚拟机
编译时 运行时
Page 22
( 2) Java是平台
? 平台是程序运行的硬件或软件环境 。 Java平台与大多数其他平台的不同之处在于, 它是
运行于其他硬件平台的纯软件平台, 而大多数其他平台是硬件和操作系统的结合 。
? Java平台由 Java虚拟机 ( Java Virtual Machine,简称 JVM) 和 Java应用程序接口 (
Java API) 两部分组成 。
? JVM是 Java平台的基础 。 JVM发挥抽象计算机的作用, 在 Java应用程序和本机系统之间建
立了一个绝缘层, 屏蔽掉了硬件和操作系统的不同, 使 Java程序, 编写一次, 任意运行
” 。 可以把 Java字节码看作运行在 JVM上的计算机代码指令 。 每种 Java解释器, 不管是
Java开发工具还是可以运行 Java小应用程序的 Web浏览器, 都是 JVM的实例 。
? Java API由多种 Java包 ( package) 组成, 它们提供了很多有用的功能 。 如 java.awt是
窗口工具包, 可以用来创建图形用户界面 ( GUI) ; java.io用来实现输入/输出处理;
java.sql即 JDBC包, 包含了实现数据库连接的一系列类和接口 。
? 图 6- 2描述了一个运行在 Java平台上的 Java程序, 如应用程序 ( Application) 或小应用
程序 ( Applet) 。 图中, Java API和 JVM把 Java程序从硬件依赖中分离出来 。
Java 程序
Java API
Java 虚拟机
基于硬件的平台
Java平台
Page 23
( 3) Java应用程序
? 这类程序与大多数面向对象语言所编写的程序相同, 独立运行于本地主机 。 步骤:
? 创建一个 Java源文件:使用记事本, 创建一个包含以下内容的命名为
HelloWorldApp.java的 Java源文件:
? 对一个 Java应用程序来说, main( ) 方法是必须的, 而且必须按照上述格式来定义 。
Java解释器在没有生成任何实例的情况下, 以 main( ) 方法作为入口执行程序 。
? 使用 Java编译器编译源文件:
? DOS shell(windows 95/ NT);
? javac HelloWorldApp.java
? 如果编译成功, 编译器便产生一个与 Java源文件 HelloWorldApp.java) 在同一个目录下
的名为 HelloWorldApp.class的文件 。 这个类文件包含 Java字节码, 是可以被 Java运行系
统解释的独立于平台的代码 。 如果编译失败, 请查看键人的文件名是否正确, 尤其是大
小写 。
? 在 Java解释器中运行这个 Java应用程序:
? DOS shell(windows 95/ NT);
? java HelloWorldApp
? 或 jview HelloWorldApp
? 可以看到屏幕上显示, Hello World!, 。
? javac和 java分别是 JDK提供的 Java编译器和解释器 。 JDK( Java Development Kit) 是
Sun公司推出的 Java程序开发工具, 可以从 http:// www.javasoft.com下载 。 JDK中的部
件都在 DOS状态下以命令形式运行 。 jview是 Windows自带的 Java解释器 。
// This class simply displays”Hello World” to the
// standard output.
class HelloWorldAPP{
Public static void main(String[],args){
System.out.println(, Hello World!, ) ;
}
}
Page 24
( 4) Java小应用程序
?Java小应用程序是动态, 安全, 跨平台的网络应用
程序, Java语言迅速流行的重要原因也正在于此 。
Java Applet不能独立运行, 需要嵌入在 HTML页面
中, 通过浏览页面来执行 。
Page 25
3、构建多层应用软件体系结构的 Java技术
? 在构建多层应用软件体系结构时, 选用 Java平台是一个非常好的选择
,而实现多层结构需要使用的关键技术和运行环境主要有:
? 客户层,Java Applet编程技术, 运行环境为支持 Java的浏览器或可以
直接运行 Java程序的计算机 ( 例如网络计算机 ) 。
? 顶端 Web服务层,Java Servlet编程技术, JSP技术, RMI技术和 Java
Bean编程技术, 运行环境为使用 Java语言编写的 Web服务器 ( 起代理
服务器作用 ) 。
? 应用服务层,Java Servlet编程技术, RMI技术, JDBC技术和 Java
Bean编程技术, 运行环境为使用 Java语言编写的 Web服务器 。
Page 26
J2EE标准
客 户层 客 户 机
Web层
J2EE服 务 器
商 务层
EIS层 DB服 务 器
应 用程序 动态 HTML
网 页
EJBEJB
JSP页
DB DB
Page 27
( 1) JavaBeans
? JavaBeans描述了基于 Java的软件组件模型, JavaBeans 规范将, 组件软件, 的概念引入
到 Java 编程的领域 。 组件是自含的, 可重用的软件单元;而 JavaBeans 组件, 则可以
使用可视的应用程序开发工具, 可视地将它们编写到 Java 程序中 。 JavaBeans 规范为
Java 开发人员提供了一种, 组件化, 其 Java 类的方法 。
? 如果软件重用是一个好主意, 那么是否应该让每一个 Java 类都成为 Java bean 呢? 如
果 Java 类满足某些准则, 它们就适于充当 bean 的角色:如果软件模块要既能够可视地
操作, 又能够定制以达到某些效果, 则这种软件模块就可能适于做成一个 JavaBean。
? 是否打算让它可重用? 或者, 它会是可重用的吗?
? 是否希望将它与其他可重用的 Java 组件一起使用?
? 是否预计会在 IDE 工具中使用它?
? 如果上述问题的答案都是肯定的, 则它应该作为 JavaBean 来开发 。
? JavaBean 概念是为了在 Java 编程环境中支持可重用的组件, 它是一种一般性的设
计方法, 适用于客户机或服务器机器上运行的 Java 程序 。 由于对可视的构建器工具的
强调, 也由于许多 Java bean 都是图形用户界面 (GUI) 组件, 所以 JavaBean 组件可
能被视为一种客户端技术 。 但是, 并不要求 Java bean 都是可视的, 并且它们也可以用
于服务器环境中 。
?
Page 28
( 2) EJB(Enterprise java bean)
? 是 JAVA中的商业应用组件技术, 是分布式应用系统中的组件 。
? EJB组件模型在逻辑上扩展了 JavaBeans组件模型, 以支持服务器端组件 。 服务器端组件
是可重用的, 预先包装好的, 准备在应用服务器上运行的应用程序功能片段 。 它们可以
和其他组件组合在一起创建一个符合要求的应用系统 。
? 与 JavaBeans组件有很多相似的之处, 但是 JavaBeans组件一般粒度更大而且功能更完全
,而且 EJB组件不能像 JavaBeans组件那样在 Java集成开发环境中使用 。 相反, 通过使用
由遵循 EJB的 Java应用服务器提供的工具, 它们可以在部署阶段被装配和定制 。
? EJB模型定义了 EJB组件与 EJB容器之间相互关系 。 EJB组件不需要使用任何特定的容器系
统 。 提供商可以将任何应用服务器端调节为支持 EJB技术, 只需加入规范定义的一些服务
的支持即可 。 这些服务定义了 EJB组件和容器之间的, 契约,, 有效地实现了一个可移植
层 。 任何 EB组件可以在任何支持 EJB契约的应用服务器上运行 。 一个 EJB组件可被部署到
任何一个 EJB服务器, 即使不同的服务器通过不同的方式实现它们的服务 。 EJB模型使用
EJB容器与 EJB组件之间的一组标准契约确保了 EJB组件在不同 EJB服务器上的可移植性 。
每一个 EJB组件都被要求实现一组特定接口, 允许 EJB容器管理和控制该对象 。 EJB容器也
被要求在特定的执行阶段调用此接口 。
Page 29
EJB的分布式计算结构中的六个角色
? 六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循 Sun公司提
供的 EJB规范,以保证彼此之间的兼容性。
– EJB组件开发者,
– 应用组合者,
– 部署者,
– EJB 服务器提供者,
– EJB 容器提供者,
– 系统管理员,
Page 30
( 3) JDBC
? JAVA语言作为一种具有健壮性, 易使用, 易于理解, 能够自动从网络
下载的语言, 具有开发数据库应用的极好的语言基础 。 但除此以外,
Java还需要提供一种能够与各种数据库系统交互的能力, JDBC( Java
DataBase Connectivity) 就提供了这样一种能力 。
? JDBC是一个能够执行 SQL语句的 Java API,它包含一组由 Java语言编
写的类和接口, 使得程序员能够使用纯 Java开发数据库应用 。 JDBC标
准基于 X/ OPEN的 SQL调用级接口, 它定义了一个友好的 Java界面来与
X/OPEN的 SQL调用级接口中定义的基本抽象层和基本概念层来进行连
接 。
Page 31
(4)Servlet
? Servlet是 Java技术对 CGI编程的回答 。 Servlet程序在服务器端运行,
以接收来自 Web浏览器的 HTTP请求, 动态地生成响应 ( 可能需要查询数
据库来完成这种请求 ), 然后发送包含 HTML或 XML文档的响应到浏览器
。
? Servlet 是一组运行在服务器端的软件 。 Sun公司将其取名为 Servlet
,可能是与 Applet有关 。 Applet是运行在 Web浏览器端的 JAVA程序,
Servlet是运行在 Web服务器端的 JAVA程序 。
? 与传统的 CGI和许多其他类似 CGI的技术相比, Java Servlet具有更高
的效率, 更容易使用, 功能更强大, 具有更好的可移植性, 更节省投
资 ( 更重要的是, Servlet程序员收入要比 Perl程序员高 ) 。
Page 32
Servlets 特点
? 高效 。 在传统的 CGI中, 每个请求都要启动一个新的进程, 如果 CGI程序本身的执行时间
较短, 启动进程所需要的开销很可能反而超过实际执行时间 。 而在 Servlet中, 每个请求
由一个轻量级的 Java线程处理 ( 而不是重量级的操作系统进程 ) 。 在传统 CGI中, 如果有
N个并发的对同一 CGI程序的请求, 则该 CGI程序的代码在内存中重复装载了 N次;而对于
Servlet,处理请求的是 N个线程, 只需要一份 Servlet类代码 。 在性能优化方面,
Servlet也比 CGI有着更多的选择, 比如缓冲以前的计算结果, 保持数据库连接的活动,
等等 。
? 方便 。 Servlet提供了大量的实用工具例程, 例如自动地解析和解码 HTML表单数据, 读取
和设置 HTTP头, 处理 Cookie,跟踪会话状态等 。
? 功能强大 。 在 Servlet中, 许多使用传统 CGI程序很难完成的任务都可以轻松地完成 。 例
如, Servlet能够直接和 Web服务器交互, 而普通的 CGI程序不能 。 Servlet还能够在各个
程序之间共享数据, 使得数据库连接池之类的功能很容易实现 。
? 可移植性好 。 Servlet用 Java编写, Servlet API具有完善的标准 。 因此, 为 I-Planet
Enterprise Server写的 Servlet无需任何实质上的改动即可移植到 Apache,Microsoft
IIS或者 WebStar。 几乎所有的主流服务器都直接或通过插件支持 Servlet。
Page 33
( 5) JSP
? 成为快速建立跨平台的动态网站的首选方案 。
? 1.将内容的生成和显示进行分离
? 2.可重用组件
? 3.采用标识,
? 4.适应平台
? 5.数据库连接:
? 6,所有的 JSP页面都被编译成为 Java Servlets,好处, 包括健壮的存储管理
和安全性 。 作为 Java平台的一部分, JSP拥有 Java编程语言, 一次编写, 各处
运行, 的特点 。
Page 34
4、两种体系结构的比较和选择
– 自从引入 JSP技术, 使用 Java构建的 Web应用服务器
端出现了两种架构, 第一种是只使用 JSP,第二种是同
时使用 JSPs和 Servlets,以下称之为模型一和模型二
,它们分别有各自的优缺点 。 近来模型二风行, 不仅
在网络中有很高的占有率, 而且在商业杂志中也备受
推崇 。 实际上, 很多开发者错误的认为这种架构已经
取代了模型一并且是使用 JSPs的正确方法 。 正确的使
用 JSPs的方法取决于你目前项目的实际需求, 而不是
追赶潮流 。 在这篇文章中, 我将描述这两种架构, 权
衡利弊, 告诉你一些基本的准则来帮助你决定哪一种
技术更适合你 。
Page 35
( 1)基于 JSP的模型结构
浏览器 jsp文件 Bean DB
Page 36
( 2) MVC使用 JSPs和 Servlets
Servlet
JSP文件
DBJava Bean
Page 37
基于 MVC模型的应用系统开发的组织
视图 控制器 模型 应 用
内容 页 面内容和布局 应 用流程 商 业逻辑 运行 环 境
角色 页 面制作者 应 用 组 装者 组 件提供者 WEB管理 员
部件 HTML,JSP,Servlets JavaBeans,配置数据
XML,Applets JavaBeans,XML EJB 站点使用分析
工具 WebSphere WebSphere Studio,VAJAVA ApplicationServer
培 训 Studio Studio IBM Connectors Performance Pack
SiteAnalysisTools
Page 38
( 3)模型的比较
? 对于 Web的开发者和设计者来说, 直接使用 JSP是很直观的, 但随着代码的增多会使 JSP页面负重
不堪, 而且调试困难 。 使用 Servlet控制器, 大多数的商业逻辑在从 JavaBeans传给 JSP 之前就已
经调试通过了 。
? 很有用的原则和概念来帮助选择:这两种架构的最明显的区别就是模型一是以, 页面为中心 "的
,而模型二是以 "程序为中心 "的 。 如果你正在开发一个典型的 Web应用, 只是页面之间的链接,
那模型一是比较适合的 。 但如果每个链接或按钮背后需要大量的处理后才能决定下一步要显示什
么, 那 Servlet/JSP MVC是比较适合的 。
? 另一种方法是看你的应用是面向, 请求, 的还是面向, 响应, 的 。 Servlets是面向, 请求, 的,
JSPs则更加是面向, 响应, 的, 因为 JSP页面将 HTML的响应发送给浏览器 。 如果你的 HTML代码要
大大多于 Java( 或者说只有非常少的逻辑来决定要显示给用户什么 ), 那么模型一就更加适合 。
? 有一个小技巧就是观察请求与响应之间的映射关系, 如果对于每一个的请求, 只有一个响应, 那
么使用 Servlet就意义不大 。 Sun的 J2EE蓝本中是这样描述 Servlet控制器的:, 基于用户的请求
和模型命令的输出, 控制器选择一个视图来作为响应的一部分, 。 如果请求和响应是一对一的,
那么就没什么必要使用控制器 。
? 另一方面, 如果每个请求会导致比较复杂的逻辑运算, 并且可能返回的视图也不相同, 那么使用
Servlet来做出决定和重定向视图就比较理想 。 如果你的应用需要支持不同的显示格式, 例如在
同一个通道中使用 HTML和 XML,那这一点就尤其重要了 。 Servlet能包含逻辑, 来决定客户端是什
么, 基于这一点来返回不同的文档格式 。
? 在做出决定时, 还应当考虑到开发者的技能水平 。 举例来说, 如果应用系统主要是由网
? 最后, 记住模型一和模型二是不能并存的 。
Page 39
3.3.3 PHP与 Perl
Page 40
1,PHP
? PHP动态网站开发技术与 ASP相似, 也是一种嵌入 HTML文档的服务器端脚本语言 。 其语法
大部分与 C,Java,Perl等语言相似, 并形成了自己的独有风格, 利用该语言 Web程序员
可以快速地开发出动态网页 。 PHP是 Personal Home Page的缩写, 于 1994年由 Rasmus
Lerdorf创造, 原本用途只是为知道他自己个人置于 Internet上的履历表曾被谁浏览过 。
后来由于其轻巧, 免费, 多平台等特性而迅速流行, 1997年开始开发的第三版被称之为
PHP3。 PHP广泛流行的主要原因在于其多平台能力和对数据库的广泛支持, 此外也有些其
他的独到之处 。
? ( 1) 免费, 轻巧快速, 真正跨平台 。
? 要运行 PHP, 通 常 使 用 Linux 作 为 操 作 系 统, Apache 作为 Web 服务器 。
Linux+Apache+PHP3+MySQL已经成为中小型网站最为经济的选择, 无论是性能还是安全方
面, 都要比微软的 ASP好一些 。 当然在其他操作系统上也同样可以运行, 这是因为得益于
其开放的源代码, PHP是一种跨平台的软件 。 不过, 如果不使用 Apache服务器, 那么 PHP
就只能以 CGI的方式运行, 这样就不能利用将 PHP编译进 Apache带来的性能优势 。
Page 41
( 2) 语法与 C及 Perl相近
? PHP是一个在服务器端脚本语言,其目的则为开发动态式的网页并可与数据库连结,具备
CGI及类似 JavaScript在 Client端的功能。 PHP的语法主要借鉴于 C语言,也部分参考了
JAVA和 Perl语言。与 ASP类似,它是一种嵌入式语言,即在 HTML中嵌入 PHP语法,如图中
所示的三种方法:
? PHP和一般的解释性语言一样, 不需要事先定义变量 。 如果试着使用一个没有赋过值的变
量, 那么返回的值是空字符串 。 对一个变量赋值则也就同时分配了这个变量的内存 。 PHP
的变量名前面必须有一个 $ 号, 这也是很多脚本语言的惯例了 。 PHP的变量类型可以自动
转换, 如果需要强制转换, 做法和 C的一样 。 它有 Integer,Double,String三种简单类
型 。 PHP3的变量作用域规定类似于 C,即缺省认为主程序中的变量是全局变量, 而函
数中的变量都是局部变量, 即使有同名的全局变量也不使用 。 PHP与其他跨平台语言类似
,也有正规表达式功能, PHP3的正规表达式功能当然远远比不上 Perl,但还是足够用的
。
? 当从 www,php3,net中下载了最新版本的 PHP并安装配置完毕之后, 就可以使用编辑器或
网页制作软件来编写 PHP代码了 。 如果你能使用 C或 Perl进行编程, 就会发现 PHP编程并不
复杂, C简单, 比 Perl易懂 。
<?echo(“这是 PHP语言的嵌入范例 \n”);?>
<?php echo(“这是 PHP语言的嵌入范例 \n”);?>
<script language =,php”>
echo(“这是 PHP语言的嵌入范例 \n”);
</script>
Page 42
( 3) 广泛的数据库支持能力
? PHP最强大, 也最有代表性的特点是它的数据层, 它可以支援多种数据库, 几乎含盖了各
种常见的数据库, 包括常用的 Oracle,mSQL,dBase,Sybase,Informix,MySQL等等,
并且使编写基于数据库的网页变得非常简单 。
? 同数据库相关的页面, 在服务器端以 PHP脚本的方式编写 。 实现过程如图 5,8所示:
? 从图可以看出:
? 第 1步:客户向 Web服务器发出请求 。
? 第 2步,Apache服务器分析客户的请求, 若为 PHP文件, 则将其交给 PHP处理程序进行处理
? 第 3步,Filename,php3是一个 PHP脚本, 包含了许多命令, 其中包括打开并连接数据库
,从数据库中找到所要数据的命令 。 所有同数据库相关的操作, 都由 PHP来完成 。 PHP可
以很好地完成同数据库的交互 。
? 第 4步,PHP从数据库中取得数据后, 按照 FIlename,php3文件的要求, 进行格式转换,
也即将文件内容转化为 HTML格式 。
? 第 5步:将 HTML格式的文件交给 Apache服务器 。
? 第 6步,Apache服务器再将其送给客户 。
客户
浏览器
PHP3
服务
Apache
服务器
1.客户请求 2.脚本交 PHP3
3.执行数据查询
6.页面返回 5.返回 HTML4.查询返回
MySQL
图 PHP实现过程
Page 43
示例
.,,,,
<? Mysql-connect (―localhost‖,‖webmaster‖,‖‖);
$query = ―SELECT id,name FROM customer‖;
$result = mysql-db-query(―test‖,$query);
if ($result){
echo ―found these entries in the database,<ul>‖;
while ($r= mysql-fetch-array($result)) {
$id = $r[―id‖];
$name = $r[―name‖];
echo ―<li> $id,$name‖;}
echo ―</ul>‖;
} else {
echo ―No data.‖}
mysql-free-result($result);
>,,,,
Page 44
2,Perl简介
? Perl(Practical Extraction and Reporting Language)是一个高级程序语言, 由 Larry
Wall和其他许多人所写, 融合了许多语言的特性 。 它是由 C语言, sed,awk,UNIX
shell 和至少十几种其他的工具和语言所演化而来 。
? Perl对档案和文字等有很强的处理, 变换能力, 因此有关快速原型设计, 系统工具, 系
统管理, 数据库处理, 图像程序设计, 网络连接, WWW程序设计等工作, 都能用 Perl完成
。
? Perl的设计目标是帮助 UNIX用户完成一些常见的任务, 这些任务对于 shell来说过于沉重
或对移植性要求过于严格 。
? Perl是按 GNU Public License的形式分发的, 其实质是免费的, 原先运行于 UNIX和类
UNIX系统, 现在已可以方便地在 OS/2,Windows 9x,Windows/NT等系统下运行 。
? Perl是解释运行的, 一般 Perl程序的第一行需注明自己是一个 Perl程序而不是 shell程序
,所以一般将下面一行语句:
? #! /usr/bin/perl
? 作为文件的第一行 。
Page 45
3.3.4 分析比较
? 传统的高级开发语言 C/C++等, 虽然不是专门为电子商务系统开发而设
计的, 但是其通用性比较好, 基本上所有的应用服务都可以用传统的
语言来开发, 目前的商品化软件包 ( 如数据库, 中间件产品等 ) 一般
都提供传统高级语言的 API接口, 特别是在解决电子商务系统与其他应
用互操作等问题时, 传统语言还是有一定优势的 。 需要指出的是, 传
统语言与操作系统的关系比较紧密, 跨平台能力较弱, 因此目前更多
的应用使用 Java等新的开发语言 。
? ( 1) 简介
Page 46
技术特点
( ASP:
? 使用 VBScript, JScript等简单易懂的脚本语言, 结合 HTML代码, 即可快速地完成网站
的应用程序 。
? 无须 compile编译, 容易编写, 可在服务器端直接执行 。
? 使用普通的文本编辑器, 如 Windows的记事本, 即可进行编辑设计 。
? 与浏览器无关,用户端只要使用可执行 HTML码的浏览器, 脚本语言 (VBScript,
Jscript)均在 WEB服务器端执行, 用户端的浏览器不需要能够执行这些脚本语言 。
? ActiveX Server Components(ActiveX 服务器元件 )具有无限可扩充性 。 可以使用
Visual Basic, Java, Visual C++, COBOL等编程语言来编写你所需要的 ActiveX
Server Component 。
? PHP:
? 数据库连接,PHP可以编译成具有与许多数据库相连接的函数 。 PHP与 MySQL是现在绝佳的
组合 。 你还可以自己编写外围的函数去间接存取数据库 。 通过这样的途径当你更换使用
的数据库时, 可以轻松地更改编码以适应这样的变化 。 PHPLIB就是最常用的可以提供一
般事务需要的一系列基库 。 但 PHP提供的数据库接口支持彼此不统一, 比如对 Oracle,
MySQL,Sybase的接口, 彼此都不一样 。 这也是 PHP的一个弱点 。
? 面向对象编程,PHP提供了类和对象 。 基于 web的编程工作非常需要面向对象编程能力 。
PHP支持构造器, 提取类等 。
? JSP:
? 将内容的生成和显示进行分离
? 强调可重用的组件
? 采用标识简化页面开发
Page 47
( 3)应用范围
? ASP是 Microsoft开发的动态网页语言, 也继承了微软产品的一贯传统
—— 只 能运 行 于 微软 的 服务 器 产品,IIS(Internet Information
Server) (windows NT)和 PWS(Personal Web Server)(windows 98)上
。 Unix下也有 ChiliSoft的插件来支持 ASP,但是 ASP本身的功能有限,
必须通过 ASP+ COM的组合来扩充, Unix下的 COM实现起来非常困难 。
? PHP3 可在 Windows,Unix,Linux 的 Web 服务 器 上 正 常运 行,还支持
IIS,Apache等通用 Web服务器,用户更换平台时,无需变换 PHP3代码,可
即拿即用 。
? JSP同 PHP3类似, 几乎可以运行于所有平台 。 如 Win NT,Linux,Unix.
NT下 IIS通过一个插件, 例如 JRUN或者 ServletExec,就能支持 JSP。 著
名的 Web服务器 Apache已经能够支持 JSP。 由于 Apache广泛应用在 NT、
Unix和 Linux上, 因此 JSP有更广泛的运行平台 。 虽然现在 NT操作系统
占了很大的市场份额, 但是在服务器方面 Unix的优势仍然很大, 而新
崛起的 Linux更是来势不小 。 从一个平台移植到另外一个平台, JSP和
JavaBean甚至不用重新编译, 因为 Java字节码都是标准的与平台无关
的 。
Page 48
( 4)性能比较
? 有人做过试验, 对这三种语言分别做循环性能测试及存取 Oracle数据
库测试 。 在循环性能测试中, JSP只用了令人吃惊的四秒钟就结束了
20000* 20000的循环 。 而 ASP,PHP测试的是 2000* 2000循环 ( 少一个
数量级 ), 却分别用了 63秒和 84秒 。 ( 参考 PHPLIB) 。
? 数 据 库 测 试 中, 三 者 分 别 对 Oracle 8 进行 1000 次
Insert,Update,Select和 Delete操作, JSP 需要 13 秒, PHP 需要 69
秒, ASP则 需要 73 秒 。
Page 49
ASP技术 JSP技术
WEB服务器 微软的 IIS或个人 WEB服务器 任何 WEB服务器包括 Apache,Netscape,和 IIS
操作系统平台 微软的视窗系统 绝大多数的流行平台
跨平台访问 需要第三方 ASP的引入产品 支持 WEB信息机构环境中不同系列的计算机群
可重用,跨平台组件 没有 JAVABEANS 企业级 JAVABEANS,定制 JSP标签
安全,防范系统崩溃 没有 有
内存泄露保护 没有 有
脚本语言 VBSCRIPT,JSCRIPT JAVA
定制标签 没有 有
兼容传统的数据库 可以 ( COM) 可以 ( 用 JDBC API)
集成数据源的能力 能工作在任何符合 ODBC规范的数据库 能工作在任何符合 ODBC规范的数据库, 而且能访问符合 JDBC技术规范数据库
组件 COM组件 JAVABEANS,企业级 JAVABEANS或扩展的 JSP标签
扩展工具支持 有 有
Page 50
( 5)前景分析
? 目前在国内 PHP与 ASP应用最为广泛 。 而 JSP由于是一种较新的技术, 国内采用的较少 。 但
在国外, JSP已经是比较流行的一种技术, 尤其是电子商务类的网站, 多采用 JSP。
采用 PHP的网站如新浪网 ( sina), 中国人 ( Chinaren) 等, 但由于 PHP本身存在的一些
缺点, 使得它不适合应用于大型电子商务站点, 而更适合一些小型的商业站点 。
? 首先, PHP缺乏规模支持 。 其次, 缺乏多层结构支持 。 对于大负荷站点, 解决方法只有一
个:分布计算 。 数据库, 应用逻辑层, 表示逻辑层彼此分开, 而且同层也可以根据流量
分开, 组成二维阵列 。 而 PHP则缺乏这种支持 。 还有上面提到过的一点, PHP提供的数据
库接口支持不统一, 这就使得它不适合运用在电子商务中 。
? ASP和 JSP则没有以上缺陷, ASP可以通过 Microsoft Windows的 COM/DCOM获得 ActiveX规模
支持, 通过 DCOM和 Transcation Server获得结构支持; JSP可以通过 SUN Java的 Java
Class和 EJB获得规模支持, 通过 EJB/CORBA以及众多厂商的 Application Server获得结构
支持 。
? 三者中, JSP应该是未来发展的趋势 。 世界上一些大的电子商务解决方案提供商都采用
JSP/Servlet。
? 总之, ASP,PHP,JSP三者都有相当数量的支持者, 由此也可以看出三者各有所长 。 正在
学习或使用动态页面的朋友可根据三者的特点选择一种适合自己的语言 。
Page 51
小结
?CGI
– 传统编程方法,生成 HTML文件。
– 通过 Request,Response接收和响应客户请求。
?服务器端脚本
– 程序与 HTML标记混编。
– 引擎解释程序语句,直接插入 HTML文本中。
– 通过一些对象完成通讯:接收请求,发送响应。
Page 52
3.4 商务支持平台及相关技术基础
?商务支持平台技术基础
?Web服务器与应用服务器
?Web服务器的主要功能
?应用服务器的技术分析
Page 53
商务支持平台概述
? 商务支持平台就是对企业的商务应用系统提供支持, 使企
业的商务应用能更好开展的一些服务 。
? 商务基础平台:提高系统性能, 侧重于保障系统的效率,
可靠性和优化, 为商务系统的应用软件提供辅助功能, 例
如系统开发与维护环境, 负载平衡, 系统管理等;
? 商务服务平台:提供更多的商务服务, 为企业的核心商务
逻辑提供服务, 例如供应链管理, 客户关系管理等 。
? 商务支持平台的出现使得企业能够将更多的精力集中于其
核心业务的构建 。
? 商务支持平台通常具有一定的通用性, 是大部分企业都需
要的 。 是由 IT厂商将一些通用的, 与商务应用无关的的软
件, 与 Web服务器集成在一起, 组成的应用服务器软件包
。
Page 54
服务器软件发展概述
? 传统 Web服务器的作用相当于使用 HTTP协议的文件服务
器,在这个平台上是无法实现逻辑处理、计算和数据库访问
等功能的。
? Web服务器的主要功能在于 Web页面的组织和存取,
? 功能丰富,CGI编程接口,其他应用开发接口,并增强了网
站管理等系统管理功能,有些产品的功能足以承担商务服
务处理的需要。
? 三层体系结构的提出和明确,更细致地层次划分又导致了
应用服务器的出现。将一些通用的、与具体商务应用无关
的软件集成为一个整体,为电子商务应用系统的运行提供
基础平台。
Page 55
Web服务器和应用服务器的主要功能以及
二者之间的关系
外部 应 用
HTML静 态页
JSP
Servlet
JavaApplet
EJB
ASP
WEB服 务
器管理
WEB服 务 器
应 用程序(商 务逻辑 )
组 件 处 理器
应 用服 务 引擎
应 用界面生成
服 务进 程 调 度
内容管理
事 务 管理
集成接口
开发 工具
ODBC
JDBC
CORBA
应 用服 务 器
商 务组 件第三方 组 件
服 务 器 /系 统 管理
安全管理
Java虚 拟 机
( JVM)
HTTPD服 务
进 程
数据 库
Page 56
Web服务器的核心功能
?安全性
? FTP
?搜索
?数据分析
Page 57
其他功能
?网站管理、
?应用构造、
?动态内容
?电子商务等
Page 58
Web服务器产品
?两个截然不同的区域:内部网服务器和因特网服
务器。
?目前,Web服务器软件包有 30多种,有些只能在
一种操作系统上运行,有些则可以在多种操作系
统上运行。
?Apache和微软的 IIS( Internet Information Server
)服务器软件占有了大部分的市场份额,网景公
司 Enterprise Server和 O’ Reilly公司的 Website
Professional产品也有一定的市场份额。
Page 59
应用服务器
?将应用从 Web服务器和数据库中分离出来,为处理
大量的用户与事务提供了一个更为结构化的解决
方案。应用服务器还能够提供诸如均衡负载、线
程池和恢复服务等特性,这种事务处理能力使 Web
应用能更好地扩展并从失败中更好地 恢 复。
?应用服务器的版本很多,功能差异也较大。
Page 60
( 1)高性能的应用程序运行环境
?内容缓存
?数据库连接缓存
?支持进程的多线程执行
?大量用户访问情况下的负载均衡
?支持分布式联机事务处理
Page 61
( 2)其他
?为应用提供扩充性
?会话管理
?目录及内容管理
?商务引擎
?系统管理
– 性能配置管理
– 存取控制管理
– 系统日志管理
Page 62
应用服务器的优势
?开发优势
?实施优势
?集成的管理能力
?安全性
Page 63
应用服务器的选择
?总体目标
– 具有良好的可扩展性
– 具有跨平台性
– 统一的 MIS间数据存取接口
– 实现开放的信息共享
– 实现安全的信息共享
Page 64
选择的原则
? 1,基本特性
? 基本特性是指应用服务器的实现应包括的基本运行环境和
支持标准, 主要包括以下内容:
? ( 1) 国际标准的兼容性,对 J2EE支持的程度 。
? ( 2) 操作系统平台, 支持应用服务器运行的操作系统平
台 。
? ( 3) Web服务器, 应用服务器对 Web服务器的支持策略 。
? ( 4) 数据层支持:支持的数据连接标准;支持的数据库产
品 。
? ( 5) 对象模型支持,主要考察对分布式对象模型的支持
。
Page 65
选择的原则
? 2,扩展特性
? 扩展特性描述了应用服务器为了获得高性能和竞争能
力而需要提供的特性, 只要包括以下内容,( 1) 可用性,
( 2) 可伸缩性, ( 3) 可管理性 ( 4) 安全性, ( 5) 集成
性, ( 6) 开发有效性, ( 7) 对 Web Service的支持
? 3,其他需要考虑的方面
? ( 1) 性能价格比 ( 2) 售后服务及培训 ( 3) 应用服
务器版本的更新及升级 ( 4) 技术及产品供应商的发展前
景