近期由于項(xiàng)目的原因需要用到JetSpeed2(下稱JS2)。早聽(tīng)說(shuō)JS2有這樣那樣的優(yōu)點(diǎn),但用起來(lái)之后,發(fā)現(xiàn)最大的一個(gè)麻煩是缺少文檔。相比之下署名為中華博客網(wǎng)上的一系列的文章還很有內(nèi)容,然而是針對(duì)1X版本的。因此我自己不得不花一些時(shí)間研究JS2,將其中的內(nèi)容與大家分享,以免大家走彎路。
目前JS2的分析還在進(jìn)行之中,會(huì)有一些內(nèi)容不正確或有遺漏,歡迎大家指正。
第一章 JS2的頁(yè)面結(jié)構(gòu)
一、頁(yè)面布局
既然是深度剖析,什么安裝啊等過(guò)程就略過(guò)了,反正也很簡(jiǎn)單。我使用的JetSpeed是JetSpeed2MutiDB版本,2005年12月發(fā)布的正式版。
我們先來(lái)看看JS2的初始頁(yè)面。
上圖是訪問(wèn)JS2的初始頁(yè)面,我們可以看到這些東西:
(1)JS2的Logo;
(2)兩個(gè)頁(yè)面,分別是“Welcome to JetSpeed
(3)在第一個(gè)頁(yè)面中的瀏覽控制窗口;
(4)在第一個(gè)頁(yè)面中的9個(gè)Portlet。
那么,是哪些配置讓JS2顯示以上信息呢?從這個(gè)入手,我們就能夠慢慢揭開(kāi)JS2的神秘面紗了。
二、頁(yè)面結(jié)構(gòu)分析
本想在網(wǎng)上找一些文章能夠解釋JS2的頁(yè)面結(jié)構(gòu)和相應(yīng)的配置信息,找了一大圈,最后在JetSpeed2的wiki上找到了頁(yè)面元素的定義:
元素 |
描述 |
布局(Layout) |
定義了多個(gè)頁(yè)面片段被聚集后的最終顯示模式。 |
布局—裝飾(Layout-decorator) |
頁(yè)面周圍的布局。 |
片段(Fragment) |
動(dòng)態(tài)生成的內(nèi)容,通常就是一個(gè)Portlet或頁(yè)面生成的。一個(gè)頁(yè)面片段自己的內(nèi)容是不能夠被裝飾的。 |
裝飾(Decoration) |
一個(gè)對(duì)動(dòng)態(tài)內(nèi)容進(jìn)行修飾的靜態(tài)或半靜態(tài)標(biāo)記。 |
頁(yè)面(Page) |
多個(gè)片段的匯聚。 |
頁(yè)面裝飾 (Page Decorator) |
一種對(duì)頁(yè)面進(jìn)行修飾的標(biāo)記,由頁(yè)面的布局和多個(gè)片段組成。 |
Porlet裝飾(Portlet Decorator) |
一種只是針對(duì)Porlet進(jìn)行的裝飾。 |
Wiki中用下圖描述了頁(yè)面的布局,但我認(rèn)為這一定是過(guò)時(shí)了的描述,因?yàn)樗锩娴牡囊恍┪募谙到y(tǒng)里壓根就沒(méi)有,比如Simpelayout.jsp:
只好自己分析了。
目前,JetSpeed2的發(fā)布版里提供的是Velocity的配置模板,就是一系列的vm文件;按道理應(yīng)該有JSP的配置模板,但是在目前的系統(tǒng)里沒(méi)有看到。(狂遺憾中)
無(wú)論如何,JS2是運(yùn)行在服務(wù)器上面的一個(gè)應(yīng)用,它一定會(huì)有自己的入口配置文件,在conf目錄下的jetspeed.properties就是我們要找的入口配置文件。
jetspeed.properties文件定義了默認(rèn)的頁(yè)面裝飾風(fēng)格。這里的頁(yè)面,包含了名字、標(biāo)題、頁(yè)面片段,也可以指定他的裝飾風(fēng)格,如果沒(méi)有指定,則使用jetspeed.properties中的默認(rèn)風(fēng)格。
因此,當(dāng)一個(gè)頁(yè)面需要被顯示時(shí),頁(yè)面裝配器會(huì)獲得當(dāng)前適用的裝飾風(fēng)格,這個(gè)裝飾可以使系統(tǒng)默認(rèn)的,也可以是頁(yè)面指定的。在同一個(gè)頁(yè)面上,可以有多個(gè)子頁(yè)面,每一個(gè)子頁(yè)面如果指定了不同的裝飾風(fēng)格,當(dāng)子頁(yè)面的獲得焦點(diǎn)時(shí),它的裝飾風(fēng)格會(huì)影響整個(gè)主頁(yè)面。
l default.user.principal=guest定義了默認(rèn)的用戶權(quán)限,也就是說(shuō),當(dāng)用戶沒(méi)有登陸時(shí),他將會(huì)擁有g(shù)uest的權(quán)限。
l layout.page.default = jetspeed-layouts::VelocityTwoColumns定義了一個(gè)頁(yè)面里頁(yè)面片段的布局格式,這里默認(rèn)的是兩列的方式。
l decorator.page.default = tigris和decorator.portlet.default = tigris說(shuō)明默認(rèn)的裝飾風(fēng)格是tigris.因此,要研究頁(yè)面布局和風(fēng)格,請(qǐng)到tiris目錄下去找。
其他的內(nèi)容不影響初始頁(yè)面的顯示,先不介紹了。
目前對(duì)于頁(yè)面結(jié)構(gòu)我是這么理解的:整個(gè)Portal的頁(yè)面是一個(gè)主頁(yè)面,決定它風(fēng)格和顯示的內(nèi)容的是裝飾風(fēng)格(Decorator),它定義了(1)主頁(yè)面分幾個(gè)部分,(2)每一部分的內(nèi)容和風(fēng)格,(3)有幾個(gè)子頁(yè)面需要顯示;而每個(gè)子頁(yè)面決定了有多少個(gè)portlet需要顯示。畫成圖就是這樣的:
(請(qǐng)大家指正)
循著這個(gè)思路,我們來(lái)解釋首頁(yè)的結(jié)構(gòu):
(1)JS2的Logo:
頂上的標(biāo)志圖片,是在decorator下面layout目錄中tigris\header.vm文件中定義的,默認(rèn)的圖像文件是:jetspeed-logo.gif
(2)兩個(gè)頁(yè)面,分別是“Welcome to JetSpeed
在JS2的默認(rèn)主頁(yè)面中,有兩個(gè)子頁(yè)面:(1)歡迎頁(yè)面 和 (2)RSS頁(yè)面。每一個(gè)頁(yè)面的定義是他們相應(yīng)的PSML文件。顯示這兩個(gè)頁(yè)面的原因是他們的security-constraints是public-view,如果沒(méi)有定義,默認(rèn)值也是“public-view”。也就是說(shuō),顯示的頁(yè)面是基于規(guī)則的,而不是基于定義的。
(3)在第一個(gè)頁(yè)面中的瀏覽控制窗口;
在各個(gè)page的folder.metedata中定義。
(4)在第一個(gè)頁(yè)面中的9個(gè)Portlet。
這太簡(jiǎn)單了,打開(kāi)他的PSML文件:default-page.psml,一目了然。
三、疑問(wèn)
找到了部分的配置信息,但是這些配置信息是如何被使用的?
<未完待續(xù)>