`
zengguo1988
  • 浏览: 280125 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
阅读更多

一 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需要两个条件:

    三 用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

分享到:
评论

相关推荐

    Remo Repair Zipv2.0.0

    Remo Repair RAR汉化版可以帮助用户轻松修复受损或无法正常打开使用的rar文件,可以预览可以从损坏/损坏的RAR文件中恢复的丢失数据,非常的方便。同时软件支持RAR文件的所有版本的修复,只需添加rar文件进入软件即可...

    tncremo30_HEIDENHAINDNC_REMO_tncremo怎么设置_

    通过以上步骤,你可以成功设置并使用HEIDENHAIN TNC REMO系统,实现远程操控和监控你的数控机床,从而提升生产效率和操作便利性。在实际应用中,不断熟悉和掌握TNC REMO的各项功能,将能更好地发挥其潜力。

    nature-remo-cli:Nature Remo的非官方命令行界面

    请阅读Nature Remo官方文档并生成您自己的访问令牌。 用法 初始化 首先,您必须执行remo init命令进行初始化。 系统将要求您输入访问令牌。 $ remo init Nature Remo OAuth Token: &lt;Input your token&gt; ...

    Remo Duplicate File Remover(重复文件删除工具)官方正式版V1.0.0.11

    Remo Duplicate File Remover(重复文件删除工具)官方正式版V1.0.0.11

    Remo平台「Remo Platform」-crx插件

    该扩展允许您从访问您的Remo Platform空间的网页中单击一次即可导入CV。...Cette扩展名,由Cer扩展到Permet d'importer和d'éditer,Web站点可以通过Web访问Remo平台。 支持语言:English,Français

    REMO-3300 基于GPRS的车辆监控系统应用

    REMO-3300车辆监控系统是一种基于GPRS(General Packet Radio Service)技术的智能交通解决方案,它在城市交通管理、公共交通优化、安全监控和物流跟踪等方面发挥着重要作用。这个系统结合了全球卫星定位(GPS)、...

    昆仑通态(MCGS)嵌入版_REMO8017A模块定制驱动.rar

    总的来说,昆仑通态MCGS嵌入版的REMO8017A模块定制驱动是实现软件与硬件高效互动的关键,它让开发者能够充分利用硬件的功能,实现复杂而精准的工业控制。理解并掌握驱动程序的原理和应用,对于提高自动化系统的稳定...

    Python库 | remo-0.3.27-py3-none-any.whl

    Python库是开发者在进行软件开发时经常会用到的工具,它们提供了一系列预定义的功能和模块,可以帮助程序员快速实现特定任务,提升开发效率。在给定的压缩包文件"remo-0.3.27-py3-none-any.whl"中,我们关注的是一个...

    MOV视频文件修复器v2.0破解版.rar

    如果你的MOV/MP4文件因为损坏而无法使用QuickTime播放,可以使用这个软件进行修复,即使MOV比较大,也可以进行修复。安装说明:安装后不要立刻运行它,将补丁文件夹内的所有文件都拷贝到C:\Program Files\Remo ...

    barco:ReMo实施

    ReMo可能是一个基于Web的应用程序,用于远程监控、管理和控制各种设备或系统。由于提到的是"安装Deps",这通常意味着我们需要为项目设置开发环境,确保所有依赖项已就绪。 2. **安装依赖项(Deps)** 在软件开发...

    Learning TypeScript 中文版 [(西班牙)雷莫 H. 詹森(Remo H. Jansen )]

    书会讨论装饰器的使用场景和实现方式。 7. **类型推断**:TypeScript能够自动推断变量、参数和返回值的类型,提升开发效率。书中会解释类型推断的工作原理和限制。 8. **编译器选项与配置**:了解如何配置tsconfig...

    系统工具-文件下载-Remo Drive Wipe(磁盘数据擦除工具) 2.0官方版.zip

    3. **支持多种存储设备**:除了常规的硬盘驱动器,Remo Drive Wipe还支持SSD固态硬盘、外部硬盘、USB驱动器、SD卡等存储设备的数据擦除。 4. **安全与便捷**:软件操作界面简洁直观,用户无需具备高级技术知识即可...

    remo:ReMo用于AsyncBackground任务

    如何使用包装? 请参阅此。 var remo = require ( 'remo' ) ; var message = { ... . } ; remo . pool ( message , function ( ) { ... } ) ; 消息中必须包含“操作”。 请参阅。 雷莫 配置您的队列和默认值: #...

    OST转PST软件(RemoConvertOSTtoPST)v1.0.0.0官方免费安装版

    Remo Convert OST to PST是一款OST转PST软件,可以把Microsoft Exchange OST文件转换为PST文件,并且转换后文件夹结构和格式不变,此外,还可用于修复损坏的OST文件,支持Microsoft Exchange 5.0/5.5/2000/2003/2007...

    remo-python:用于 remo 的 Python 库 - 计算机视觉中用于注释和图像管理的应用程序

    ••• ••••欢迎来到雷莫Remo是一个基于Web的应用程序,用于组织,注释和可视化Computer Vision数据集。 它旨在成为您团队的私有平台,以端到端的方式管理图像。 使用雷莫: 从一个地方访问您的数据集,避免分散...

    Remo:一个简单的RPC框架

    Remo 是一个快速且简单的 Java RPC 库,不会妨碍您。 启动和运行一个简单的服务不需要任何配置文件和最少的样板文件。 基本用法 首先,为您要提供的服务创建一个接口。 这个接口是描述服务期望从客户端得到什么以及...

    matlab基于关系学习和预测的昂贵多目标优化.zip

    在本压缩包“matlab基于关系学习和预测的昂贵多目标优化.zip”中,我们可以深入探讨两个关键概念:关系学习(Relational Learning)和昂贵多目标优化(Expensive Multi-objective Optimization),以及它们如何在...

    Python库 | remo-python-0.1.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:remo-python-0.1.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    homebridge-nature-remo-sensor:用于Homebridge的Nature Remo插件

    #“ Nature Remo Local API”在v1.0.0中没有获取温度,湿度和照度的API,因此此插件使用“ Nature Remo Cloud API”。 #另外,Home应用程序似乎无法创建由温度,湿度或光照传感器触发的自动化功能(已在iOS11中...

    PyPI 官网下载 | remo-0.3.27-py3-none-any.whl

    资源来自pypi官网。 资源全名:remo-0.3.27-py3-none-any.whl

Global site tag (gtag.js) - Google Analytics