Roller中一些概念和定義
最近在研究Roller源代碼.發現Roller文檔和源代碼中有一些容易讓人混淆和模糊的概念(至少對我來說),在這里記下來.
Roller: 博客服務器, 能夠同時支持多個用戶(博客)的服務器軟件,同時可以支持組網志(Group Weblog,意思是多個用戶共同編輯的網志)
Weblog 網志. 一個用戶可以擁有多個網志,(包括組網志),在文檔中就是Weblogs,在源代碼中就是website. 注意: 源代碼中的website指的是一個用戶下面的weblog, 而不是Roller服務器的website.
Front page 主頁面: 每個Roller服務器都有一個主頁面, 就是進站頁面. 注意和每個用戶的主頁面(通常叫做主菜單 Main Menu)區分.
管理員: Roller安裝的時候默認將管理員權限授予第一個注冊用戶,由他來管理或者繼續授權給別人.
Main Menu 主菜單: 一個用戶的主頁面, 包含對網志的管理等功能面板
Handle 句柄: 這里Handle指的是網志的代碼,例如有一個網志adminblog, 代碼就是"adminblog", Roller服務器程序通過這個代碼來標志這個網志,進行定位.
Editor interface 編輯接口: Roller文檔中使用編輯接口這個名詞, 這個概念很模糊, 基本上,如果你進入了編輯接口模式,那么一個狀態欄就會出現, 一般來說, 左邊是你登陸的名字和正在編輯的網志, 右邊是主頁面,主菜單,退出登錄等連接. 只要有狀態欄出現, 你就位于編輯接口中.
weblog navbar 導航欄: 當你在一個網志中需要回到編輯接口中時,可以通過導航欄, 每個網志的主題(theme)都會包含導航欄.
editor page 編輯頁面: Roller中編輯頁面指的是網志中創建新條目的頁面. 用戶可以輸入新條目的標題,標簽,內容等等.
permalink 永久連接: Roller中指向該條目的只讀的永久性連接. 這個連接在用戶第一次保存條目的時候,根據當時的標題設定,并且以后不能更改.
Category 目錄/分類: 在Roller中一個條目只能隸屬一個目錄/分類. (在Atom 協議中, 一個條目可以有多個目錄/分類, Roller只保留一個)
Tag 標簽: Web2.0 標簽, 在Roller中, 標簽用來標記條目所描述的內容和分類, 多個標簽用空格分開, 當用戶輸入時, Roller會使用已有的標簽來提示.
Roller分析(1)
Webblogger Roller最著名的開放源代碼的Java Blog. 準備研究一下. 目前版本3.0.但是下載中不提供javadoc API,只能從源代碼中編譯.使用Subversion下載后編譯文檔,卻總是報錯,不能生成完整的javadoc. 不管怎樣,先看看源代碼吧.
基本上Roller代碼圍繞著七個方面:
business 商業邏輯(這個名詞比較生硬,不過程序員都該明白我的意思),實際上是Roller的底層設計邏輯.
config 配置, 用于Roller的讀取和寫入配置信息
planet, 用于聚合內容
pojos, 用于持久化商業邏輯層的Java對象
ui, 用于Roller的視圖
util, 用于Roller的工具類
webservice, 用于Roller的Web服務
Roller分析(2): 商業邏輯
Roller關于商業邏輯的包有七個:
org.apache.roller.business
org.apache.roller.business.hibernate
org.apache.roller.business.pings
org.apache.roller.business.referrers
org.apache.roller.business.runnable
org.apache.roller.business.search
org.apache.roller.business.search.operations
org.apache.roller.business.util
org.apache.roller.business
包含一些接口和實現類以及例外: 書簽管理器,配置管理器,文件管理器,插件管理器,屬性管理器,主題管理器,用戶管理器,Weblog管理器,Weblog條目插件. 文件IO異常,文件路徑異常,文件無法找到異常,主題無法找到異常等等
這個包中還有一個Roller接口和實現類,用來定義Roller商業邏輯中的主要條目點(Entry Point)
org.apache.roller.business.hibernate
包含使用Hibernate來實現上述包的具體實現類
org.apache.roller.business.pings
包含關于ping的接口和實現類,包括自動ping管理器,ping隊列管理器,ping目標管理器.
不明白ping是什么?請看:
--------------------------------------
Traceback Ping在blog系統中廣泛使用,簡單說來,Trackback是網站與網站之間互相通告的一種方法。例如,當你讀了一篇日志,想 對此寫下自己的感想,您可以把新的日志內容寫到自己的博客上。然后向原來的那篇日志發送一個引用通告。通過這種辦法,在原始文章的下面就留下了你自己博客 中的日志的鏈接,這樣對于同一個話題的討論,可以不局限在一個博客中了。
Traceback在中國大部分被翻譯做“引用通告”,因此 帶來一個很大的誤解,不少人將TrackBack理解為引用地址,我經常收到一些莫名其妙的Traceback,點過去一看,原來只是轉載我的文章而已, 這顯然是錯誤地理解和使用了TrackBack,將其誤以為是“引用”的含義了,事實上TrackBack不是這么使用的。
舉個例子 來說明一下。比如你在我的月光博客中看了一篇感興趣的文章,對這篇文章你自己有一些看法,但是如果你寫的文字較多的話,通常會超過評論字數的限制,這時候 你可以在自己的Blog中寫下看法,這樣帶來的好處是字數不受限制,而且還利于以后維護,但是你怎么告訴我你寫了這個評論呢?如果沒有Traceback 的話,你只能將你的鏈接URL地址回復在評論上,但有了Trackback Ping,就不再需要這樣做了,你只要通過Trackback將你的文章信息 Ping過來,我的Blog系統會自動接收來自其他Blog網站Trackback Ping,并將其發布到文章中,這才是Trackback的正確用 法,可惜國內大多數Blogger還沒有形成正確使用Trackback的習慣。
--------------------------------------------------------
org.apache.roller.business.referrers
org.apache.roller.business.runnable
這個包主要包括后臺線程的一些管理.例如包括Job接口(一項任務)和線程管理器接口.
org.apache.roller.business.search
這個包包括Roller的搜索功能, 例如索引管理器等.
org.apache.roller.business.search.operations
這個包包括了一些搜索的操作,例如增加條目,搜索,重建索引等等
org.apache.roller.business.util
這個包包括了一些工具類,例如一致性檢查,密碼管理,數據庫升級等等
Roller分析(3):數據模型
Roller3.0 的數據模型包(2.3)被去掉了,現在在org.apache.roller.pojos包中,pojos對象.
這個包包括兩個接口,30多個類,我們分別看一下:
Template接口:Template接口代表抽象的一個單一的模版單元概念或者一個非繪制內容.基本上,在Roller中,模版指的是Velocity模版,Velocity模版將會被Velocity繪制引擎繪制出來
Weblog資源接口:代表靜態的上傳給Weblog的文件,提供了一個管理上傳文件的抽象層.
AutoPingData: 自動ping配置, 將一個網站和ping目標聯系的實例,當對應的網站變化時,相應的ping目標將會被ping.能夠通過PingCategoryRestrictionData來限定只有該目錄變化才ping.
BookmarkData: Roller中每個用戶有一個最喜歡書簽集合,這個代表其中的一個URL書簽,通過書簽管理器來創建這個對象.
CommentData: 代表一個Weblog條目的評論
FolderData:文件夾. Roller網站擁有多個文件夾(沒有根文件夾),每個文件夾可以擁有其他文件夾或者書簽,使用書簽管理器來創建文件夾.
HitCountData: 代表一個Weblog條目的點擊數.
PermissionData: 代表一個用戶的權限數據.
PingTargetData: 代表可能的ping目標,可以是通用的(由管理員設置),也可以是定制的(由用戶自己設置)
RoleData: 代表角色
RollerConfigData: 代表Roller的配置數據,從roller-config.xml文件中讀取或者寫入.
RollerPropertyData: 代表Roller系統的一個屬性.
Theme: 主題, 封裝了一個單一Weblog的所有元素.它包含了一個主題的大部分模版
UserData: 代表一個用戶
WeblogCategoryData: 代表一個Weblog的類別(目錄)
WeblogEntryData: 代表一個Weblog條目
WebsiteData: Website和用戶由多對多的關系. Website和Weblog條目,Weblog分類,以及文件夾等有一對多單向關系.使用UserManager去創建,讀取和更新websites.
Roller分析(4):模板
Roller的Look&Feel是通過主題(Theme)和模版(Template)來實現的.主題由一系列模版組成.
每個主題都不同,但是所有主題都必須包含兩個頁面(這兩個頁面你不能刪除和重命名): Weblog模版和_day模版
有一些主題還必須包含_css模版用來定義CSS
weblog 模版例子
>
<html><head>
<title>$model.weblog.name : $model.weblogPage.nametitle> #1
#showAutodiscoveryLinks($model.weblog) #2
<style type="text/css">#includeTemplate($model.weblog "_css")style> #3
head>
<body>
<table border="0" align="center" width="95%">
<tr>
<td class="entries" width="80%" valign="top">
<h1>$model.weblog.nameh1> #4
<p class="descrip">$model.weblog.descriptionp>
#set($rootCategory = $model.weblog.getWeblogCategory("nil")) #5
#showWeblogCategoryLinksList($rootCategory false false)<br>
#set($pager = $model.getWeblogEntriesPager()) #6
<div class="next-previous">
#if ($model.results) #7
#showWeblogSearchAgainForm($model.weblog)
#showNextPrevSearchControl($pager)
#else
#showNextPrevEntriesControl($pager) #8
#end
div>
#showWeblogEntriesPager($pager) #9
#if ($model.permalink) #10
#showWeblogEntryComments($entry)
#showWeblogEntryCommentForm($entry)
#end
td>
<td width="20%" valign="top">
<h2>Calendarh2>
#showWeblogEntryCalendar($model.weblog "nil") #11
<h2>Feedsh2>
#showAtomFeedsList($model.weblog) #12
<h2>Searchh2>
#showWeblogSearchForm($model.weblog false) #13
<h2>Linksh2>
#set($rootFolder = $model.weblog.getBookmarkFolder("/")) #14
#showBookmarkLinksList($rootFolder false false)
<h2>Navigationh2>
#showPageMenu($model.weblog) #15
#showAuthorMenu(true) #16
<h2>Referrersh2>
#set($refs = $model.weblog.getTodaysReferrers()) #17
#showReferrersList($refs 30 20)
td>
tr>
table>
body>
html>
解釋:
#1 使用weblog名稱和頁面模版名稱定義了文檔標題
#2 使用宏#showAutodiscoveryLinks()對RSS和Atom Feed添加HTML連接
#3 使用CSS
#4 顯示頁面標題
#5 顯示weblog分類列表
#6 獲得條目分頁器(entries pager)用來顯示條目和控制分頁
#7 顯示搜索結果控制