第三章 Web应用的核心技术
第一讲:用于电子商务的
Web技术概述
作者:丁晓诚
电子商务 Web应用模型
应用特点:面向 大量用户,进行 在线事务处理 。
核心问题:如何面向 大量用户?怎样进行 在线事
务处理?
Web
服务器
浏览器
浏览器
应用
服务器 应用服务器 应用
服务器
数据库
属于 Web技术的部分
? Internet协议:以 HTTP协议为代表,面向
HTML页面传输。
? Web浏览器:一个客户端应用程序。通
过 Internet协议从 Web服务器端获取数据
或代码,并予以显示或解释执行。
? Web 服务器:通过 Internet协议,响应用
户请求。由一个专职倾听和应答用户请
求消息的守护进程和若干提供特定服务
的服务进程组成。
HTTP协议
? 对话双方:浏览器应用程序 vs,HTTP守
护进程。
? 分为四个步骤:打开连接 ->请求 ->响应 ->
关闭连接。
? 是一次一个回合的一对一对话。
? HTTP用于 HTML页面传输:服务器依据
客户请求中的条件,返回一个页面给客
户。
浏览器端技术
? 基础,标记语言解释器,HTML,XML
? 扩展:
–脚本语言解释器,JavaScript和
VBScript
–下载程序运行,Java Applet,ActiveX
服务器端技术
? 基本服务:从文件系统中返回静态页面。
? 扩展服务 ——支持页面的动态生成:
–服务器端程序加载技术:
?公共网关接口 ( CGI)
?插件技术,NSAPI,ISAPI
? Servlet
–服务器端脚本技术, Livewire,ASP、
JSP
公共网关接口( CGI)
? 最早的动态页面生成技术,HTTP守护进
程与网关程序之间的通信协议。
? 激活服务器端的某个程序,从已经被重
定向到 HTTP守护进程的标准输入或环境
变量读入参数,产生一个服务进程并执
行,结果生成一个 HTML文本,并向同
样被重定向了的标准输出写出。
CGI举例 ——Hello,You!
? HTML页面中的表单:
? <FORM ACTION="http://localhost/cgi-bin/test.exe" METHOD="POST">
? My name is <INPUT TYPE="TEXT" NAME="name">
? <INPUT TYPE="SUBMIT">
? </FORM>
? 服务器虚拟目录 /cgi-bin下的 greeting.exe( 源码):
? #include <stdio.h>
? void main()
? { char s[100];
? scanf("%s",&s);
? printf("content-TYPE,text/html \n\n");
? printf("<html><body>Hello,%s!</body></html>",&(s[5]));
? }
CGI缺点
? ( 1)一次用户请求产生一个进程,占用资源过多,难以用
于处理大量用户的密集请求。
? ( 2) CGI进程间通信十分困难,一般只能用文件读写作为
中介。
? ( 3) CGI没有安全框架,难以用于有较高安全性要求的事
务处理。
? ( 4) CGI没有对象模型,难以满足商业事务处理的要求。
? 其它服务器端程序动态加载技术都是对 CGI方式的
改进与扩充。
ISAPI——一个过渡性 改进
? 微软的技术。基本思路是由 HTTP守护进
程 加载可独立执行的网关程序改为加载
动态链接库,取消了启动与释放进程的
开销。
ISAPI评价
? ( 1)避免了 CGI启动的资源开销 ;
? ( 2)可以用全局变量改善不同调用间的通信
效率
? ( 3)仍然没有安全框架与对象模型;
? ( 4)由于 DLL与 HTTP守护进程共享地址空间,
从而导致一个 ISAPI程序的缺陷可能导致整个
HTTP服务器的瘫痪。
Java Servlet技术
? Servlet是使用 Java 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 时结束。
1)初始化:
? 在下列时刻装入 Servlet:
( 1)如果已配置自动装入选项,则在启动服务器时自动装
入;
( 2)在服务器启动后,客户机首次向 Servlet 发出请求时。
? 重新装入 Servlet 时:
装入 Servlet 后,服务器创建一个 Servlet 实例并且调用
Servlet 的 init() 方法。在初始化阶段,Servlet 初始化参数被
传递给 Servlet 配置对象。
Servlet的生命周期(续)
2) 请求处理
对于到达服务器的客户机请求,服务器创建特定于请求的
一个“请求”对象和一个“响应”对象。服务器调用 Servlet
的 service() 方法,该方法用于传递“请求”和“响应”对象。
service() 方法从“请求”对象获得请求信息、处理该请求并
用“响应”对象的方法以将响应传回客户机。 service() 方法
可以调用其它方法来处理请求,例如 doGet(),doPost() 或其
它的方法。
3) 终止
当服务器不再需要 Servlet,或重新装入 Servlet 的新实例时,
服务器会调用 Servlet 的 destroy() 方法。
创建 HTTP Servlet
Java Servlet 开发工具( JSDK)提供了多个软件包,其
中包括两个用于所有 Servlet 的基本软件包:
javax.servlet 和 javax.servlet.http
通常涉及下列四个步骤:
1) 扩展 HttpServlet 抽象类。
2) 重载适当的方法。如重写 doGet() 或 doPost()方法。
3) 如果有 HTTP 请求信息的话,获取该信息。
用 HttpServletRequest 对象来检索 HTML 表格所提交
的数据或 URL 上的查询字符串。 "请求 "对象含有特
定的方法以检索客户机提供的信息:
创建 HTTP Servlet(续 )
4) 生成 HTTP 响应。 HttpServletResponse 对象生
成响应,并将它返回到发出请求的客户机上。
它的方法允许设置“请求” 标题和“响应”主
体。
"响应 "对象还含有 getWriter() 方法以返回一个
PrintWriter 对象。使用 PrintWriter 的 print() 和
println() 方法以编写 Servlet 响应来返回给客户
机。或者,直接使用 out对象输出有关 HTML文
档内容。
调用 servlet
? 由 URL 调用、
? 在 <FORM> 标记中调用、
? 在 <SERVLET>标记中调用、
? 在 JSP 文件中调用、
? 在 ASP 文件中调用。
Servlet举例
? HTML页面中的表单:
? <FORM ACTION="http://localhost/servlet/test"
METHOD="POST">
? My name is <INPUT TYPE="TEXT" NAME="name">
? <INPUT TYPE="SUBMIT">
? </FORM>
Servlet举例(续)
? import java.io.*;
? import java.util.*;
? import javax.servlet.*;
? import javax.servlet.http.*;
? public class test extends HttpServlet
? implements SingleThreadModel
? {
? private ArrayList valueList;
?
? public void init(ServletConfig config) throws ServletException
? {
? super.init(config);
? valueList = new ArrayList();
? }
? public void doPost(HttpServletRequest req,HttpServletResponse res)
? throws ServletException,IOException
? {
? int i;
?
? res.setContentType("text/html");
? PrintWriter toClient = res.getWriter();
? try {
? String value = req.getParameterValues("name")[0];
? valueList.add(value);
? toClient.println("<html>");
? toClient.println("<title>Reuslts</title>");
? toClient.print("Hello");
? for (i=0;i<valueList.size();i++)
? toClient.print ("," + (String)valueList.get(i));
? toClient.print("!");
? toClient.println("</html>");
? } catch(Exception e) {
? e.printStackTrace();
? }
? toClient.close();
? }
? }
?
Servlet评价
? ( 1)面向对象编程,可采用多种对象模型
( JavaBean,RMI,Corba,COM/DCOM等 ),
开发效率高,可靠性好;
? ( 2)避免了 CGI启动的资源开销 ;
? ( 3)提供了丰富的通信包;
? ( 4)利用 Java完善的安全框架,商业开发安全
性好。
JSP技术
JSP( JavaServer Pages)是一种基于 Java的脚
本技术:
? 在 JSP 的众多优点之中,其中之一是它能将
HTML编码从 Web 页面的业务逻辑中有效地分
离出来。
? 用 JSP 访问可重用的组件,如 Servlet、
JavaBean和基于 Java 的 Web 应用程序。
? JSP 还支持在 Web 页面中直接嵌入 Java 代码 。
访问 JSP文件
Web
浏览器 JSP文件
Http请求某 JSP页面
Beans数据库


