2006年06月27日

img{
 border:0;
}
h6{
 padding:6px;
 border: #AACBEE 1px solid;
 font-size: 11px;
 background:#ECF5FE;
 color: #064d9f;
 font-weight:normal;
}
#classnavbar{
 display:none;
}
.dateTitle{
 text-align:right;
 font-size: 0.8em;
}
#top { 
 color: #000;
 border-bottom: #fff 1px solid;
 height: 40px;
 background-color: #3A77BA;
}
#tagline {
 padding: 5px;
 font-size: 1em;
 MARGIN: 0px;
 color: #fff;
 border-bottom #fff 1px solid; 
 background-color: #369;
}
p.date{
 color:#064D9F;
 font-weight: normal;
 font-size: 0.7em;
 text-align:right;
 border-top:1px dashed #AACBEE;
}
#main {
 border-bottom : 1px dashed #AACBEE;
}
.postTitle{
 padding:6px;
 border:1px solid #AACBEE;
}
h5{
 padding:6px;
 border:1px solid #AACBEE;
}
A:link {
 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
}
A:visited {
 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
}
A {

 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
}
A:hover {
 color: #080;
 text-decoration: underline;
}
#comments h3{
 border-bottom:1px dashed #AACBEE;
}
#comments p{
 border-bottom:1px dashed #AACBEE;
 padding:5px;
}
#commentform td{
 font-size: 0.7em;
 color:#064d9f;
 font-weight:normal;
}
#commentform td input{
 border:1px solid #AACBEE;
}
#commentform td textarea{
 border:1px solid #AACBEE;
}
#commentform{
 background:#ECF5FE;
 border:1px solid #AACBEE;
 text-align:center;
}
#leftmenu {
 width:180px;
 position: absolute;
 left: 0;
 padding:10px;
 background:#ECF5FE;
}
#leftmenu H3 {
 padding: 4px;
 font-size: 1em;
 margin 0px;
 border-bottom: 1px solid #AACBEE;
}
#leftmenu LI {
 display: block;
}
#leftmenu A:active {
 display:inline;
 color: #064D9F;
 border: 0;
 background-color: transparent;
 text-decoration: none;
}
#leftmenu A:visited {
 display:inline;
 color: #064D9F;
 border: 0;
 background-color: transparent;
 text-decoration: none;
}
#leftmenu A:link {
 display:inline;
 color: #064D9F;
 border: 0;
 background-color: transparent;
 text-decoration: none;
}
#leftmenu A:hover {
 display: inline;
 color: #080;
 border: 0;
 background-color: transparent;
 text-decoration: underline;
}
#nadframe{
 display:none;
}
.postFoot{
 padding-left: 8px;
 font-size: 0.8em;
}
.postTitle A:link {
 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
 font-weight : bold;
}
.postTitle A:visited {
 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
 font-weight : bold;
}
.postTitle A {
 color: #064d9f;
 background-color: transparent;
 text-decoration : none;
 font-weight : bold;
}
.postTitle A:hover {
 color: #080;
 text-decoration: underline;
 font-weight : bold;
}
.postText{
 padding-left: 12px;
}

2006年04月21日

"白天是为了生存,晚上是为了发展"

" 你想不想成功,你是好象要,还是要,应该要,还是一定要?只有一定要的人你才会成功"

"人们对你的期望就是唐僧的紧箍咒,你有多大的本事,你有多高的地位,人们对你的期望也随之而长。所以你想快乐必须学会自我欣赏。不然你永远活在别人的期望之中而不得快乐。"

apache + PHP win配置文档

软件:apache_2.0.55-win32-x86-no_ssl  
         php-5.0.5-Win32

将php-5.0.5-Win32复制到 C 盘 改名为 php

PHP安装目录下的"php5ts.dll"必须要复制到windows系统的system32目录下

#修改php.ini其中有必要注意的是
 
display_errors = On
register_globals = On

将"php.ini",然后复制到系统目录winnt下

#编辑apache2/conf/httpd.conf

LoadModule php5_module c:/php/php5apache2.dll

