博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web版RSS阅读器(五)——初步完成阅读功能
阅读量:4341 次
发布时间:2019-06-07

本文共 6487 字,大约阅读时间需要 21 分钟。

       上一篇博文《》中,已经分享给大家制作自己的rss解析库。稍微有点遗憾的是,它仅仅支持rss格式的博客。现在给大家分享一下我基于rome修改而成的另一款rss解析库——myrome,完美支持atom和rss 2种格式。

      myrome.jar是在rome的基础上修改而来的,主要改动的地方是:()

    1. 修改GetAuthor()返回null
    2. 修改getPublishedDate()返回null
    3. 添加获取文章摘要的接口和方法

 

      附下载地址:
      本篇主题是把myrome加入到RssReader中,修改界面,完成初步的访问和阅读的功能。具体实现的效果为:

 

    1. 根据不同的订阅信息,加载对应的图标,从而一眼得知订阅的出处
    2. 点击左侧的某个订阅,在中间的页面中显示出标题、时间和摘要列表,用水平线隔开
    3. 点击某个摘要信息,在右侧内容区域,显示该文章的所有内容。
    4. 双击摘要信息,则会用新窗口打开原文章地址。

 

      等不及了吗?点
或者
抢先查看效果吧。
      言归正传,接下来请大家跟随我初步成功的脚步:
      下载myrome-1.0.jar,拷贝到WebRoot/WEB-INF/lib下。如果已经引用过rome-0.2.jar,要提前删除掉。在com.tgb.rssreader.manager包中新建RomeReadRss类,用来解析在线rss内容。