使





为Se
rvl
et
访问数据
JSP举例
浏览器通过一个 Web页面中的 HTML表单
请求一个 servlet( PopulateBeanServlet):
? servlet示例创建一个名为 dataBean 的
DataBean 实例,并调用 JSP 文件将内容
发送到浏览器。
? Servlet 示例和 JSP文件示例说明了启用
内容分离的 JSP访问模型。
JSP举例(续 1)
? import java.io.*;
? import java.beans.Beans;
? import javax.servlet.*;
? import javax.servlet.http.*;
? public class PopularBeanServlet extends HttpServlet
? { public void Service(HttpServletRequest req,HttpServletResponse res)
? throws ServletException,IOException
? { try {
? dataBean = (DataBean)Beans.instantiate(this.getClass().getClassLoader(),
"DataBean");
? } catch (Exception e) {e.printStackTrace();}
? dataBean.setProp1("Value1");
? dataBean.setProp2("Value2");
? dataBean.setProp3("Value3");
? ((com.sun.server.http.HttpServiceRequest)req).setAttribute("dataBean",dataBean);
? ((com.sun.server.http.HttpServiceResponse)res).callPage("/DisplayData.jsp",req);
? }
? }
JSP举例(续 2)
? <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>
XML技术
? XML是 SGML( Standard Generalized
MarkupLanguage)的一个优化子集。
? SGML是 ISO在 1986年推出的一个用来创建
标记语言的语言标准,它源自 IBM早在 1969
年开发的 GML,该语言的名称也正好包含
了三位创始人姓字的第一个字母,他们分
别是 Charles F,Goldfarb,Edward Mosher,
Raymond Lorie。
? SGML的复杂性使其难以直接应用到 Internet
上,这也是它没有被广泛接受的主要原因。
XML技术(续)
? 作为一个用 SGML定义标记语言的典型例子,
HTML是专为 Web上发布超文本而设计的标记语言。
正是 HTML使 Web迅速成为世界图书馆。但是,
HTML本质上主要关注 Web浏览器如何在页面上安
排文本、图象和按钮等,过多地考虑外观使其缺
乏对结构化数据的表示能力。
? HTML中有限的标记不能满足很多 Web应用的需要,
如基于 Web的大型出版系统和新一代的电子商务,
而为各种应用需要不断地往 HTML中增加标记显然
不是最终的解决方法,究其原因是 HTML缺乏可扩
展性。
? 解决方案应该是简化 SGML使之能应用到 Web上。
XML文档
XML是一种元标记语言,使用者可按需创建新
的标记,XML的可扩展性就在于此。
带标记的元素是 XML文档的构造块,这种元素
可以有若干个属性,并可以包含零个或多个子
元素。这些子元素可以是文本数据,也可以是
带标记的元素。
XML文档示例如下:
<?XML VERSION="1.0" ENCODING="UTF-8"?>
<!DOCTYPE Shoelist SYSTEM
"http://www.saleShoe.com/Shoelist.dtd" >
<Shoelist>
<Shoe id="shoe1" style="Sandal" >
<color>Brown</color>
<size>9 1/2</size>
<customize XML-LINK="EXTENDED" INLINE="TRUE"
SHOW="REPLACE">
<LOCATOR XML-LINK="LOCATOR"
HREF="http://www.produceshoes.com.cn">
在中国定制
</LOCATOR>
<LOCATOR XML-LINK="LOCATOR"
HREF="http://www.produceshoes.com">
在美国定制
</LOCATOR>
</customize>
</Shoe>
</Shoelist>
DTD
? XML文档可以在它的文档类型声明 (Document
TypeDeclaration)里声明某个 DTD( Document
TypeDefinition,文档类型定义)。如上述 XML文档
的 DTD由文件 Shoelist.dtd定义。
? DTD是关于 XML文档中出现的标记和元素结构的语
法约束,它可用来验证一个 XML文档。 DTD是一系
列关于元素类型( Element Type),属性
( Attributes),实体( Entities)和符号( Notations)
的定义。
? DTD定义了文档所需的标记,比如可在文档里使用
的元素类型,这些元素之间可能的联系,等等。
DTD示例如下:
<!ELEMENT Shoelist (Shoe)* >
<!ELEMENT Shoe (color,size,customize)>
<!ELEMENT color (#PCDATA)>
<!ELEMENT size (#PCDATA)>
<!ELEMENT customize
(#PCDATA|LOCATOR)*>
<!ELEMENT LOCATOR ANY>
<!ATTLIST Shoe
id ID #REQUIRED
style IDREF #REQUIRED>
<!ATTLIST customize
XML-LINK CDATA #FIXED "EXTENDED" INLINE (TRUE|FALSE) "TRUE"
SHOW (EMBED|REPLACE|NEW) "NEW">
<!ATTLIST LOCATOR
XML-LINK CDATA #FIXED "LOCATOR" HREF CDATA #REQUIRED>
XML的特性
? 可扩展性:利用 XML DTD; XML Schema
等定义新的 XML文档格式。
? 灵活性:为同一文档提供客户化的显示
方法。
– XSL(Extensible Stylesheet Language,可
扩展样式表语言 )
– CSS2(Cascading Style Sheets Level 2)
XML的用途
? 不同系统间的数据交换。
? 开放的数据接口定义。
? 搜索引擎的变革:计算机也能读懂网页!
? XML应用举例
? MathML,SMIL,SVG……
? 一个 SVG的例子:
? <?xml version="1.0"?>
? <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG August 1999//EN"
? "http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">
? <svg width="4in" height="3in">
? <desc>ttt SVG tttttttttttttttt</desc>
? <g>
XML文档的一句话概括
是文档的数据库化和数据的文档化。
完毕,谢谢!