RSS(Really Simple Syndication,真正簡單的連鎖)是一種 Web 內(nèi)容連鎖格式。RSS 成為通過 Web 連鎖新聞內(nèi)容的標(biāo)準(zhǔn)格式。作為最近與 Sun Microsystems 簽署合同的一部分,我負(fù)責(zé)開發(fā)任何懂得 RSS、JavaServer Pages 和 HTML 的人便可以使用的“JSP 標(biāo)簽庫”。taglib 主要面向用 RSS 收集新聞內(nèi)容的 Web 站點的非技術(shù)性編輯人員。我的目標(biāo)是開發(fā)在 Web 頁中將簡化使用 RSS 內(nèi)容(0.91、0.92 和 2.0 版本)的 JSP 標(biāo)簽庫。
RSS Utilities Package 是該項目的結(jié)果。它包括一套自定義 JSP 標(biāo)簽,這些標(biāo)簽彌補了 RSS Utilities Tag library 和靈活的 RSS 語法分析器。該文檔說明了如何使用該語法分析器和 RSS Utilities Package 提供的庫。在這里單擊便可以下載第一個版本。該 zip 文件包含一個 jar 文件 rssutils.jar(該文件包含使用該工具所需的類)和一個 tld 文件(該文件定義從 RSS 文檔中提取信息的 JSP 自定義標(biāo)簽)。
安裝 taglib
盡管使用標(biāo)簽庫很容易,但在安裝時要求您了解 Web 的工作原理和如何去配置它。第一步是下載并解壓包。一旦 zip 文件已經(jīng)解壓了,在 Web 應(yīng)用程序的 /WEB-INF/lib 目錄中放置一份 rssutils.jar 和 rsstaglib.tld 的副本。將下面的 taglib 定義添加至 Web 應(yīng)用程序的 /WEB-INF/web.xml 文件:
<taglib>
<taglib-uri>/WEB-INF/rssutils.tld</taglib-uri>
<taglib-location>/WEB-INF/rssutils.tld</taglib-location>
</taglib>
使用 taglib
一旦 taglib 已經(jīng)安裝在 Web 應(yīng)用程序中,按照以下步驟便可以在 JSP 頁面中使用 taglib。首先,將下面一行添加至 JSP 頁面的頂部:
<%@ taglib uri="/WEB-INF/rssutils.tld" prefix="rss" %>
其次,使用 feed 標(biāo)簽將 RSS feed 添加至 JSP 頁面,如下例所示:
<rss:feed url="http://servlet.java.sun.com/syndication/rss_java_highlights-10.xml" feedId="javaSunCom"/>
"feed" 標(biāo)簽的 url 屬性必須包含到 RSS 文檔的 URL。"feed" 標(biāo)簽的 feedId 屬性是任意的,可以設(shè)置為任何值。然而,我們建議該屬性在標(biāo)識 RSS feed 時要直觀。如果應(yīng)用程序在防火墻后面,可以使用名為 proxyAddress 和 proxyPort 的 "feed" 標(biāo)簽代理屬性來設(shè)置代理屬性。如果不知道代理服務(wù)器地址代理端口,請與網(wǎng)絡(luò)管理員聯(lián)系。下面是一個例子:
<rss:feed url="http://servlet.java.sun.com/syndication/rss_java_highlights-10.xml" feedId="example1" proxyAddress="129.149.246.4" proxyPort="8080"/>
一旦將一個或多個 RSS feed 添加到頁面,您應(yīng)能使用剩余的一套標(biāo)簽來從 feed 中提取幾乎任何信息。下面是一個例子,說明如何提取在上面添加的 RSS feed 頻道的標(biāo)題:
<rss:channelTitle feedId="javaSunCom"/>
Taglib 示例
例 1 (RSS 0.91):
<rss:feed
url="http://servlet.java.sun.com/syndication/rss_java_highlights-XYZCompany-10.xml"
feedId="example1"/>
<b>Image: </b><rss:channelImage feedId="example1" asLink="true"/><br>
<b>Title: </b><rss:channelTitle feedId="example1"/><br>
<b>Link: </b><rss:channelLink feedId="example1" asLink="true"/><br>
<b>Description: </b><rss:channelDescription feedId="example1"/><br>
<ul>
<li><rss:itemTitle feedId="example1" index="0"/><br>
<rss:itemDescription feedId="example1" index="0"/><br><br>
<li><rss:itemTitle feedId="example1" index="1"/><br>
<rss:itemDescription feedId="example1" index="1"/><br>
</ul>
例 2 (RSS 0.92):
<rss:feed
url="http://static.userland.com/gems/backend/gratefulDead.xml" feedId="example2"/>
<b>Image: </b><rss:channelImage feedId="example2"/><br>
<b>Title: </b><rss:channelTitle feedId="example2"/><br>
<b>Link: </b><rss:channelLink feedId="example2" asLink="true"/><br>
<b>Description: </b><rss:channelDescription feedId="example2"/><br>
<ul>
<rss:forEachItem feedId="example2">
<li><rss:itemDescription feedId="example2"/><br><br>
</rss:forEachItem>
</ul>
例 3 (RSS 2.0):
<rss:feed
url="http://static.userland.com/gems/backend/rssTwoExample2.xml"
feedId="example3"/>
<b>Image: </b><rss:channelImage feedId="example3"/><br>
<b>Title: </b><rss:channelTitle feedId="example3"/><br>
<b>Link: </b><rss:channelLink feedId="example3" asLink="true"/><br>
<b>Description: </b><rss:channelDescription feedId="example3"/><br>
<b>Copyright: </b><rss:channelCopyright feedId="example3"/><br>
<b>Docs: </b><rss:channelDocs feedId="example3"/><br>
<b>Generator: </b><rss:channelGenerator feedId="example3"/><br>
<b>Language: </b><rss:channelLanguage feedId="example3"/><br>
<b>Last Build Date: </b><rss:channelLastBuildDate
X-Virus: 1
feedId="example3"/><br>
<b>Managing Editor: </b><rss:channelManagingEditor
feedId="example3"/><br>
<b>Pub Date: </b><rss:channelPubDate feedId="example3"/><br>
X-Virus: 1
<b>Skip Days: </b><rss:channelSkipDays feedId="example3"/><br>
<b>Skip Hours: </b><rss:channelSkipHours feedId="example3"/><br>
<b>TTL: </b><rss:channelTTL feedId="example3"/><br>
<ul>
<rss:forEachItem feedId="example3" startIndex="2" endIndex="4">
<li><rss:itemDescription feedId="example3"/><br><br>
</rss:forEachItem>
</ul>
如何使用 RssParser?
從某種程度上看,語法分析器是該項目的副產(chǎn)品。盡管語法分析器是用標(biāo)簽庫來開發(fā)的,但是它完全是自包含的,它可以在 Java 應(yīng)用程序中使用。然而,要做到這一點,顯然您至少需要了解如何編寫基本的 Java 代碼。(如果您了解如何用 Java 語言編寫 Hello World,就沒什么問題了。)
首先下載并解壓包。一旦將 rssutils.jar 添加至您的類路徑,就請使用 RssParserFactory 創(chuàng)建 RssParser 接口的實例:RssParser parser = RssParserFactory.createDefault();
Rss rss = parser.parse(new
URL("http://mydomain.com/document.rss"));
語法分析器生成的 RSS 對象是位于提供的 URL 中的 RSS 文檔的 Java 對象表示。使用 RSS 對象提供的方法以獲得其它 RSS 對象的句柄,如 Channels 和 Items。RssParser 也能夠分析 File 對象和 InputStream 對象。
結(jié)束語
RSS 提供了一種簡單的方法來添加和維護(hù)您的 Web 站點上來自所有 Web 的新聞及其它內(nèi)容。即使 RSS 是簡單的 XML 格式,在 Web 上的任何地方從 XML 文檔中分析并提取數(shù)據(jù)都可能有點棘手——或者至少單調(diào)乏味——如果您不得不一遍又一遍地去做的話。RSS Utilities Package 利用 Custom Tag 和 XML Parsing 技術(shù)使 "Real Simple Syndication" 格式真正做到文如其名。