RomeReadRss.java
package com.tgb.rssreader.manager;import java.net.URL;import java.net.URLConnection;import com.sun.syndication.feed.synd.SyndFeed;import com.sun.syndication.io.SyndFeedInput;import com.sun.syndication.io.XmlReader;/** * 解析Rss订阅信息 *  * @author Longxuan *  */public class RomeReadRss {	/**	 * 解析Rss订阅信息	 */	public SyndFeed parseRss(String rss) {		SyndFeed feed = null;		feed = null;		try {			URLConnection feedUrl = new URL(rss).openConnection();			// 由于服务器屏蔽java作为客户端访问rss,所以设置User-Agent			feedUrl.setRequestProperty("User-Agent",					"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");			// 读取Rss源			XmlReader reader = new XmlReader(feedUrl);			SyndFeedInput input = new SyndFeedInput();			// 得到SyndFeed对象,即得到Rss源里的所有信息			feed = input.build(reader);		} catch (Exception e) {			e.printStackTrace();		}		return feed;	}}
      修改left.jsp页的树形节点加载信息,根据不同的博客提供商,加载不同的图标。点击某节点后,将rss地址传递给servlet,去解析在线的rss。
left.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><%@ page import="com.tgb.rssreader.bean.*"  %><%@ page import="java.util.*" %><%	String path = request.getContextPath();	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+path+"/";%>			
      在com.tgb.rssreader.web包中新建一个RssServlet类,继承HttpServlet,实现doGet和doPost方法。它接收到有left.jsp传递过来的rss地址,调用RomeReadRss来解析rss内容。解析完毕后,转向middle.jsp,在中间这个网页中,显示解析的内容。
RssServlet.java
package com.tgb.rssreader.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.syndication.feed.synd.SyndFeed;import com.tgb.rssreader.manager.RomeReadRss;/** * 解析Rss信息资源Servlet * @author Longxuan * */@SuppressWarnings("serial")public class RssServlet extends HttpServlet {	@Override	protected void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {				//获取rss地址		String rss = request.getParameter("rss");				//获取基于myrome的解析对象		RomeReadRss romeReadRss = RomeReadRss.getInstance();				//解析rss内容,存放到SyndFeed对象中		SyndFeed feed = romeReadRss.parseRss(rss);				//设置属性,用于传递SyndFeed对象	    request.getSession().removeAttribute("feed");	    request.getSession().setAttribute("feed", feed);        //转向middle.jsp        request.getRequestDispatcher("/middle.jsp").forward(request, response);      }     @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {         doGet(req, resp);     }}
      解析完毕后,开始修改middle.jsp。它接受到request中传递过来的SyndFeed对象,读取文章标题、发布时间及摘要信息,每篇文章都用横线隔开。未阅读过的显示黑色字体,阅读过后,显示灰色字体,鼠标指上去会变蓝色。点击文章摘要后,将该摘要的索引值传递过去;双击文章摘要信息,则会在新窗口中打开对应文章的实际连接。
middle.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"	pageEncoding="GB18030"%><%@ page import="com.sun.syndication.feed.synd.*"%><%@page import="java.util.List"%><%@page session="true" %><%	String path = request.getContextPath();	String basePath = request.getScheme() + "://"			+ request.getServerName() + ":" + request.getServerPort()			+ path + "/";%>		
      
      当点击某篇文章标题时,将该文章的索引值传递到ArticleServlet中,在Session中找到对应的文章,把文章正文内容传递到content.jsp页面。所以在com.tgb.rssreader.web包中新建ArticleServlet类,继承HttpServlet,实现doGet和doPost方法。
ArticleServlet.java
package com.tgb.rssreader.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.syndication.feed.synd.SyndContent;import com.sun.syndication.feed.synd.SyndEntry;import com.sun.syndication.feed.synd.SyndFeed;/** * 获取文章正文 * @author Longxuan * */@SuppressWarnings("serial")public class ArticleServlet extends HttpServlet {	@Override	protected void doGet(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {		//获取要查看的文章的索引值		int articleIndex = request.getParameter("articleIndex") == null? 0: Integer.parseInt( request.getParameter("articleIndex"));				//获取session中的变量		SyndFeed feed = (SyndFeed) request.getSession().getAttribute("feed");		SyndContent content = (SyndContent)((SyndEntry)feed.getEntries().get(articleIndex)).getContents().get(0);		request.setAttribute("content", content.getValue());		request.getRequestDispatcher("/content.jsp").forward(request, response);	}	@Override	protected void doPost(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		doGet(req, resp);	}}
      在content.jsp中获取文章内容进行显示即可:
content.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"	pageEncoding="GB18030"%><%@page import="com.sun.syndication.feed.synd.*"%><%	String path = request.getContextPath();	String basePath = request.getScheme() + "://"			+ request.getServerName() + ":" + request.getServerPort()			+ path + "/";%>					

<%= request.getAttribute("content")==null?"

" + "
欢迎使用提高班在线Rss阅读器!" + "——@龙轩" :request.getAttribute("content").toString()%>


      至此,Web版Rss阅读器阅读博客功能基本已经完工了,终于可以这款rss阅读器的样子了。当然需要优化的地方还很多。暂时打算告一段落,等过段时间再进行优化。基本的代码都已经写过了,不打算单独提供源码了。最后晒一下效果图吧:

 

转载于:https://www.cnblogs.com/suncoolcat/p/3285527.html

你可能感兴趣的文章
在 Linux 下使用 水星MW150cus (RTL8188CUS芯片)无线网卡
查看>>
JavaScript中的方法重载
查看>>
Js中变量的作用域
查看>>
sql--截取字段中的部分数据
查看>>
linux 遇到(vsftpd)—500 OOPS:chroot
查看>>
[Eigen]C++开源线代库
查看>>
java实现简单的单点登录
查看>>
GIS学习之栅格数据
查看>>
C# model代码生成器
查看>>
NCO3部署到服务器后无法连接到SAP
查看>>
Eclipse Debug
查看>>
CodeForces 149D Coloring Brackets
查看>>
[转]PLSQL Developer备份恢复oracle数据
查看>>
[转]C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
查看>>
3.23课·········格式与布局
查看>>
TCP/IP——ARP与RARP简记
查看>>
python(七) Python中单下划线和双下划线
查看>>
JavaScript入门二
查看>>
form 转json,将form表单中的数据序列化数组后转换为Json
查看>>
《JAVA与模式》之抽象工厂模式
查看>>