ScriptAlias /php/ "C:/php/"

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
Action application/x-httpd-php "c:/php/php.exe"

############
配置apache
c:Apache2/bin>
输入apache -k install
输入apache -k start
##############

测试页
<?php
phpinfo();
?>

100  Continue  初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 

101  Switching Protocols  服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新) 

200  OK  一切正常,对GET和POST请求的应答文档跟在后面。

201  Created  服务器已经创建了文档,Location头给出了它的URL。 

202  Accepted  已经接受请求,但处理尚未完成。 

203  Non-Authoritative Information  文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。 

204  No Content  没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。 

205  Reset Content  没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
 
206  Partial Content  客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。
 
300  Multiple Choices  客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
 
301  Moved Permanently  客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。 

302  Found  类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。
出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。

注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器返回301,有的则返回302。

严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。
 
303  See Other  类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。 

304  Not Modified  客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。 

305  Use Proxy  客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。 

307  Temporary Redirect  和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。(HTTP 1.1新) 

400  Bad Request  请求出现语法错误。 

401  Unauthorized  客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。 

403  Forbidden  资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。 

404  Not Found  无法找到指定位置的资源。这也是一个常用的应答。 

405  Method Not Allowed  请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新) 

406  Not Acceptable  指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。 

407  Proxy Authentication Required  类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新) 

408  Request Timeout  在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新) 

409  Conflict  通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新) 

410  Gone  所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新) 

411  Length Required  服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新) 

412  Precondition Failed  请求头中指定的一些前提条件失败(HTTP 1.1新)。 

413  Request Entity Too Large  目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。 

414  Request URI Too Long  URI太长(HTTP 1.1新)。 

416  Requested Range Not Satisfiable  服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新) 

500  Internal Server Error  服务器遇到了意料不到的情况,不能完成客户的请求。 

501  Not Implemented  服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。 

502  Bad Gateway  服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。 

503  Service Unavailable  服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。 

504  Gateway Timeout  由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新) 

505  HTTP Version Not Supported  服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新) 

2006年03月14日

org.apache.struts.action
 
基本上,控制整个struts framework的运行的核心类、组件都在这个包中,比如我们上面提到的控制器ActionServlet。已经Action,ActionForm,ActionMapping等等。struts1.1比1.0多了 DynaActionForm 类。增加了动态扩展生成FormBean功能
 
org.apache.struts.actions
 
这个包是主要作用是提供客户的http请求和业务逻辑处理之间的特定适配器转换功能,而1.0版本中的部分动态增删FromBean的类,也在struts1.1中被Action包的DynaActionForm组件所取代
 
org.apache.struts.config
 
提供对配置文件struts-config.xml元素的映射。这也是sturts1.1中新增的功能
 
org.apache.struts.util
 
Strtuts为了更好支持web application的应用,体统了一个些常用服务的支持,比如Connection Pool和Message Source。
 
org.apache.struts.taglib
 
这不是一个包,而是是一个客户标签类的集合。下面包括Bean Tags,HTML Tags,Logic Tags,Nested Tags,Template Tags这几个用于构建用户界面的标签类。
 
org.apache.struts.validator
 
Struts1.1 framework中增加了validator framework,用于动态的配置from表单的验证。 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
      
<struts-config>
  <!– ============ Data Source =================================== –>

  <!– ========== Form Bean Definitions =================================== –>
  <form-beans>
    <form-bean      name="logonForm"
                          type="addressbook.forms.LogonForm"/> 
  </form-beans>
 
  <!– ========== Global Forward Definitions ============================== –>
  <global-forwards>
    <forward   name="logoff"              
       path="/logoff.do"/>
  </global-forwards>


  <!– ========== Action Mapping Definitions ============================== –>
    <action-mappings>
    <!– Process a user logon –>
    <action    path="/logon"
                   type="addressbook.actions.LogonAction"
                   name="logonForm"
                   scope="request"
                   input="/logon.jsp">
    <forward name=“success”path=“/home.do”/>
    </action>
    </action-mappings>
 
  <message-resources parameter="addressbook.ApplicationResources"/>
</struts-config>

详解:

