一个JSP的RSS输出功能。我不理解网上其它人是怎么做得那么复杂?比如用流输出,用sevelet输出,用dom4j组件生成,可能是需求不同吧。
我有我办法,我的需求大概是这样,我只要一个JSP页面完成RSS2.0的输出。不要用组件或者Sevelet实现、并且需要实时的调用数据而不是生成XML。
<%response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setHeader("expires","0");
response.setHeader("content-type","text/xml;charset=utf-8");
ArticleDao Art = new ArticleDao();
List<Article> listArt = Art.selectPage(1,10);
//获取到http地址
String url=request.getScheme()+"://";
url+=request.getHeader("host");
url+=request.getContextPath()+"/";
//if(request.getQueryString()!=null)
//url+="?"+request.getQueryString();
//拼一个XML格式文件出来。
String outputHeader="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+"\n"
+"<rss version=\"2.0\">"+"\n"
+"<channel>"+"\n"
+"<title>可惜危机博客</title>"+"\n"
+"<image>"+"\n"
+"<title>可惜危机博客</title>"+"\n"
+"<link>"+url+"</link>"+"\n"
+"<url>.</url>"+"\n"
+"</image>"+"\n"
+"<description>Kcvg</description>"+"\n"
+"<link>"+url+"</link>"+"\n"
+"<language>zh-cn</language>"+"\n"
+"<docs>可惜危机</docs>"+"\n"
+"<generator>可惜危机博客JSP版本</generator>"+"\n";
out.println(outputHeader);
for(int i=0;i<listArt.size();i++){
String temp="";
temp="<item>"+"\n"
+"<title><![CDATA["+listArt.get(i).getTitle()+"]]></title>"+"\n"
+"<link>"+url+"diary.jsp?id="+listArt.get(i).getId()+"</link>"+"\n"
+"<author>Kcvg</author>"+"\n"
+"<pubDate>"+listArt.get(i).getTimer()+"</pubDate>"+"\n"
+"<description><![CDATA["+listArt.get(i).getContent()+"]]></description>"+"\n"
+"</item>"+"\n";
out.println(temp);
}
out.println("</channel>\n</rss>");
%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<jsp:directive.page import="com.blog.dao.*" />
<jsp:directive.page import="com.blog.entity.*" />
美中不足的就是太多的“+”连接字符了,但是考虑到自己只是一个博客RSS的输出,应该没什么大的问题。另外特别强调一点,XML文件第一行是不能有空行的,所以把JSP的导包代码都放到下面来了。
这个页面丢参数进来可以扩展成全部RSS输出或某篇RSS输出,嗯,要是我要这个文件变成XML后缀的怎么办?那也简单,伪静态就能帮上忙了。