JESI 个性化标记

日期:2003 年 9 月 12 日

如何使用 <jesi:personalize> 标记进行页面个性化

完成此方法文档后,您应该能够:
  • 通过在提供缓存的内容之前替换 cookie 值来使用 <jesi:personalize> 标记定制您的页面.
  • 使用所提供的指示,运行示例代码来完成相同的操作

引言

cookie 的主要用途是识别用户,并可能准备好为他们定制的 Web 页面。当您进入一个使用 cookie 的网站时,可能会要求您填写表单,提供您的名字和兴趣之类的信息。这些信息被封装到一个 cookie 中并被发送到 Web 浏览器,浏览器将其保存以备后用。下次您再进入同一网站时,您的浏览器会把该 cookie 发送到 Web 服务器。服务器可以使用这些信息为您提供定制的网页。因此,比如说您可能看到一个上面有您的名字的欢迎页面,而不是仅看到一个普通的欢迎页面。

现在让我们进一步来减少源服务器上的处理开销,并使用 OracleAS Web Cache 来缓存动态内容,以增强它的功能和可用性。Web Cache 如同一个对内容敏感的服务器加速器,通过将频繁访问的页面保存在内存中来尽量减轻繁忙的 web 服务器上的负载, 从而不需要在中间层服务器上反复处理对那些页面的请求。

在使用 cookie 值生成动态内容的 web 页面中,可以使用 <jesi:personalize> 标记来缓存这些页面。个性化标记将来自 cookie 的个性化内容插入到页面的占位符中。该处理由内置于 Web Cache 中的 ESI 处理器完成。 对页面的第一条请求被发送给源服务器。Web Cache 根据对该页面设置的缓存策略缓存该页面。随后的对该页面的请求在 Web Cache 自身中进行处理。ESI 处理器替换缓存的页面中的 cookie 值,且请求被发送给源服务器。

读者应该熟悉的内容

要理解该文档,读者应该对 HTML、JSP、Java Script 有基本的概念,并对 ESI Specifications 1.0 有基本的了解。

运行示例的前提条件

您需要以下条件才能运行此示例 -

  • Oracle Application Server (9.0.3 或更高版本)。可以从此处
    下载。
  • Oracle JDeveloper (9.0.3 或更高版本)。可以从此处下载。这是可选的,并且仅当您希望从 JDeveloper 中进行部署时才需要。

说明

此示例应用程序有两个 web 页面:welcome.html 和 display.jsp。用户在第一个页面 welcome.html 中输入他们的信息(如称呼、名和姓)。 该页面在 cookie 中保存用户信息,并将请求发送至第二个页面 display.jsp。该页面是一个动态 web 页面,它检索保存在 cookie 中的值并显示它。没有任何一种高速缓存服务器像 OracleAS Web Cache 这样为每一个请求生成该页面。使用 <jesi:personalize> 标记,这些请求将在 Web Cache 自身中得到处理。ESI 处理器检索保存在 cookie 中的用户信息,并在缓存在高速缓存服务器中的动态页面中替换它们。动态内容只被请求一次,且可由高速缓存服务器多次提供。这可以通过动态页面中生成的时间戳记来显示。

代码段

以下代码将在响应正文中插入一个带有 cookie 名称和值的 ESI 占位符。


  1. .....
  2. <tr class="tabledata">
  3. <td>Welcome:</td>
  4. <td align="left">
  5. <jesi:personalize name="title"/>
  6. <jesi:personalize name="firstname"/>
  7. <jesi:personalize name="lastname"/>
  8. </td>
  9. </tr>
  10. .....
图 1


