Java实现Web版RSS阅读器(二)利用dTree树形加载rss订阅分组列表
当前位置:以往代写 > JAVA 教程 >Java实现Web版RSS阅读器(二)利用dTree树形加载rss订阅分组列表
2019-06-14

Java实现Web版RSS阅读器(二)利用dTree树形加载rss订阅分组列表

Java实现Web版RSS阅读器(二)利用dTree树形加载rss订阅分组列表

副标题#e#

在上一边博客《Web版RSS阅读器(一)——dom4j读取xml(opml)文件》中已经讲过如何读取rss订阅文件了。这次就把订阅的文件读取到页面上,利用树形布局举办加载显示。

不规划利用非凡的控件举办树型显示,也不想本身写了,想省劲些,就在

网上找了一个js树形剧本——dTree。dTree是一个易于利用的JavaScript树形

菜单控件。支持无限分级,可以在同一个页面中安排多个dTree,可觉得每个

节点指定差异的图标。

主页:http://destroydrop.com/javascripts/tree/default.html

下载:http://destroydrop.com/javascripts/tree/dtree.zip

示例:http://destroydrop.com/javascripts/tree/v1/

Java实现Web版RSS阅读器(二)操作dTree树形加载rss订阅分组列表

我利用的是mvc2来实现加载rss分组列表的。mvc2的流程如下:

Java实现Web版RSS阅读器(二)操作dTree树形加载rss订阅分组列表


#p#副标题#e#

由于这次是利用jsp来显示,所以把rss文件夹转移到WebRoot文件夹下了。对本来的【ReadXML.java】做了部门修改,从头贴出来。

package com.tgb.rssreader.manager;  
      
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  
      
import org.dom4j.Document;  
import org.dom4j.DocumentException;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
      
import com.tgb.rssreader.bean.RssBean;  
import com.tgb.rssreader.bean.RssConfigBean;  
import com.tgb.rssreader.bean.RssTeamBean;  
      
/** 
 * 读取xml文件 
 * @author Longxuan 
 * 
 */
public class ReadXML {  
      
    // rss分组订阅列表  
    private List<RssTeamBean> rssTeamBeanList = new ArrayList<RssTeamBean>();  
      
    /** 
     * 读取rss文件列表 
     * @param directory 
     */
    public void ReadRssTeam(String directory) {  
      
        // rss文件列表设置信息实体  
        RssConfigMgr rssConfigMgr = new RssConfigMgr();  
        List<RssConfigBean> list = rssConfigMgr.getRssConfig();  
      
        String errText = "";// 记录错误信息  
      
        // 轮回读取rss文件列表  
        for (RssConfigBean rssConfig : list) {  
            // System.out.println(rssConfig.getName() + "----" +  
            // rssConfig.getPath());  
      
            try {  
      
                // 读取rss文件内容  
                //ReadRss(System.getProperty("user.dir")+ rssConfig.getPath());  
                ReadRss(directory + rssConfig.getPath());  
      
            } catch (Exception e) {  
                errText += e.getMessage();  
            }  
        }  
              
        //假如有异常信息,则汇总后抛出  
        if(!"".equals(errText)){  
            throw new RuntimeException(errText);  
        }  
    }  
      
