网站中实现RSS订阅的功能

程序可以从这里下载:http://download.csdn.net/detail/caoyuan10036/3975039

一、功能描述:

在我们浏览网站的时候,会看到很多频道,文章的头上会有一个RSS订阅的图标,点进去后会进入feed(供RSS阅读器订阅的一个地址)页面,然后把地址栏的地址复制下来,这就是我们要放入RSS阅读器订阅的feed,放入RSS阅读器后,变可以订阅此内容了。效果图有点烂,可功能都差不多实现了:



二、RSS阅读

阅读RSS主要用了ROME组件,导入jar包后就可以使用,很简单的,提供一个地址,便可以在jsp页面中显示出本地址所有文章,贴上Rome组件的RSS阅读jsp代码:


<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="db.Database" %>




Insert title here


<%
request.setCharacterEncoding("utf-8");
String xmlmsg = request.getParameter("xmlmsg");//得到传来的feed地址,通过表单传来就行
//----------------------------------这是我扩展的功能,可以去掉---------------------------------
 //这里是我扩展的功能,首先查询磁条RSS的feed是否已经订阅过了,如果订阅过了则提示‘已订阅’
Database db = new Database();Connection conn = db.getconn();String sql="select * from tbl_rss_address where rss_address=?";PreparedStatement ps = conn.prepareStatement(sql);ps.setString(1,xmlmsg);ResultSet rs = ps.executeQuery();if(rs.next()){out.print("对不起,您已经订阅过了此内容");}
//-------------------------------------------------------------------------------------------
 else{//这里就是Rome组件里读取feed的东西了java.util.Properties systemSettings = System.getProperties();systemSettings.put("http.proxyHost", "mywebcache.com");systemSettings.put("http.proxyPort", "8080");System.setProperties(systemSettings);String urlStr = xmlmsg;//拿到feed地址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));//----------------------这是我扩展的功能,可以去掉---------------------------------------------------------
//把这条RSS的feed地址存入我们的数据库,因为我们只有通过feed地址才能通过Rome组件读出我们订阅的内容,所以要起到订阅的功能,必须把feed存入数据库
 sql = "insert into tbl_rss_address(rss_address,title) values(?,?)"; ps = conn.prepareStatement(sql);ps.setString(1,xmlmsg);ps.setString(2,feed.getTitle());ps.executeUpdate();//---------------------------------------------------------------------------------------------------------%>

<%=feed.getTitle()%>

<%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);%><%}%>
NumberTitleTime
<%=i+1%><%=entry.getTitle()%><%=entry.getPublishedDate()%>

<%} %>
 
  

 三、阅读feed的方法实现了,我们现在制作自己网站文章的feed供RSS阅读器订阅,这里是通过jdom操作xml模版来生成的 
  

package com.dao;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import db.Database;

public class ProductRss {

	public void cereateRss(String channel2) throws IOException, SQLException{
		
		 Document doc = new Document(); //创建空白文档	 
		  /*
		   * 创建PI并添加到文档
		   */
//		  Map map = new HashMap();
//		  map.put("type","text/xsl");
//		  map.put("href","products.xsl");
//		  ProcessingInstruction pi = new ProcessingInstruction("xml-stylesheet",map);//处理指令 
		  //将处理指令添加
//		  doc.addContent(pi);
		  
		        /*
		         * 创建文档类型并添加到文档
		         */
//		  DocType  type  = new DocType("productsDetails"); //文档类型
//		  type.setPublicID("public.dtd");    //设为 public
//		  //type.setSystemID("system.dtd");   //设为 system
//		  //添加文档类型
//		  doc.addContent(type);
		 
		        Database db = new Database();//连接数据库
			Connection conn = db.getconn();
			Statement stmt = conn.createStatement();

			String sql = "select * from article where channel=?";
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setString(1,channel2);
			ResultSet rs = ps.executeQuery();	
		  
	
		  /**/
		  Element root = new Element("rss"); //创建一个元素
		  doc.setRootElement(root); //将该元素做为根元素		  
		  Attribute  version = new Attribute("version","2.0"); //创建属性
		  root.setAttribute(version); //为product设置属性
		  
		  /**/		  		  
		  Element channel = new Element("channel");
		  root.addContent(channel); //将product做为productsDetails的子元素		  		  
		  //为product创建子元素,并将其content分别设为100.00,red
		  channel.addContent(new Element("title").setText("文章列表"));	
		  channel.addContent(new Element("link").setText("www.baidu.com"));	
		  channel.addContent(new Element("description").setText("这是我的rss小例子,希望能成功"));
		  
		while(rs.next()){
		  Element item = new Element("item");
		  channel.addContent(item); //将product做为productsDetails的子元素		  
		  item.addContent(new Element("title").setText(rs.getString("title")));	
		  item.addContent(new Element("link").setText("detail.jsp?id="+rs.getString("id")));	
		  item.addContent(new Element("author").setText(rs.getString("author")));	
		  item.addContent(new Element("description").setText(rs.getString("description")));
		}		 
		  XMLOutputter outp = new XMLOutputter(Format.getPrettyFormat());
		  
		  File file = new File("D:\\305\\c\\RomeRssReader\\WebContent\\data.xml");//生成的feed
		  OutputStream out = new FileOutputStream(file);
		  outp.output(doc, out); //输出XML文档
		  System.out.print("XML 文档生成完毕!");
		  out.close();
		  				  
		 }
		
	}

这样就生成了D:\\305\\c\\RomeRssReader\\WebContent\\data.xml这样一个feed,可以阅读了。

其实feed就是一个xml文件..里面有特定的标签的....我们生成feed就是用jdom去生成这个xml文件。

整个程序代码:在这里下载       http://download.csdn.net/detail/caoyuan10036/3975039




你可能感兴趣的:(web)