每个<form-bean>子元素都包括下列属性:
name
   表单bean的名称,稍后在配置文件中会用到。ActionServlet举例说明了该bean(如果需要的话)并在将对bean的引用存储在请求或会话对象中时将该名称用作键。

type
 类的全限定名称,它继承org.apache.struts.action.ActionForm该类必须在类路径中。接受“Struts贸易样本”中的注册的表单bean包括HTML注册表单中每个字段的getter 和setter方法。该bean还包括验证方法,如下节“验证”中所述。

每个<action>元素都包括下列属性中的某些属性或所有属性:
path

    将请求指定为非限定URL,不带文件扩展名(例如,“/register”)请求是根据<action>元素中的其它属性来处理的,并且是用户输入的结果或者是在different<action>元素中标识的转发的结果。

type
    指定在发出请求时调用其执行方法的操作类的全限定名。该类必须在类路径中。
    注:不指定要实例化的类,可以通过使用forward属性来转发请求,该属性在“Struts贸易样本”中未使用,并且与后面描述的<forward>子元素不相同。

name
   用于保存发送至HTML表单或接收自HTML表单的数据表单bean的名称。

input
   指定相对URL(例如,“/register.do”或“/index.jsp”)必须包括后缀,
如果表单bean的验证方法指示发生了输入错误,则会调用URL;

scope
    指定将对表单 bean的引用存储在哪个作用域中。其值为“会话”(缺省值)或“请求”。

<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>application</param-name>
      <param-value>ApplicationResources</param-value>
    </init-param>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>2</param-value>
    </init-param>
    <init-param>
      <param-name>validate</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>

<!– Standard Action Servlet Mapping 将所有的以.do为扩展名的页面的请求交给ActionServlet处理 –>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

<!– Struts Tag Library Descriptor –>
    <taglib>
      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>

<!– The Welcome File Liet –>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

2005年08月24日

《程序员》杂志05年第二期原文,个人网站转载请注明作者(王林/Azure)和出处(中国RIA开发者www.riacn.com)并且保留这段版权说明,商业网站转载需要得到CSDN的许可。

RIA技术概览

互联网已经日益成为应用程序开发的默认平台,传统的Web应用程序(Web Application)是基于HTML页面、服务器端数据传递的模式。而HTML是适合于文本的,随着Web应用程序复杂性越来越高,传统的Web应用程序已经渐渐不能满足Web浏览者更高的、全方位的体验要求了,这就是被Macromedia公司称之为的"体验问题"("Experience Matters")。此时一种被称为Rich Internet Application(简称RIA,中文翻译作"丰富互联网应用程序")的具高度互动性和丰富用户体验的网络应用程序出现了。Macromedia公司也借此机会开发了相关的技术和开发工具,促进RIA的开发和普及。

1. RIA的产生背景
企业级应用程序经历了几次系统架构方面的重要转变,在此过程中,客户端的表现能力有起有落。图1显示了Rich Internet Application的发展过程:

图1.Rich Internet Application的发展(摘自Macromedia Flex:创建企业Rich Internet
Application 的表示层解决方案)

  • 基于主机的应用程序:应用程序提供基于文本的非图形化用户界面,只有内部人员才能进行访问。
  • 客户机/服务器(Client/Server,简称C/S)应用程序:二十世纪九十年代随着Windows的出现和客户端处理能力的增强,出现了客户机/服务器应用程序,它们采用图形用户界面,客户端的数据处理能力比较强。但由于客户端应用程序需要进行不断的更新,因此部署成本比较高,只能为少数人所使用。
  • 浏览器/服务器(Browser/Server,简称B/S)应用程序:九十年代中期,互联网飞速发展,出现了浏览器/服务器应用程序,Web的广泛使用解决了C/S应用程序部署、和更新的困难。但由于采用了HTML页面形式的用户界面,客户端的数据处理能力较C/S应用程序有所回落。


C/S架构的缺点主要是部署、更新的问题。B/S架构的缺点主要是受制于HTML的限制,无法像C/S那样使用丰富的效果来展示数据,用户体验比较糟糕。另外,稳定的客户端/服务器连接,也是必要条件,网络中断将使B/S程序无法运行。从C/S到B/S,这两者受限于技术本身分别发展成了重客户端和重服务器端的模式,而RIA的出现给我们带来重新在客户端和服务器端进行更好的平衡的机会。

