首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 版 RSS 閱讀器實戰(五):基於 myrome 實現完整閱讀功能

     編輯:Java 相關知識

系列第五篇,整合改造版 ROME 庫(myrome)實現 RSS/Atom 統一解析,構建三欄式閱讀界面:左側訂閱樹、中間文章列表、右側正文詳情,支援雙擊跳轉原文。

myrome 庫核心改進

  • 基於 ROME 1.0 修改,完美支援 RSS 2.0 / Atom 0.3/1.0 兩大格式
  • 修復 getAuthor()、getPublishedDate() 返回 null 問題
  • 新增文章摘要獲取接口 getSummary(int length)
  • Maven 坐標:com.tgb.rssreader:myrome:1.0 (內部發布)

核心解析類:RomeReadRss


public class RomeReadRss {
    public SyndFeed parseRss(String rssUrl) {
        try {
            URLConnection conn = new URL(rssUrl).openConnection();
            // 繞過服務器 User-Agent 限制
            conn.setRequestProperty("User-Agent", 
                "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            
            XmlReader reader = new XmlReader(conn);
            SyndFeedInput input = new SyndFeedInput();
            return input.build(reader);
        } catch (Exception e) {
            log.error("RSS 解析失敗: " + rssUrl, e);
            return null;
        }
    }
}

Servlet 控制器鏈

  1. RssServlet: 接收左側樹點擊的 RSS URL → 調用 RomeReadRss → 將 SyndFeed 存入 Session → 轉發 middle.jsp
  2. ArticleServlet: 接收文章索引 → 從 Session SyndFeed 取對應 SyndEntry → 提取正文 → 轉發 content.jsp

前端頁面關鍵邏輯

middle.jsp:文章列表渲染


<% SyndFeed feed = (SyndFeed) session.getAttribute("feed"); %>
<% List entries = feed.getEntries(); %>
<% for (int i = 0; i < entries.size(); i++) { %>
    <% SyndEntry entry = (SyndEntry) entries.get(i); %>
    <a href="servlet/ArticleServlet?articleIndex=<%=i%>" 
       target="contenthtml"
       ondblclick="window.open('<%=entry.getLink()%>')"
       title="<%=entry.getTitle()%>">
        <li><%=entry.getTitle()%> <%=entry.getPublishedDate()%></li>
        <li><%=((SyndContent)entry.getContents().get(0)).getSummary(30)%></li>
    </a>
    <hr>
<% } %>

content.jsp:正文顯示


<div id="content">
    <%= request.getAttribute("content") != null ? 
        request.getAttribute("content") : 
        "歡迎使用 RSS 閱讀器!" %>
</div>

left.jsp:訂閱樹圖標差異化


<script>
d = new dTree('d');
d.add(0,-1,'博客分組','','','','img/blog.png');
// 根據博客商動態設置圖標
// CSDN → img/csdn.png, 博客園 → img/cnblogs.png ...
</script>

關鍵技術點總結

模塊技術選型解決問題
RSS 解析myrome (ROME 改造版)統一 RSS/Atom、修復字段缺失、摘要截取
跨域/反爬設置 User-Agent 模擬瀏覽器繞過服務器屏蔽 Java 默認 UA
會話狀態HttpSession 存儲 SyndFeed避免重複解析,支援列表/詳情聯動
前端框架dTree + 原生 JS + Frameset輕量級三欄布局,無第三方依賴
雙擊跳轉ondblclick + window.open()區分單擊(框架內)與雙擊(新窗口原文)

效果展示

RSS閱讀器主界面

文章閱讀詳情

後續優化方向

  • 引入 Redis 緩存解析結果,減少重複網絡請求
  • 實現 OPML 導入/導出,支援訂閱遷移
  • 增加未讀計數、標記已讀、收藏夾功能
  • 重構為 REST API + Vue/React 前後端分離架構
  • 支援全文檢索(Lucene/Elasticsearch)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved