第1章 概述
第2章 基础结构描述
2.1 目标
网站基础结构设计的目标,是建立一个稳定高效、可配置、可扩展的网站架构,同时为网站的功能开发提供一个开放的、易用的工具集。
2.2 设计思想
根据网站基础结构的目标,设计选择 xml + xsl 作为数据呈现标准,选择 xmlrpc 为客户端-服务器端通信协议。
所以选择 xml + xsl 作为数据呈现标准,是为了适应网站大批量数据请求的情况下,将数据呈现逻辑移交给客户端浏览器进行处理,网站服务器可以专注与业务逻辑的处理。
选择 xmlrpc 作为客户端-服务器端通信协议,一方面因为 xmlrpc 已经开始为大多数浏览器支持,另外也因为服务器端将 xml 作为数据输出格式,那么使用 xmlrpc 作为客户提交的手段是顺理成章的。而且 xmlrpc 还可以提供无刷新提交和获取数据的使用体验。
2.2.1 逻辑处理部分
网站的基础结构,参考了 java 的开源项目《 struts 》以及《 Game Engine 》的设计思路,采用 action 作为业务逻辑处理工具,使用 xml 的配置文件作为业务逻辑的描述,即业务逻辑配置文档,服务器端的主要责任就是当用户发起请求时,将用户的请求映射到业务逻辑配置文档的某个 Action 配置节,读取信息并依照该小节的体现的业务逻辑处理用户请求,然后将处理结果保存在 Action Form 实体中,转交给视图,视图根据 Action Form 中的信息以及视图配置文档所设定的数据转换格式,将数据转换成可以接受的 xml 文档格式,连同负责呈现该 xml 文档结构的 xsl 文档一同发送给用户的浏览器客户端。
业务逻辑配置文档示例如下:
1<module name="moduleA" onerror="err.view">
2<action name="actionA" pattern="/login" type="action.ContainerAction">
3<action name="actionAA" type="action.CommonAction1">
4<forward on="ruleA" path=""></forward>
5<forward on="ruleB" path=""></forward>
6</action>
7<action ref="actionD"></action>
8<forward on="ruleOK" type="returnUrlForward"></forward>
9<forward on="ruleC" path="returnUrl.do" type="transfer"></forward>
10<forward on="ruleD" path="" type="transfer"></forward>
11<forward exceptiontype="" path="" type="transfer"></forward>
12</action>
13<action name="actionD" pattern="/login2" type="action.ActionD">
14<forward on="ruleA" path=""></forward>
15<forward on="ruleB" path=""></forward>
16</action>
17<form name="actionA" type="form.ActionAForm">
18<parameter name="" type="" validator=""></parameter>
19<parameter name="" type="" validator=""></parameter>
20</form>
21<rule name="ruleA" type="rule.IsMan">
22<input-param name="sex" select=""></input-param>
23</rule>
24<rule name="ruleA" type="rule.Equal">
25<input-param name="param1" select=""></input-param>
26<input-param name="param2" value="1"></input-param>
27</rule>
28</module>
在上面的文档示例中,作为业务逻辑的体现, Action 配置小节是最重要的一个环节,在该配置小节中,描述了用怎样的方法组成一个逻辑流程来处理用户的请求。每个方法在运行时对应的就是一个 Action 元素 , 每个 Action 元素都对应在系统内置的商业函数库中的一项,即一个 Action 类,另外 Action 元素也描述了自己的 ActionForm 的类型。 ActionForm 类型是用于收集客户端提交数据和其他信息,组成 Action 的输入参数集合。 ActionForm 类型由 Action 元素的名字确定。 Action 和 ActionForm 应该是一一对应的关系。
Action 元素中的 Forward 元素用于表达,当 action 的输出满足某个条件时,跳转到另一个 Action 配置小节或直接跳转到一个视图进行数据呈现处理。 Rule 元素描述了对条件判断的逻辑处理。
2.2.2 视图呈现部分
视图呈现,即将用户请求通过 action 的处理后,将生成的输出数据( ActionForm )转换成适当的 xml 数据格式,连通与此文档相关联的 xsl 文档发送到客户端进行呈现的过程。
在数据呈现部分, xsl 是 w 3c 的标准, xsl 依据一定的文档格式,编写数据呈现模板,把无格式的 xml 数据转换成含有格式的、浏览器可识别的 html 结构。
Xsl 所解释的文档格式必须具有确定性,即 xsl 的输入必须是符合一个特定 xml schema 的 well form & validate 的 xml 文档。所以如何将 ActionForm 中的信息,正确的转换到相应的 xml schema 是视图呈现部分的关键。
第3章 配置文件结构
3.1 文件目录结构
所有配置文件,包括模块配置文件以及视图配置文件,存放在网站应用程序的 config 目录下。此目录必须被设置为不可匿名访问。以防止被用户读取。
所有 xsl 文件存放在应用程序目录的 xsl 目录中。
所有模块配置文档,分别保存在 config 目录中。
3.2 命名规范
1、 按照模块名称,网站应用程序目录中的 config 目录里存在唯一的一个以模块名为文件名字,已 .module 为扩展名的业务逻辑配置文档。一个模块必须存在且只能存在一个 .module 文件。
2、 视图配置文档的扩展名必须为 .view 。
3、 所有自定义视图标记,必须配置在名为 taglib.config 的文件中。
3.3 模块配置文件
3.3.1 module
Module 元素描述了网站系统的一个子系统,一个子系统能够处理多个用户请求。
Module 元素具有以下属性:
属性名
|
可能值
|
说明
---|---|---
name
|
文本
|
模块名称
onerror
|
任何符合路径格式的文本字符串
|
缺省的错误处理视图位置
Module 元素可以具备的子元素包括
l action
l form
l rule
3.3.2 action
action 元素描述用于处理用户请求的一个商业函数,即一个 Action 类型,以及这个 Action 处理后对应的跳转逻辑。
action 元素可能具有的属性包括:
属性名
|
可能值
|
说明
---|---|---
name
|
文本
|
Action 名称
pattern
|
有效的正则表达式。
|
用于匹配用户请求路径的正则表达式。当一个 Action 元素处于另一个 Action 内部时,此属性无效。
type
|
有效的类名称
|
Action 类型
ref
|
一个外部 Action 的名字
|
当指定了此属性,则等同于将名字等于此属性值的另一个 action 插入当前位置,形成嵌套关系。
action 元素可以带有以下子元素 :
l action
l forward
3.3.3 form
form 元素描述用于帮助 Action 类处理输入参数和输出参数的类型。
form 元素可能具有以下属性:
属性名
|
可能值
|
说明
---|---|---
name
|
文本
<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 225pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowte