loading ...

Q网志

my web and me.
显示标签为“JavaBeans”的博文。显示所有博文
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>

...... [阅读全文]

第三章 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:\WWW\HTML,在安装该Web服务器软件时可以指定Web文档根目录。当服务器收到的URL请求没有规定文件名字时,Web服务器会在相应的目录里搜索某个文件名列表,该文件名列表称为欢迎页面(Welcome Pages)列表。欢迎页面列表通常包括Welcome.html和index.htm等。关于目录映射,Go WebServer使用URL传递规则来实现所需的目录映射。传递模板及示例如下:
bgColor=#ffffff border=1>
传递模板
动作
请求模板
替代的文件路径
示例
Pass
/test/*
c:\myhome\test\*

其中,请求模板代表被请求的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:\www\cgi-bin\*
Pass
/*
c:\www\html\*
Pass
/abc.html
c:\abc.html

URL请求与实际的系统资源之间的对应举例如下:
表3-1:URL到系统资源之间的对应举例
URL请求
对应的系统资源
应用的规则
/cgi-bin/search.exe
c:\www\cgi-bin\serch.exe
规则1)、2)
/index.html
c:\www\html\index.html
规则3)
/beta/download.html
c:\www\html\test\download.html
规则1)、3)
/abc.html
c:\www\html\abc.html
规则3)

在匹配了Map规则以后,服务器会继续比较余下的规则。服务器会在Exec和Pass规则后停止比较。第4个规则永远不会被使用,因为任何可以匹配第4个规则的都会匹配第3个规则。因此,Pass /* 规则通常应该放在最后。
4.服务器日志
缺省地web服务器会在c:\www\logs目录下记录所有东西,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.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) 框架
左边的框架显示所选项目及其文件夹的图形分层。右边的框架显示在左边框架中选择的一些项目的细节。
 一个项目可包含文件和文件夹。
 文件夹可包含文件或其它文件夹。
 文件包含数据。

您可以按喜欢的方法来组织文件,并使它容易地将一个项目中的有关文件作为一个单元进行管理,比如,公布一个项目中的若干个文件或所有文件至目标服务器上(如 WebSphere 应用服务器)。
(2) 分解视图
当您从视图菜单中选择分解视图表,文件夹及子文件夹中的所有文件将显示在详细视图表中。表格包括附加的路径信息以帮助您区分它们。文件夹本身不显示。 快捷方式按钮位于工作台的右下方,您可对分解视图的开或关进行切换。
(3) 工具栏和按钮
此界面包括菜单栏、工具栏、状态栏和过滤器按钮的垂直行。
 菜单栏允许您访问所有的可用功能。
 工具栏允许您快速访问大多数的普通功能和向导。
 过滤器通过文件扩展名或文件类型来控制显示文件。
 状态栏列出一般信息,例如您的视图的大小和对象的数目,也包括被过滤器隐藏的文件数。

(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) 预览文档

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)中的一页
 项目-在工作区中所有项目及所含包、类的树状视图
 包-所有包、类、方法的树状视图
 类-工作区中的所有类的列表
 接口-工作区的所有接口及其方法的列表
 所有问题-所有出错元素及相应错误信息的列表

项目页允许你为一个元素作标签,这样只需简单的一次单击就可定位到它。另外,当你保存文件时,将进行编译和错误标志,更正错误无需长时间编译,从而体现了应用的快速开发。使用VAJ的工作台进行Java 编程的步骤如下:
 创建项目(和包)
 创建类(可使用向导)
 添加方法(可使用向导)
 在源代码页中编辑方法,在菜单上单击保存-将进行快速编译
 单击“运行”按钮测试代码

使用VAJ的导入/导出功能可以将有关文件(JAR、class、java)导入或导出VAJ的开发环境。值得关注的是,WebSphere可在整个VAJ中运行,允许你在VAJ环境中编写和调试servlet和JSP。对于VAJ2.0来说,需要下列步骤:
 安装VisualAge for Java update
 载入JSP 执行监视器,改正语法错误
 在com.ibm.servlet包中启动SERunner web服务

而VAJ3.0已经和WebSphere Application Server、WebSphere Studio、DB2 Universal Database紧密集成,从而成为IBM电子商务应用框架的关键点。VAJ3.0的新的特性主要包括:
 WebSphere 测试环境
 JSP/Servlet 开发环境
 存贮过程构建器
 SQLJ工具
 EJB 开发环境(VAJ3.0企业版)
 Domino企业存取构建器(VAJ3.0企业版)
 XML元数据交换(XML Metadata Interchange、XMI)工具包(VAJ3.0企业版-技术预演)

...... [阅读全文]

第一章 电子商务基础知识

Web正改变着我们生活的方方面面,但任何领域都没有象商务运作方式那样经历着一场快速而巨大的变革。众多商家正在准备或已经走向转变到电子商务的道路,即使用Internet技术转变关键的商务过程。本章介绍电子商务理念及有关技术基础,包括Internet、Web和Java。

1.1 电子商务理念

从20世纪70年代以来,很多机构依靠电子数据交换(EDI、Electronic Data Interchange)实现业务处理的自动化。EDI着重于商业伙伴之间的事务处理标准化,但是EDI标准缺乏灵活性和可扩展性。进入20世纪90年代,随着Web技术的发展,尤其是在1995年Java出现以后,许多机构开始采用Web应用系统来支持电子商务。电子商务(e-business)是指借助Internet及相关技术进行商务活动,而一个电子商务(an e-business)是这样的一个机构,它通过内部网、外部网和Web将关键业务系统直接连接到客户、员工、供应商和业务伙伴。一个机构要转型为一个电子商务,就要使用Internet技术转变关键的业务过程,如客户关系管理、电子商贸、供应链管理、企业内部管理。这个转变过程也是一个综合使用Internet技术、信息技术、商务技术转变业务方式的过程。
然而,电子商务不仅仅是技术更新。转变到电子商务必须对需要做什么有一个明确的蓝图,以及对实现这个蓝图有一个清晰的发展指南。电子商务周期模型正是为企业开展电子商务提供了一个模型。电子商务周期(参见图1-1)由四个组成阶段,包括转变、构造、运行和利用。想要转变到电子商务的机构无论何时均可以从任何一个阶段开始。这也是一个重复的过程。
图1-1:电子商务周期模型


1)转变阶段是关于转变核心的商务过程,也就是要将现有的商务模型扩展到网络世界以创造一个电子商务模型。应用Internet技术为商务创造最大限度的价值,电子商务改变着客户关系管理、供应链和电子商贸的传统准则。在转变商务过程时,每一个商务过程应该放在整体环境中加以考虑。否则,充其量只是离散的各个更好的商务过程,无法带来期望的改善客户服务和提高电子商务价值的效果。
2)构造阶段是关于构造新的应用系统。转变核心的商务过程需要新一代的应用系统。构造阶段也包括使用一个基于开放标准的途径将已有应用系统迁移到Web上。要求电子商务应用系统是基于标准的、以服务器为中心的、可伸缩的、可快速部署、易用和易管理的。
3)运行阶段涉及一个可伸缩的、可用的、安全的运行环境。围绕着商务和应用系统通常有一个基础设施。基础设施提供的服务要求是可用的、可伸缩的、易管理的和安全的。
4)利用阶段是关于知识和信息的利用。这里的焦点是知识管理,也就是说利用我们知道的东西。与信息管理不同,知识管理包括对显式知识和隐式知识的管理。传统的IT系统处理的是显式知识,即能写下来并能编程处理的。而隐式知识是人们知道的但没有被写下来的东西,它基于直觉、经验和洞察力。
从简单的开始,快速地增长。从现有的基础上构造电子商务应用系统,逐步将核心业务扩展到Internet上,最终实现电子商务带来的巨大的投资回报。然而,电子商务的技术基础主要包括Internet、Web和Java,本章以下各节介绍这些技术的基础知识。

1.2 Internet基础知识

Internet已经成为企业、政府和研究机构共享信息的基础设施,同时也是开展电子商务的基础。Internet 的先驱是ARPANET。美国国防高级研究计划局 (Defense Advanced Research Project Agency、简称DARPA)于20 世纪 60 年代后期资助开发了一种叫做 ARPANET的实验性通讯系统。起初,它仅用于连接美国军事机构的计算机网络,但随后不久,这个网络很快扩展到与国防有关的公司和研究机构。从此,面向特定应用需求的不同网络协议及网络技术相继出现,同时也带来了网络互连的问题。如果两个网络使用不同的协议,即使采用某种网络技术将它们在物理上互相连接起来,应用系统(如邮件系统)之间也无法相互沟通。为此,很多组织,如CCITT(Consultative Committee on International Telephony and Telegraphy,现在成为 ITU-T,即International Telecommunications Union - Telecommunication Standardization Sector)和ISO(国际标准化组织),开始考虑定义一套分层协议族,使得应用系统之间能相互通信,即使这些应用系统运行在不同的网络环境中(如不同的操作系统和不同的网络技术)。DARPA从1970年左右开始研究一套称之为TCP/IP的分层协议族,于1978年左右基本定形。ARPANET于1980年左右开始采用TCP/IP协议族,并于1983年全面实现。与此同时,TCP/IP协议族在 UNIX操作系统中也得到了实现(由加利福尼亚大学伯克利分校完成),并免费分发。从此,TCP/IP在大学和研究机构中迅速传播,并成为连接UNIX系统的标准协议。这些互相连接的网络广泛深入到大学和其它组织(一开始主要是非赢利组织)。由于个人计算机的迅速普及,该网络扩展到全球大部分地方,并且开始吸引成千上万的个人以及赢利组织加入,由此逐渐形成了所谓的 Internet(因特网)。Internet指的是全球性互连网络。它由下列网络群构成:
1)主干网:通常为大规模网络,这些网络主要用来与其它网络互连,如美国的NSFNET(NSF是指美国国家自然科学基金会)、欧洲的EBONE、大型的商用主干网。
2)区域网:如连接大专院校的区域网。
3)商用网络:为客户提供连接骨干网的服务的网络,或只供公司内部使用且连接到Internet的网络。
4)局域网:如校园网。
90年代,Internet发展十分迅猛,这与1991年HTML的问世和Gopher的免费发放有关,也与1993年Mosaic的问世有关,Internet的商用也加速了Internet的扩张。到20世纪末,Internet已经成为一种通过服务器将小型网络连接起来的错综复杂的网络结构。大部分情况下,服务器通过专门进行 Internet 通讯的线路来传送数据。个人计算机则通过直接线路,或者通过电话线和调制解调器连接到这些服务器上。直接线路一般是高速的电讯线路,专门用于在建筑物之间或组织之间传送数据。而标准的电话线路,现在主要是综合业务数字网络(ISDN)的线路,则通常用于连接个人计算机。

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,关于这些组件体系结构的深入讨论超出了本书的范围。

...... [阅读全文]

博客订阅

feedsky Technorati Join My Community at MyBloglog!
抓虾 pageflakes
Rojo google reader
netvibes my yahoo
newsgator bloglines
鲜果 哪吒
有道 分享到饭否

标签云集

Heartnn@饭否

日志归档

最新日志

最新评论

我的收藏夹

门户
技术
游戏

关注者