2. 什么是RIA
RIA 是集桌面应用程序的最佳用户界面功能与Web应用程序的普遍采用和快速、低成本布署以及互动多媒体通信的实时快捷于一体的新一代网络应用程序。RIA中的 Rich Client(丰富客户端)提供可承载已编译客户端应用程序(以文件形式,用HTTP传递)的运行环境,客户端应用程序使用异步客户/服务器架构连接现有的后端应用服务器,这是一种安全、可升级、具有良好适应性的新的面向服务模型,这种模型由采用的Web服务所驱动。结合了声音、视频和实时对话的综合通信技术使RIA具有前所未有的网上用户体验。
下图就是RIA的应用程序模型:

图2.RIA的应用程序模型

3. RIA的优势
RIA 具有的桌面应用程序的特点包括:在消息确认和格式编排方面提供互动用户界面;在无刷新页面之下提供快捷的界面响应时间;提供通用的用户界面特性如拖放式(drag and drop)以及在线和离线操作能力。RIA具有的Web应用程序的特点包括如:立即布署、跨平台、采用逐步下载来检索内容和数据以及可以充分利用被广泛采纳的互联网标准。RIA具有通信的特点则包括实时互动的声音和图像。

客户机在RIA中的作用不仅是展示页面,它可以在幕后与用户请求异步地进行计算、传送和检索数据、显示集成的用户界面和综合使用声音和图像,这一切都可以在不依靠客户机连接的服务器或后端的情况下进行。

对于企业来说,部署RIA的好处在于:
1)RIA可以继续使用现有的应用程序模型(包括J2EE和.NET),因而无需大规模替换现有的Web应用程序。通过Rich Client技术,可以轻松构建更为直观、易于使用、反应更迅速并且可以脱机使用的应用程序。

2)RIA可以帮助企业提供多元化的重要业务效益,包括产提高销量、提高品牌忠诚度、延长网站逗留时间、较频繁的重复访问、减少带宽成本、减少支持求助以及增强客户关系等。

4. RIA目前的发展态势
在过去的两到三年中,Web开发人员一直是想构建一种比传统HTML更丰富的客户端:这是一个用户接口,它比用HTML能实现的接口更加健壮、反应更加灵敏和更具有令人感兴趣的可视化特性。RIA技术的出现允许我们在因特网上以一种像使用Web一样简单的方式来部署富客户端程序。无论将来RIA是否能够如人们所猜测的那样完全代替HTML应用系统,对于那些采用C/S架构的胖客户端技术运行复杂应用系统的机构和采用基于B/S架构的瘦客户端技术部署Web应用系统地机构来说,RIA确实提供了一种廉价的选择。下面介绍一下目前出现的几种比较有实力或者有特点的RIA客户端开发技术:

1) Macromedia Flash/Flex
Flash 从6.0开始Flash就逐步具备建立窗体风格的应用程序的功能。据Macromedia称已经有98%以上的桌面系统的浏览器都安装了 Macromedia Flash Player。这使得以Macromedia Flash Player为客户端的RIA可以支持种类广泛的平台和设备。
Flex是为满足希望开发 RIA的企业级程序员的需求而推出的表示服务器和应用程序框架,它可以运行于J2EE和.NET平台。Flex表示服务器提供基于标准的、声明性的编程方法和流程,并提供运行时服务,用于开发和部署丰富客户端应用程序的表示层。Flex开发者使用直观的基于XML的MXML来定义丰富的用户界面。该语言由 Flex服务器翻译成SWF格式的客户端应用程序,在Flash Player中运行。

2) Laszlo
Laszlo 是一个开源的RIA开发环境。使用Laszlo平台时,开发者只需编写名为LZX的描述语言(其中整合了XML和Javascript),运行在J2EE 应用服务器上的Laszlo平台会将其编译成SWF格式的文件并传输给客户端展示。从这点上来说,Laszlo的本质和Flex是一样的。Flash是任何浏览器都支持的展示形式,从而一举解决了浏览器之间的移植问题。而且,在未来的计划中,Laszlo还可以将LZX编译成Java或.NET本地代码,从而大大提高运行效率。

