基于Rhino引擎的服务器端JavaScript脚本容器设计与实现.pdf
《基于Rhino引擎的服务器端JavaScript脚本容器设计与实现.pdf》由会员分享,可在线阅读,更多相关《基于Rhino引擎的服务器端JavaScript脚本容器设计与实现.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4 O 卷 第5 期 2 0 1 2 年1 0 月 江 汉 大 学 学 报(自然科 学 版)J J i a n g h a n U n i v (Na t S c i E d )V o 1 4 0 N o 5 Oc t 2 0 1 2 基于 R h i n o 引擎的服务器端 J a v a S c r i p t 脚本容器设计与实现 李 轶(江汉大学数学与计算机科学学院,湖北 武汉4 3 0 0 5 6)摘要:在 J a v a S c r i p t 语 言重新 受到重视 的今 天,其 运行环境 也 正逐 渐从 传 统的 We b客 户端 向服务 器端延伸。作为服务器端J a v a S
2、 c r i p t 引擎的典型代表,R h i n o引擎具有广泛的平 台支持和应用基础。通过 将 R h i n o引擎置于一个标准的J a v a s e r v l e t中便 可构造 出一个支持 J a v a S c r i p t 的服务端脚本容器 借助 R h i n o引擎,We b开发者 不仅能在脚本 容 器 内部 访 问 J a v a对 象,而且还 获得 了整 个 J a v a平 台的丰 富类库 及 应用框 架的 支持。与 此 同时,服务 器端 J a v a S c r i p t 还统一 了 We b开发 的前、后 台语 言,降低 了开发 难 度 并提 高 了开发
3、 效率 关键词:J a v a S c r i p t 引擎:服务 页面:J a v a s e r v l e t 中图分类号:T P 3 9 3 4 文献标志码:A 文章编号 O 引言 在 J a v a S c r i p t 语 言重新受 到重视 的今 天,其得 到了越来越广泛的应用。与此同时,其运行环境 也正逐渐从传统的 We b客户端向服务端延伸H 。许 多 J a v a S c r i p t 脚 本 引 擎 纷 纷 出 现,主 要 代 表 包 括:S p i d e r Mo n k e y _ 2 、N o d e j s 。和 R h i n o _4 o而 R h i
4、n o 作 为 基 于 J a v a平 台 的 J a v a S c r i p t 引 擎,其 借助 J a v a平 台的依托更加具有广泛的平台支持 和应用基础。通过将 R h i n o引擎置于一个标准的 J a v a s e r v l e t 中,便可构造 出一个 支持 J a v a S c r i p t 的服务 端脚 本容 器。1 容器 的主要特性 1 1 嵌入 式 J a v a S c r i p t 脚本 为 与 目前 主 流基 于 We b服 务 页面技 术(如:J S P、A S P X、P H P等)保 持 一致,本 容器 以服务 页 面 方 式 执 行 服
5、务 器 端 J a v a S c r i p t脚 本,即 J a v a S c r i p t 脚本通过标记“”嵌入于一个 标 准 h t ml 文 档 中。容器 通过对 整个 服务 页面 的解 析和转换得到一个完 整的 J a v a S c r i p t 脚本,之后 调 用 R h i n o引 擎 执 行 该 脚 本,最 终 得 到 标 准 的 h t m l 输 出。特别的,为与现有服务页面技术相 区 别,本容器服务页面文件的扩展名定义为“j s x”。1 2 遵 循 J a v a S c r i p t E C MA一 2 6 2标 准 J a v a S c r i p
6、t 语 言的 国际标 准包 括:E C MA 一 2 6 2、E C MA 一 3 2 7和 E C MA 一 3 5 7,其 中较 为 通行 的标 准 为 E C M A一 2 6 2 E 引。由于该标准也是 R h i n o引擎的 支持标 准,因此 E C M A一 2 6 2也将成为 本容器 的 J a v a S c r i p t 标 准。1 3 支 持 C o mmJ S模 块 AP I 标 准 I I 1 C o mm J S 6 是 目前 新 兴 的服 务 器 端 J a v a S c r i p t A P I 标 准。其 主要 目的 是 为 服 务 器 端 J a v
7、a S c r i p t 应用 的开 发制 定一 个通 用 的 A P I 标 准,涵 盖 了模 块、二进制数据对象、编码、I 0和文件 系统等 方面。其 中 C o m m J S模 块 A P I 标准 是基 于模 块 化 大 规 模 应 用 开 发 的 基 础,因 此 本 容 器 将 以 C o m m J S模块标准 1 1 1 l 7 为依据,为基于模块化 的J a v a S c r i p t 服务器端开发提供支持。1 4 J a v a S c r i p t 表 达式 输 出 为简 化 J a v a S c r i p t 变量及 表达 式访 问和输 出,本 容器 支 持
8、 与 J S P E L表 达式 语 言 类 似 的 表达 式 访 问方 法,即通 过表 达 式$J a v a S c r i p t 表 达 式 可 直接获取任意有效 J a v a S c r i p t 表达式的字符串值。2 容器设计 2 1 架 构 为 简 化 设 计,最 大 化 地 利 用 现 有 资 源 和 技 收 稿 日期:2 01 20 32 2 作者简介:李 轶(1 9 7 6 一),男,实验 师,硕士,研究方向:网络管理。2 0 1 2 年第5 期 李 轶:基于 R h i n o引擎的服务器端 J a v a S c r i p t 脚本容器设计 与实现 5 7 术,本
9、 容器采 用基 于 J a v a S e r v l e t 的二层 架 构。外层为任一符合 S e r v l e t A P I E。标准的 S e r v l e t 容器(例 如 A p a c h e T o mc a t)。内层 为 J a v a S e fi p t 容 器 S e r v l e t。其 将 i S X服 务 页 面 转 换 为 服 务 器 端 J a v a S c r i p t 脚本,然后调用 R h i n o引擎,用 以执行 该 J a v a S c r i p t 脚本,具体架构如图 1所示。图 1服 务 器 端 J a v a S c r i
10、 p t 容 器 架 构 2 2 容 器 S e r v l e t 由 以 上 所 述 可 看 出,J a v a S c r i p t 容 器 S e r v l e t 是本架构的核心所在。对任何 S e r v l e t 而言,i a v a x s e r v l e t 接 口中的 s e r v i c e方法是其 主要服务实现。本 S e r v l e t 的 s e r v i c e方法的基本 过程可分为 以下 5个 基本 步骤:1)获 取所请 求 的 J a v a S c r i p t 服 务页 面 U R L 地 址:2)将此 U R L地址转换为本地路径:3
11、)在本地主机查找并读取该服务页面文件:4)解 析服 务 页 面代 码,并 转 换 为 J a v a S c r i p t 脚本:5)调 用 R h i n o引 擎,执 行 服 务 器 端 J a v a S c r i p t 脚 本。2 3 全 局对 象与 函数 为实现与客户端间的交互及遵循 C o m m J S模 块 标 准。本 容 器 为 服 务 器 端 J a v a S c r i p t 脚 本 提 供 了以下预定义全局对象与函数。2 3 1 H t t p R e q对 象H t t p R e q对 象 是 S e r v l e t A P I接 口 j a v a
12、x s e r v l e t h t t p H t t p S e r v l e t R e q u e s t的 J a v a S c r i p t 对 象 封 装,用 于 提 供 h t t p客 户 请 求 的 相关信 息。其包 含的方法 与接 口 Ht t p S e r v l e t R e q u e s t 完全相同。2 3 2 H t t p R e s 对 象H t t p R e s 对 象是 S e r v l e t A P I 接 口 j a v a x s e r v l e t h t t p Ht t p S e r v l e t R e s p
13、0 n s e 的 J a v a S c r i p t 对象封装 用于向客户输 出 h t t p响应。其 包 含 的 方 法 与 接 口 H t t p S e r v l e t R e s p o n s e完 全 相 同。2 3 3 O u t 对 象O u t 对象 用 于 向 We b客 户输 出 字符文本。其是类 i a v a i o P r i n t Wr i t e r 的 J a v a S c r i p t 对象封装。其包含的方法与 i a v a i o P r i n t Wr i t e r 完 全 相 同。2-3 4 S e s s i o n对 象 S
14、 e s s i o n对象是 S e r v l e t A P I 接 口 j a v a x s e r v l e t h t t p H t t p S e s s i o n的 J a v a S c r i p t 对 象封装 用于管理与服务器不同客户 间的会话。其 包含 的方 法 与接 口 H t t p S e s s i o n完全 相 同。2 3 5 A p p l i c a t i o n对 象A p p l i c a t i o n对 象用 于 会 话 间 的 全 局 数 据 共 享。其 是 一 个 标 准 的 J a v a S c r i p t 0 b j
15、e c t 对象。用户可随时通过对其进行 属性赋值而存储共享数据,并在稍后 由其他用户 所 访 问。2 3 6用于 支持 C o mm J S模 块 A P I 的全局 对 象 为支持 C o mm J S模块 A P I 标准 1 1 1,本容器还提 供 以下全局对象。1)e x p o s 对 象 全 局对 象 e x p o s 用 于模块 内部 对象导 出。在 J a v a S c r i p t 模块 内部 通过将本模块的 函数与对 象作 为 e x p o r t s对象的属性赋值,而 向模块调用 者导出这些 函数与对象。2)mo d u l e 对象 全局对象 mo d u l
16、 e用于保存本模块的相关信 息,其具 有 两个 属 性 i d和 u r i。其 中 i d用 于定 义 本模块 的名字空 间 u r i 用于保 存模 块文件 的完 整 u r i 地址。3)函数 r e q u i r e 全局函数 r e q u i r e用于外部模块的导人。R e q u i r e函数以某外部模块 i d为参数,并返 回该模 块 中的 e x p o r t s对象,从而实现 了对外部模块导 出对象 的访 问。3 容器 的 S e r v l e t 实现 依 照 以上分 析,本容 器本 质上是一 个 J a v a S e r v l e t。其要完成 的主要功能
17、包括:请求获取及 页 面 文 件 读 取、服 务 页 面 代 码 转 换 以 及 J a v a S c r i p t 脚 本 执行。因 此,本 S e r v l e t 主 要 由包 j S X中 的 3个 类 实 现,包 括:j S X J S r v l e t、i S X J s x P r o c e s s o r 和 S X J s x U t i l,其 问关系如图 2所示。3 1 功能类 j s x J s x Ut i l 功能类 i S X J s x U t i l 主要提供文件和基本字符 5 8 江 汉 大 学 学 报(自然 科 学 版)总第4 0 卷 图 2 J
18、 a v a S c r i p t容器 S e r v l e t实现 处理功能。具体包括 以下方法。1)r e a d J s x F i l e方法 其 声 明 为:p u b l i c s t a t i c C h a r S e q u e n c e r e a d J s x F i l e(F i l e f)。该方法读取参数 f 所指定页面文件的内容,并返回其字符序列。2)e s c S p e c C h a r 方 法 其 声 明 为:p u b l i c s t a t i c C h a r S e q u e n c e e s c S p e c C h a
19、 r(C h a r S e q u e n c e s e q)。该方法接受一个字符序列,并将其中的特殊 字符(如冒号,回车,换行等)转换为 J a v a S c r i p t 转义 字符。3)p a g e t o J s 方 法 其 声 明 为:p u b l i c s t a t i c S t r i n g p a g e t o J s (C h a r S e q u e n c e p a g e S c)。该 方 法 实 现 从 服 务 页 面 标 记 代 码 到 J a v a S c r i p t 代码 的转换。参数 p a g e S c为原始服务 页 面 文
20、 件 字 符 序 列,方 法 输 出为 转 换 后 的 目标 J a v a S c r i p t 代码字符串。3 2 功能类 j s x J s x P r o c e s s o r 功 能 类 i S X J s x P r o c e s s o r的 主 要 功 能 是 调 用 R h i n o引 擎 执 行 J a v a S c r i p t 脚 本。包 括 2个 方 法。1)e x e c 方 法 其声 明为:p u b l i c s t a t i c S c r i p t a b l e e x e c(C o n t e x t C X,S c r i p t
21、a b l e p u bS c o p e,Cha r S e q u e n c e p a g e S c)。该 方 法首 先 为 目标 脚 本 构造 独 立 作用 域(s c o p e),然后从指定公有作用域继承全局公有 对象(包括:H t t p R e s、Ht t p R e q和 r e q u i r e),并加 入全局对象 e x p o r t s与 m o d u l e,最后 在该作 用域 上执 行 目标 J a v a S c r i p t 脚 本。参数 e x为某 个指定 的脚本环境;参数 p u b S c o p e为指定的公有作用 域对象:参数 p a
22、g e S c为 目标 J a v a S c r i p t 代码字符 序列。该方法执行参数 p a g e S c所指定 的 目标脚 本 并返回容器的预定义全局对象 e x p o r t s。2)r e q u i r e 方法 其声 明为:p u b l i c s t a t i c O b j e c t r e q u i r e(C o n t e x t e x,S c r i p t a b l e t h i s O b j,O b j e c t a r g s,F u n c-t i o n f u n O b j)该方法是脚本全局函数 r e q u i r e的
23、a v a实现。用于实现外部脚本模块的导入。参数 C X为脚本执 行环 境;参数 t h i s O b j 为脚 本全 局作用 域对 象;参 数 a r g s为传人此 函数 的参数数组:参数 f u n O b j 为 此 函数 的 J a v a S c r i p t 封 装 对象。该 方 法将 调 用 e x e c方 法 以执 行 目标 脚 本 模 块,并 将 e x e c方 法 的返回值返回。3 3 类 j s x J S r v l e t 类 S X J S r v l e t 是一个标 准的 J a v a S e r v l e t。其 声 明为:p u b l i c
24、 c l a s s J S r v l e t e x t e n d s Ge n e r i c S e r v l e t i mp l e me n t s S e r v l e t。其继 承 自类 G e n e r i c S e r v l e t 并实 现了 S e r v l e t 接 口。其 s e r v i c e方法声明为:p u b l i c v o i d s e r v i c e (S e r v l e t R e q u e s t r e q,S e r v l e t R e s p o n s e r e s)。由此 可见 其 与普 通 的
25、J a v a S e r v l e t 并 无 差异。s e r v i c e 方法的主要过程与 2 2节 中所述一致。其 通过 参 数 r e q获 取请 求 的 J a v a S c r i p t服务 页 面 U R L地址,并在 本地 读取 对应 页 面 文件 之后 调 用 功 能 类 J s x U t i l的 p a g e t o J s方 法 转 换 为 J a v a S c r i p t 脚 本,再 创 建 并 导入 上 述脚 本 全 局 对 象。最 后调 用 功能 类 J s x P r o c e s s o r的 e x e c方法 执 行脚 本。s e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Rhino 引擎 服务器端 JavaScript 脚本 容器 设计 实现
限制150内