您的位置:首页 > Web前端 > JavaScript

用JSP实现基于Web的RSS阅读器

2010-12-02 17:40 453 查看





 
用JSP实现基于Web的RSS阅读器
收藏

< type="text/javascript">function
StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}
 

李力,Sun中国工程院工程师
一:
RSS



介绍

根据维基百科(http://zh.wikipedia.org/wiki/RSS

)

的定义,“RSS

是一种用于共享新闻和其他Web

内容的数据交换规范 ”,它是一系列的规范的组合,采用XML

格式。目前国内RSS

应用最多的是在新闻网站和博客网站上。
许多网站可以用RSS

阅读器来个性化自己的网页,比如显示最新的新浪新闻,显示自己好朋友最新的博客文章,显示最新的Google

论坛内容。除此之外,利用RSS

阅读器还可以实现其它用途,比如:

获得天气预报

接收邮件,比如Gmail

就提供RSS feed

获取最新股票行情

获取音乐,电台节目和视频剪辑等等
 

二:
Rome



介绍

这篇文章采用Rome

这个开源工具来实现RSS

阅读器。Rome

支持的格式很多,有RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, Atom 1.0

等等,几乎囊括了目前所有的RSS

和atom

版本。最新的Rome

版本可以从http://wiki.java.net/bin/view/Javawsxml/Rome

上得到。
 
实现RSS

阅读器,主要采用Rome

的解析功能,就是从XML

文件中读出相应的内容。我用一些简单代码来说明如何使用Rome

中的类和方法。
 
URL feedUrl = new URL("http://rss.sina.com.cn/news/marquee/ddt.xml");

SyndFeedInput input = new SyndFeedInput();

SyndFeed feed = input.build(new XmlReader(feedUrl));

表一:

得到RSS Feed

 
“http://rss.sina.com.cn/news/marquee/ddt.xml



是新浪新闻的一个RSS

地址。通过三行代码,就可以得到一个对应这个地址的RSS Feed

对象。这个对象包含我们所需要的所有RSS

内容。如果用System.out.println(feed)

,会得到表二中的结果。从中可以清楚地看到 SyndFeed

类的结构。
 
SyndFeedImpl.contributors=null

SyndFeedImpl.title=

新闻中心-

新闻要闻
SyndFeedImpl.categories[0].name=

SyndFeedImpl.categories[0].taxonomyUri=null

SyndFeedImpl.link=http://news.sina.com.cn/iframe/o/allnews/input/index.htm

SyndFeedImpl.publishedDate=Thu Jun 22 13:20:01 CST 2006

SyndFeedImpl.entries[0].updatedDate=null

SyndFeedImpl.entries[0].contributors=null

SyndFeedImpl.entries[0].title=

扎瓦赫里在录像带中呼吁阿富汗人抵抗外国侵略
SyndFeedImpl.entries[0].categories[0].name=

SyndFeedImpl.entries[0].categories[0].taxonomyUri=null

SyndFeedImpl.entries[0].link=http://news.sina.com.cn/w/2006-06-22/11569270955s.shtml

SyndFeedImpl.entries[0].publishedDate=Thu Jun 22 11:56:00 CST 2006

SyndFeedImpl.entries[0].authors=null

SyndFeedImpl.entries[0].modules[0].descriptions=[]

SyndFeedImpl.entries[0].modules[0].creators[0]=WWW.SINA.COM.CN

SyndFeedImpl.entries[0].modules[0].contributors=[]

......

SyndFeedImpl.author=null

SyndFeedImpl.copyright=Copyright 1996 - 2005 SINA Inc. All Rights Reserved

表二: SyndFeed

数据结构
 
从上述输出结果可以看出,每个新闻条目是由entry

代表的。下列代码从feed

中得到entry

List list = feed.getEntries();

for (int i=0; i< list.size(); i++) {

SyndEntry entry = (SyndEntry)list.get(i);

}

表三:从SyndFeed

中得到SyndEntry

 
如果程序位于防火墙后面,就需要在程序中加上一些Proxy

设置。例如采用下面的http proxy


Properties systemSettings = System.getProperties();

systemSettings.put("http.proxyHost", "myproxyserver.com");

systemSettings.put("http.proxyPort", "80");

System.setProperties(systemSettings);

表四:Proxy

设置
有时候,可能会遇到“java.io.IOException: Server returned HTTP response code: 403 for URL”

