?????? 我用webwork2,用freemarker做模版,在網(wǎng)上找了一個(gè)標(biāo)準(zhǔn)的Rss2.0格式就生成我的模版文件rss.ftl
<?xml?version="1.0"?encoding="UTF-8"?>
<rss?version="2.0">
<channel>
<title><![CDATA[我的小站]]></title>
<link>http://leaf.jdk.cn/</link>
<description><![CDATA[泡出好心情,泡出好技術(shù)]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright?2006?PaoPao?v4.0]]></copyright>
<webMaster><![CDATA[rory.cn@gmail.com?(Rory?Ye)]]></webMaster>
<generator>PaoPao?v4.0</generator>?
????<image>
????????<title>我的小站</title>?
????????<url>http://leaf.jdk.cn/logo.gif</url>?
????????<link>http://leaf.jdk.cn</link>?
????????<description>莫多泡泡2006</description>?
????</image>
????<#list?blogs?as?blog>
????<item>
????????<link>http://leaf.jdk.cn/entry.action?entryId=${blog.id}</link>
????????<title><![CDATA[${blog.title}]]></title>
????????<author>${blog.authorMail}(${blog.author})</author>
????????<category><![CDATA[?${blog.categories}?]]></category>
????????<pubDate>${blog.pubDate}</pubDate>
????????<guid>http://leaf.jdk.cn/entry.action?id=${blog.id}</guid>????
????????<description><![CDATA[${blog.content}]]></description>
????</item>
????</#list>
</channel>
</rss>
我在rss.action里面去取blogs就可以了。<rss?version="2.0">
<channel>
<title><![CDATA[我的小站]]></title>
<link>http://leaf.jdk.cn/</link>
<description><![CDATA[泡出好心情,泡出好技術(shù)]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright?2006?PaoPao?v4.0]]></copyright>
<webMaster><![CDATA[rory.cn@gmail.com?(Rory?Ye)]]></webMaster>
<generator>PaoPao?v4.0</generator>?
????<image>
????????<title>我的小站</title>?
????????<url>http://leaf.jdk.cn/logo.gif</url>?
????????<link>http://leaf.jdk.cn</link>?
????????<description>莫多泡泡2006</description>?
????</image>
????<#list?blogs?as?blog>
????<item>
????????<link>http://leaf.jdk.cn/entry.action?entryId=${blog.id}</link>
????????<title><![CDATA[${blog.title}]]></title>
????????<author>${blog.authorMail}(${blog.author})</author>
????????<category><![CDATA[?${blog.categories}?]]></category>
????????<pubDate>${blog.pubDate}</pubDate>
????????<guid>http://leaf.jdk.cn/entry.action?id=${blog.id}</guid>????
????????<description><![CDATA[${blog.content}]]></description>
????</item>
????</#list>
</channel>
</rss>
????public?String?execute()?throws?Exception?{
????????PaginationSupport?ps?=?blogManager.getBlogsByPage(0);
????????blogs?=?new?ArrayList();
????????
????????for(Iterator?ite?=?ps.getItems().iterator();?ite.hasNext();){
????????????Blog?blog?=?(Blog)ite.next();
????????????WrapRssBlog?wrapBlog?=?new?WrapRssBlog();
????????????wrapBlog.setId(blog.getId());
????????????wrapBlog.setAuthor(blog.getAuthor().getNickname());
????????????wrapBlog.setAuthorMail(blog.getAuthor().getMail());
????????????wrapBlog.setTitle(blog.getTitle());
????????????wrapBlog.setContent(StringUtil.extractText(blog.getContent()));
????????????wrapBlog.setPubDate(DateUtil.formatRssDate(blog.getPostTime()));
????????????StringBuffer?sb?=?new?StringBuffer();
????????????for(Iterator?ite2?=?blog.getCategories().iterator();?ite2.hasNext();){
????????????????Category?cate?=?(Category)?ite2.next();
????????????????sb.append("?")
??????????????????.append(cate.getName());
????????????}
????????????wrapBlog.setCategories(sb.toString());
????????????blogs.add(wrapBlog);
????????}
????????return?super.execute();
????}
這里把blog包裝了一下,主要是處理了一下日期,內(nèi)容,還有把分類拼成字符串。關(guān)于日期的處理,參考了飛云小俠寫的rss日期的研究。實(shí)現(xiàn)代碼如下。????????PaginationSupport?ps?=?blogManager.getBlogsByPage(0);
????????blogs?=?new?ArrayList();
????????
????????for(Iterator?ite?=?ps.getItems().iterator();?ite.hasNext();){
????????????Blog?blog?=?(Blog)ite.next();
????????????WrapRssBlog?wrapBlog?=?new?WrapRssBlog();
????????????wrapBlog.setId(blog.getId());
????????????wrapBlog.setAuthor(blog.getAuthor().getNickname());
????????????wrapBlog.setAuthorMail(blog.getAuthor().getMail());
????????????wrapBlog.setTitle(blog.getTitle());
????????????wrapBlog.setContent(StringUtil.extractText(blog.getContent()));
????????????wrapBlog.setPubDate(DateUtil.formatRssDate(blog.getPostTime()));
????????????StringBuffer?sb?=?new?StringBuffer();
????????????for(Iterator?ite2?=?blog.getCategories().iterator();?ite2.hasNext();){
????????????????Category?cate?=?(Category)?ite2.next();
????????????????sb.append("?")
??????????????????.append(cate.getName());
????????????}
????????????wrapBlog.setCategories(sb.toString());
????????????blogs.add(wrapBlog);
????????}
????????return?super.execute();
????}
????public?static?String?formatRssDate(Date?date){
????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("EEE,?d?MMM?yyyy?HH:mm:ss?z",Locale.US);
????????//TODO?TimeZone
????????SimpleTimeZone?zone?=?new?SimpleTimeZone(8,"GMT");
????????sdf.setTimeZone(zone);
????????return?sdf.format(date);
????}
這樣就得到了這樣的日期????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("EEE,?d?MMM?yyyy?HH:mm:ss?z",Locale.US);
????????//TODO?TimeZone
????????SimpleTimeZone?zone?=?new?SimpleTimeZone(8,"GMT");
????????sdf.setTimeZone(zone);
????????return?sdf.format(date);
????}
Thu, 6 Apr 2006 16:01:36 GMT
做好了這些,配置一下action
????????<action?name="rss"?class="cn.jdk.leaf.action.RssAction">????????
????????????<result?name="success"?type="freemarker">/WEB-INF/pages/rss.ftl</result>
????????</action>
不過(guò)像這樣配置的話,你訪問(wèn)http://xxx.xxx.com/rss.action看到的不是一個(gè)xml????????????<result?name="success"?type="freemarker">/WEB-INF/pages/rss.ftl</result>
????????</action>
因?yàn)榉祷亟Y(jié)果的contentType是text/html.而不是xml,這樣是不行的。看了一下webwork源碼。原來(lái)可以這樣簡(jiǎn)單的解決。改成這樣配置就可以了。
????????<action?name="rss"?class="cn.jdk.leaf.action.RssAction">
????????????<result?name="success"?type="freemarker">
????????????????<param?name="location">/WEB-INF/pages/rss.ftl</param>
????????????????<param?name="contentType">application/xml</param>
????????????</result>
????????</action>
????????????<result?name="success"?type="freemarker">
????????????????<param?name="location">/WEB-INF/pages/rss.ftl</param>
????????????????<param?name="contentType">application/xml</param>
????????????</result>
????????</action>
簡(jiǎn)單吧。其實(shí)你還可以把這個(gè)contentType改成其他類型的。比如excle的。這樣用戶執(zhí)行就可以得到一個(gè)xls文件。哈哈。