3) Avalon
Microsoft的Avalon是下一版本的Windows(代号"Longhorn")的一部分,是一个图形和展示引擎,主要由新加到.NET框架中的一组类集合而成。Avalon定义了一个在Longhorn中使用的新标记语言,其代号为"XAML"(可扩展应用程序标记语言)。可以使用XAML来定义文本、图像和控件的布局,程序代码可以直接嵌入到XAML中,也可以将它保留在一个单独的文件内。这与Flex中的MXML或者Laszlo中的LZX非常相似。不同的是:基于 Avalon的应用程序必须运行在Longhorn环境中,而Flex和Laszlo是不依赖于平台的,仅仅需要装有Flash播放器的浏览器即可。

4) Java SWT
Java 已经出现几年了,并且完全支持创建基于窗体的用户界面。除了Java基础类(JFC/Swing)中的用户界面组件之外,开发人员还可以使用来自于 Eclipse Project的SWT工具箱和许多第三方工具箱进行开发。对于图形来说,可以采用Java 2D API:一个非常完整且非常复杂的图形API。你可以通过一个Web浏览器使用Java插件软件,或使用Java运行时环境中较新的Java Web Start技术来部署应用程序。使用Java建立Rich Client的主要缺陷是它的复杂性(即使对简单的窗体和图形也要求编写非常烦琐的代码)和Java浏览器插件的低市场占有率。

5) XUL
XUL (念作"zool")是一种基于XML的用户界面语言,它来自于Mozilla的开放源码项目。它可用于建立窗体应用程序,这些应用程序不但可以在 Mozilla浏览器上运行,而且也可以运行在其他描述引擎上,如Zulu(一个Flash MX组件)和Thinleys(一个Java实现)。XUL描述引擎都非常小(100K以下),它可以使用XML数据也可以生成XML数据。XUL的一个主要缺点在于它目前还没有获得一个主要商业实体的支持。XUL最大的优点在于它与Gecko引擎的集成(打开了通向大量Web标准的大门),以及与大多数其它XML用户界面描述语言相比它是一种非常具有表达力和简洁的语言。

6) Bindows
Bindow 是用Javascript和DHTML开发的Web窗体框架。Javascript用于客户端界面的显示和处理,XMLHTTP用于客户端与服务器的信息传输。Javascript在客户端的表现力不容置疑,利用Javascript几乎可以实现Windows应用程序所能干的大部分事情,XMLHTTP 一直以来常被用于实现"无刷新"的Web页面,它和 Javascript配合,可以完成数据从服务器和客户端的传输。Bindows的一个主要的缺点是它采用一次全部载入的方式来实现脚本库,在窗口的加载期,需要一个漫长的等待过程,甚至浏览器的进程会产生无响应的情况。这点Bindows根本没有遵循"用多少去多少"的准则。另外,内部大量利用了IE6 的技术,没有考虑到非IE的浏览器,限制了Bindows的流行。

5. RIA未来的发展预测
就目前RIA的使用情况来说,离"RIA时代"还有很远的一段距离。今后几年时间内传统的Web应用程序和RIA将会共存。笔者认为真正具有实力担当起普及丰富客户端应用重任的只有基于Flash Player的Flash/Flex应用程序和Microsoft的基于Avalon的应用程序。短期时间内(估计2-3年时间)可能是 Flash/Flex应用程序在新兴的网络应用程序市场上占有主导地位。随着时间的推移,Flash/Flex应用程序的市场占有率可能会慢慢被基于 Avalon的应用程序所蚕食。当然,Flash Player和Flex以后也会不断推出新版本,相对于升级操作系统或安装Avalon运行环境,人们肯定更愿意升级Flash Player。Flash/Flex应用程序也有其本身固有的软肋,Flash Player的执行效率和对本地资源的操作限制是无法和Avalon相比的,相对于浏览器中的插件而言,Avalon的应用程序拥有更加广阔的可操作空间和更高的执行效率。