如图 1 中所示,通过使用 cookie 变量,<jesi:personalize>标记被用来显示用户名,如果在请求中发现了 cookie(称呼、名、姓),且它有一个非零值,那么它的值将在页面中被替换。JESI 标记库将这些标记转换成 ESI 标记(如图 2 中所示)。 图 2



  1. .....
  2. <tr class="tabledata">
  3. <td>Welcome:</td>
  4. <td align="left">
  5. <ESI:VARS>$(HTTP_COOKIE{"title"}</ESI:VARS>
  6. <ESI:VARS>$(HTTP_COOKIE{"firstname"}</ESI:VARS>
  7. <ESI:VARS>$(HTTP_COOKIE{"lastname"}</ESI:VARS>
  8. </td>
  9. </tr>
  10. ......
图 2


在这之后,ESI 处理器将试着检索所有这些 cookie(称呼、名、姓)的值,并试着用 ESI 处理器中的值来替换它们,而无需将请求发送回源服务器。

在我们的示例中,我们还显示了 display.jsp 页面中的时间戳记,并通过使用 <jesi:control> 标记将这整个页面缓存 60 秒钟,因此,如果任何其他的用户在 welcome.jisp 中输入了他的名字,并在页面过期之间完成了提交,则他也将看到他的名字和相同的时间戳记。60 秒后,被缓存的页面 (display.jsp) 过期,他将在屏幕上看到他的名字和不同的时间。这就是如何使用 <jesi:personalize> 标记来为不同的用户定制页面,同时在不同的用户之间共享相同的缓存信息。

部署示例

此示例的完整源代码可以在此获得。

这一部分内容讨论运行示例应用程序的相关指导

第 1 步 使用 Winzip,或使用下面的命令解压缩 Personalize.jar

> jar -xvf Personalize.jar

这创建了一个目录 Personalize。

第 2 步

如果您使用的是 JDeveloper,那么按照下面的步骤做

  • 打开 Oracle9i JDeveloper,并使用 File/Open 选项从 Personalize Ŀ¼ÖÐ选择 Personalize.jws
  • 接下来,从主菜单中选择 Project/Make Personalize.jpr
  • 创建应用服务器连接
    • 转至 Connections -> Application Server Connection。单击右键,然后单击 New connection。
    • 在第一步中,输入连接名称并选择 Oracle9i Application Server
    • 在第二步中,输入用户名和口令
    • 在第三步中,输入 Enterprise Manager 的主机名、端口号和远程 Oracle AS 主目录(仅当在远程计算机上进行部署时才需要)。
    • 在第四步中,单击 Next,然后测试该连接。单击 Finish 按钮。
  • 现在,右击 Personalize.deploy,然后为 Deploy 选择 <connection name> — 您在之前的步骤中创建的应用服务器连接。
第 3 步 按照以下步骤利用 EM 来部署应用程序。
  • 转至 EM web 站点 -> 默认的 oc4j 主页,
  • 选择部署 EAR 文件
  • 输入 J2EE 应用程序名,单击 Browse 按钮,然后从 <SAMPLE_HOME>/deploy/Personalize.ear 中选择 Personalize.ear
  • 输入应用程序名为 Personalize,然后单击 Next
  • 输入 URL 映射为 /Personalize,然后单击 Finish
  • 单击 Deploy 部署应用程序。

运行示例

在浏览器中使用下面的 URL 访问页面。

http://<host_name>:<port>/Personalize/welcome.html

其中,<host_name> 是安装了 Web Cache 的计算机,<port> 是 Web Cache 监听器运行的端口。

例如,http://incq185b.idc.oracle.com:7777/Personalize/welcome.html

运行应用程序的步骤

  • 打开两个浏览器窗口,并在二者中都输入上面的 url。
  • 在第一个浏览器中输入您的名字并提交。
  • 在另一个浏览器中输入您朋友的名字并提交( 因为被缓存的页面在 60 秒后过期,所以在 60 秒内的任何页面请求都将有相同的时间戳记)。
  • 在第一个浏览器中,您将看到您的名字和时间戳记。
  • 在第二个浏览器中,您将看到您朋友的名字和相同的时间戳记。

总结

此方法文档说明了如何使用 JESI:personalise 标记来缓存动态页面,并在多个用户之间共享它们。

资源


请在 OTN 示例代码论坛中发表您对此示例的意见。

寄送此页面
Printer View 打印机视图