起初会有各种的规范,也就是要实现一个符合rss规范的xml文档,这个文档会在火狐、QQ浏览器上自动解析成一个文章列表,大概就是这个意思,好像还有个rss阅读器什么的,反正这个RSS订阅功能在2000年初的时候好像流行了一段时间,但是后来就不火了,所以网上可供参考的内容也不多吧。。。少说废话 ,直接code吧。
这是规范。。。。
好了,以上就是我当初拿到的规范和要实现的内容模板,直接看code。
我是用的web框架是sping+springmvc+hibernate,数据库的话是mysql.
package com.hjhz.app.web.action.admin.rss;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.hjhz.app.common.Global;
import com.hjhz.app.common.WebRootPath;
import com.hjhz.app.db.dao.JksbMessageDAO;
import com.hjhz.app.db.po.JksbMessage;
import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Description;
import com.sun.syndication.feed.rss.Item;
import com.sun.syndication.feed.rss.Source;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.WireFeedOutput;
/**
*
* @author YGA
*
*/
@Controller
@RequestMapping(value="/RSS")
public class SiteRSSAction extends ParameterizableViewController{
private static final String COULD_NOT_GENERATE_FEED_ERROR = "Could not generate feed";
@Inject
private JksbMessageDAO JksbMessageDAO;
@RequestMapping(value="/getRss")
public String createRSS(HttpServletRequest request,HttpServletResponse response) throws Exception{
String rootPath = WebRootPath.getPath();
String path = rootPath + Global.UPLOAD_FILE_RSS_PATH;//上传路径
try {
Channel channel = getChannel(request);
OutputStreamWriter o = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");//文件编码格式为utf-8
// Writer w=new FileWriter(out);
WireFeedOutput outs = new WireFeedOutput();
outs.output(channel, o);//先上传至服务器做保存
o.close();
/*****************************************************************/
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File(path)));//再解析上传的RSS的xml文件为Document格式
Element element = doc.getDocumentElement();//获得根节点
NodeList nlist=element.getChildNodes();//获得根节点下的所有子节点
for(int i=0;i<nlist.getLength();i++){
Node node1 = nlist.item(i);
if("channel".equals(node1.getNodeName())){
NodeList nodeDetail = node1.getChi