目前Microsoft还在推广一种叫做Smart Client(智能客户端)的客户端程序技术,Microsoft称Smart Client是比Rich Client更优秀的客户端,因而采用Smart Client的应用程序算不算RIA目前我个人还无法作答。这里我们之所以提及Smart Client,是因为Smart Client的特性跟我们谈的Rich Client有太多的相似之处。Smart Client拥有自动更新、离线状态下的数据处理和可以使用本地资源等特征,其中的可使用本地资源这一项无疑是一大卖点,因为浏览器中的 Flash/Flex应用程序目前还无法操作本地的一些资源,比如Flash/Flex应用程序无法将网上的文件保存到本地或者修改本地文件。虽然 Macromedia的Central1.5已经可以对本地文件进行简单的操作,并且flex1.5开发的RIA也能够运行于Central上,但是如何使Central能够得到大范围推广还是个问题。相对于轻量级的Rich Client,Smart Client更接近C/S架构中的客户端程序。Rich Client和Smart Client的定位还是有所区别的:Rich Client更适合作为轻量级的基于浏览器的网络应用程序客户端;Smart Client更适合作为Windows桌面应用程序的智能客户端。

不管我们今天称之为的RIA今后会不会成为主流应用程序,人们对开发具有高度互动性、丰富用户体验以及功能强大的客户端的追求是不变的。有理由相信,拥有成熟技术和极高市场占有率的Flash客户端将会在RIA道路上越走越远。Microsoft未来的重量级武器:Avalon和Smart Client能否后来者居上让我们拭目以待。

2005年06月08日

  /etc/squid/squid.conf squid主配置文件

#定义Squid服务的监听的端口。默认:3128
http_port 3128

#定义Squid可以使用的内存数量的理想值,一般为总内存的三分之一。因为实际运行,Squid使用的内存数量肯定远远超过它
cache_mem 8 MB

#指定Squid用来存储交换空间大小及目录结构。
cache_dir ufs /var/spool/squid 100 16 256

#用户端请求的数据的记录完整的路径,包括文件名称及所在的目录。该请求可以来自一般用户的web请求。
cache_access_log /var/log/squid/access.log

#Squid服务器普通信息的日志的完整路径。
cache_log /var/log/squid/cache.log

#指定对象存储记录日志的完整路径,该记录说明哪些对象被存储到对象空间中。
cache_store_log /var/log/squid/store.log

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80  # http
acl Safe_ports port 21  # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70  # gopher
acl Safe_ports port 210  # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280  # http-mgmt
acl Safe_ports port 488  # gss-http
acl Safe_ports port 591  # filemaker
acl Safe_ports port 777  # multiling http
acl CONNECT method CONNECT

#对所有来自子网的HTTP请求均不作限制。
http_access allow all

# 禁止来自!Safe_ports的HTTP请求。
http_access deny !Safe_port

# 设置cache管理员的邮件箱地址。
#cache_mgr reason@nou.com.cn

acl
访问权限列表
acl aclname src ipadress/netmask

类型:
src dst srcdomain dstdomain time port protocol method browser uer

src 指明源地址
src aclname src ipadress/netmask

dst 指明目标地址
src aclname dst ipadress/netmask

srcdomain 指明客户的源地址
src aclname srcdomain domain

dstdomain 指明请求服务器的域名
src aclname dstdomain domain

time 指明访问时间
acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]

post 指定访问端口
acl aclname port [1~1024]

method 指定的请求方法
acl aclname method get post…

visible_hostname squid

#/etc/init.d/squid start

#/etc/init.d/squid stop

2005年06月07日

/* mozilla.org Base Styles
* maintained by fantasai
* (classes defined in the Markup Guide – http://mozilla.org/contribute/writing/markup)
*/
/* Suggested order:
//显示属性
* display
* list-style
* position
* float
* clear
//自身属性
* width
* height
* margin
* padding
* border
* background
//文本属性
* color
* font
* text-decoration
* text-align
* vertical-align
* white-space
* other text
* content
*
*/