的错误信息。通常是因为服务器的安全设置不接受Java

程序作为客户端访问,解决方案是设置客户端的User Agent

, 示例代码如下:
URLConnection feedUrl = new jURL(urlStr).openConnection();

feedUrl.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

SyndFeedInput input = new SyndFeedInput();

SyndFeed feed = input.build(new XmlReader(feedUrl));

表五:设置User-Agent

 
ROME

提供的功能很多,除了可以解析Feed

外,还可以生成Feed

。用Rome

来为自己的网站内容创建RSS Feed

,这样别人就可以通过RSS

阅读器来随时了解你网站内容的更新了。
 
使用ROME

需要两个条件:

Java SE 1.4

以上的版本,下载地址:

 http://java.sun.com/

开源软件JDOM

,下载地址:http://www.jdom.org/

三:用
NetBeans



快速开发一个简单实例

下面用一个简单的实例原型开发步骤来显示如何快速地利用Rome

和NetBeans

来构建一个基于Web

的RSS

阅读器。
 
NetBeans

是一个开源的Java IDE

软件,下载地址:http://www.netbeans.org



选用NetBeans

是因为它内置Tomcat

,可以节省很多配置和运行的时间。而且功能强大,可以高效完成Java SE, Java EE

以及Java ME

等各种应用程序的开发。
 

用NetBeans 5.0

创建 Web Project


打开NetBeans,

 选择菜单"文件->新建项目",在新建项目窗口中,"类别"选择"Web"

,项目选择"Web

应用程序",点击”下一步”。在”新建Web

应用程序”窗口中,输入项目名称,比如”webrssreader”

和项目位置,其余采用缺省,

点击”完成”。



图一:

创建NetBeans

的Web

项目
 

在新建立的”webrssreader”

项目中,加入两个jar

文件:
jdom.jar

:JDOM

开源项目中(http://www.jdom.org/


rome.jar : ROME

开源项目中(http://wiki.java.net/bin/view/Javawsxml/Rome







图二:添加库文件
 

在index.jsp

中加入代码

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Sina News</title>

</head>

<body>

<%

java.util.Properties systemSettings = System.getProperties();

systemSettings.put("http.proxyHost", "mywebcache.com");

systemSettings.put("http.proxyPort", "8080");

System.setProperties(systemSettings);

String urlStr = "http://rss.sina.com.cn/news/marquee/ddt.xml";

java.net.URLConnection feedUrl = new java.net.URL(urlStr).openConnection();

feedUrl.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

com.sun.syndication.io.SyndFeedInput input = new com.sun.syndication.io.SyndFeedInput();

com.sun.syndication.feed.synd.SyndFeed feed = input.build(new com.sun.syndication.io.XmlReader(feedUrl));

%>

<div align="center">

<h1><%=feed.getTitle()%></h1>

<table border=1 cellpadding=3 width="700">

<tr>

<th>Number</th>

<th>Title</th>

<th>Time</th>

</tr>

<%

java.util.List list = feed.getEntries();

for (int i=0; i< list.size(); i++) {

com.sun.syndication.feed.synd.SyndEntry entry = (com.sun.syndication.feed.synd.SyndEntry)list.get(i);

%>

<tr>

<td><%=i+1%></td>

<td><a href="<%=entry.getLink()%>"><%=entry.getTitle()%></a></td>

<td><%=entry.getPublishedDate()%></td>

</tr>

<%}%>

</table>

</div>

<br>

</body>

</html>

表六: index.jsp

全部源代码
 

运行项目。鼠标右键点击”webrssreader”

项目,选择”运行项目”。



图三:

运行程序
 

运行结果如下。



图四:

程序运行结果
四:总结

RSS

属于Web2.0

的一种应用技术。Web2.0

提倡个性化与参与性。而这个简单实例的开发中,采用的都是一些开源软件,开源软件更是”人人为我,我为人人”精神的一种体现。很多时候,我们不需要自己从头开发一些工具,站在前人的肩膀上,开发出一些更好的应用也许是程序员们更应该考虑的事情。
 
作者介绍:

李力目前在

Sun
Microsystems

任高级软件工程师,有近十年软件开发经验,曾就职于

AIG



CA

等公司,任软件工程师及系统分析员等职位,在

J2EE

领域有丰富的实际开发经验。联系方式:

Ada.Li@Sun.com

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rss web jsp netbeans java input