    /** 
     * 读取ompl文件 
     *  
     * @param filePath 
     */
    private void ReadRss(String filePath) {  
      
        File file = new File(filePath);  
      
        if (!file.exists()) {  
//           System.out.println("找不到【" + filePath + "】文件");  
//           return;  
            throw new RuntimeException("找不到【" + filePath + "】文件");  
        }  
      
        try {  
      
            // 读取并理会XML文档  
            // SAXReader就是一个管道,用一个流的方法,把xml文件读出来  
            SAXReader reader = new SAXReader();  
            FileInputStream fis = new FileInputStream(file);  
      
            // 下面的是通过理会xml字符串的  
            Document doc = reader.read(fis);  
      
            // 获取根节点  
            Element rootElt = doc.getRootElement(); // 获取根节点  
            // System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称  
      
            // 获取head/title节点  
            Element titleElt = (Element) rootElt.selectSingleNode("head/title");// 获取head节点下的子节点title  
      
            // 获取分组名称  
            String title = titleElt.getTextTrim();  
      
            // 获取body节点  
            Element bodyElt = (Element) rootElt.selectSingleNode("body");  
      
            // 获取body下的第一个outline节点  
            Element outlineElt = (Element) bodyElt.selectSingleNode("outline");  
      
            // 判定该outlineElt节点的属性数量,>2说明是具体博客订阅信息,不然则是分组信息。  
            if (outlineElt.attributes().size() > 2) { // 具体博客订阅信息  
      
                // 实例化 RSS分组实体  
                RssTeamBean rssTeamBean = new RssTeamBean();  
      
                // 获取body节点下的outline节点  
                Iterator<?> iter = bodyElt.elementIterator("outline");  
      
                // 输出分组名称  
                // System.out.println("分组名称:" + title);  
      
                // 记录分组名称  
                rssTeamBean.setTitle(title);  
                rssTeamBean.setText(title);  
      
                // 实例化订阅列表  
                List<RssBean> rssBeanList = new ArrayList<RssBean>();  
      
                // 获取具体博客订阅信息  
                ReadBlogsInfo(iter, rssBeanList);  
      
                // 配置订阅列表到分组中  
                rssTeamBean.setRssBeanList(rssBeanList);  
      
                // 添加分组到rss分组订阅列表  
                rssTeamBeanList.add(rssTeamBean);  
      
            } else { // 分组信息  
      
                // 获取body节点下的outline节点
			//
#p#分页标题#e#

正题终于开始了:在src中新建包com.tgb.rssreader.web,添加RssTeamServlet,担任HttpServlet,实现doGet和doPost要领。它主要是用来挪用com.tgb.rssreader.manager包下的ReadXML 类,以获取到分组信息,然后将其转发给left.jsp。源代码如下:

package com.tgb.rssreader.web;  
      
import java.io.IOException;  
import java.util.List;  
      
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
      
import com.tgb.rssreader.bean.RssTeamBean;  
import com.tgb.rssreader.manager.ReadXML;  
      
/** 
 * 加载Rss分组 
 * @author Longxuan 
 * 
 */
@SuppressWarnings("serial")  
public class RssTeamServlet extends HttpServlet {  
          
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
              
        //获取web项目标根目次的实际目次  
        String path = this.getServletConfig().getServletContext().getRealPath("/");   
              
        ReadXML readXML = new ReadXML();  
              
        //读取目次下的rss文件夹中的所有opml文件
	//

最后一步就是在界面上动工了。界面是本身先简朴的做了个html的模版,已上传至百度网盘。机关利用frameset支解成3列,树形布局的Rss分组信息左侧,即left.jsp。中间的为某个rss订阅地点的文章列表,名为middle.jsp,右侧则是显示文章的处所,名为content.jsp。

此刻先做成这样一个结果:左侧的left.jsp页,利用dTree的树形布局加载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+"/";  
%>  
          
<html>  
<head>  
    <base href="<%=basePath %>"  />  
    <link rel="stylesheet" href="style/main.css">  
    <link rel="StyleSheet" href="style/dtree.css" type="text/css"  />  
    <script type="text/javascript" src="js/dtree.js"></script>  
</head>  
<body>  
<div id="leftMenu" style="overflow-y:auto; overflow-x:auto;">  
  <script type="text/javascript">  
        <!--  
        <!--   add(id, pid, name, url, title, target, icon, iconOpen, open);  
        //9个参数说明: id,pid,显示名称,打开的url,提示信息,方针框架,闭适时的图标,展开时的图标,是否展开(open || false)  
        -->
        d = new dTree('d');  
        d.add(0,-1,'博客分组','','','','','img/blog.png');  
              
<%  
    int i = 0;//当前分组的节点索引值  
    int c = 0;//节点总数  
          
    //获取所有分组信息  
    List<RssTeamBean> rssTemBeanList = (List)request.getAttribute("rssTemBeanList");  
          
    //遍历所有分组信息  
    for (RssTeamBean rssTeamBean:rssTemBeanList) {  
        c = c+1;//总个数加1  
%>  
        //添加组节点  
        d.add(<%=c%>,0,'<%=rssTeamBean.getTitle()%>','','','','img/open.png','img/close.png');  
<%  
        i=c;//设定当前节点为分组节点索引值  
        //遍历分组下的所有订阅信息  
        for (RssBean rssBean : rssTeamBean.getRssBeanList()) {  
            c = c+1;//总个数加1  
%>  
            //添加订阅信息节点  
            d.add(<%=c%>,<%=i%>,'<%=rssBean.getTitle()%>','<%=rssBean.getXmlUrl()%>','<%=rssBean.getText()%>','contenthtml');  
<%     
        }  
    }  
%>  
        //在界面上显示树形布局  
        document.write(d);  
      
        //-->  
    </script>  
</div>  
</body>  
</html>

临时的结果图如下:

Java实现Web版RSS阅读器(二)操作dTree树形加载rss订阅分组列表

至此,读取rss分组已经完成了。接下来的博文中,会给各人讲解一下rss版本以及理会在线的rss订阅。敬请等候。

    关键字:

在线提交作业