俊星的BLOG

RSS初探

1、此处有一篇比较好RSS原理介绍文章:http://www.sunnychen.org/article.asp?id=82
2、编写相关的实现代码:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 简单HTTP服务器
 * 
 * 
@author kinkding
 
*/
public class MyHTTPServer implements Runnable {
    ServerSocket server;
    
int port = 80;

    
public MyHTTPServer() throws IOException {
        server 
= new ServerSocket(port);
        
new Thread(this).start();
        System.out.println(
"HTTP服务器已经启动");
    }

    
public void run() {
        
while (true) {
            
try {
                Socket client 
= server.accept();
                System.out.println(
"接收到客户端:" + client);

                PrintWriter out 
= new PrintWriter(client.getOutputStream(), true);
                out.println(
"HTTP/1.0 200 OK");
                out.println(
"Content-Type:text/html;charset=GBK");
                out.println();
// HTTP协议:空行表示信息结束
                this.sendRss(out);
                out.close();
                client.close();
            } 
catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    
private void sendRss(PrintWriter out) throws IOException {
        
// 按照RSS 2.0 的规则进行生成
        out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");
        out.println(
"<rss version=\"2.0\">");
        out.println(
"<channel>");
        out.println(
"<title>科技要闻-CT新闻</title>");
        out.println(
"<link>http://localhost</link>");
        out.println(
"<language>zh-cn</language>");
        out.println(
"<description>科技要闻-CT新闻</description>");
        Date date 
= new Date();
        SimpleDateFormat formatter 
= new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z", Locale.US);
        formatter.setTimeZone(TimeZone.getTimeZone(
"GMT"));
        out.println(
"<pubDate>" + formatter.format(date) + "</pubDate>");
        
// 封装条目
        List<Message> msgs = this.queryMsgs();
        
for (Message m : msgs) {
            out.println(
"<item>");
            out.println(
"<title>" + m.name + "</title>");
            out.println(
"<pubDate>" + formatter.format(m.time) + "</pubDate>");
            out.println(
"<description>" + m.desc + "</description>");
            out.println(
"<link>http://localhost/" + m.id + "</link>");
            out.println(
"<guid>http://localhost/" + m.id + "</guid>");
            out.println(
"</item>");
        }
        out.println(
"</channel>");
        out.println(
"</rss>");
    }

    
private List<Message> queryMsgs() {
        List
<Message> msgs = new ArrayList<Message>();
        
try {
            Class.forName(
"org.postgresql.Driver");
            String url 
= "jdbc:postgresql://localhost:5432/postgres";
            Connection connection 
= DriverManager.getConnection(url, "postgres""admin");
            Statement stmt 
= connection.createStatement();
            
// 查询前5条记录进行显示
            ResultSet rs = stmt.executeQuery("SELECT * FROM tbl_messages order by msg_time desc limit 5");

            
while (rs.next()) {
                Message msg 
= new Message();
                msg.id 
= rs.getInt("msg_id");
                msg.name 
= rs.getString("msg_name");
                msg.desc 
= rs.getString("msg_desc");
                msg.time 
= rs.getTimestamp("msg_time");
                msgs.add(msg);
            }
            rs.close();
            stmt.close();
            connection.close();
        } 
catch (ClassNotFoundException e) {
            e.printStackTrace();
        } 
catch (SQLException e) {
            e.printStackTrace();
        }
        
return msgs;
    }

    
public static void main(String[] args) {
        
try {
            
new MyHTTPServer();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
    }

    
class Message {
        
int id;
        String name;
        String desc;
        Timestamp time;
    }

}

3、配置postgresql,本机安装的是9.0版本,特别需要注意的是,安装目录中不能有空格。(直接exe方式安装的话,会自动生成一个服务);
同时还需要额外到官网下载相关的jdbc驱动,因我本机JAVA是1.5,所以选择的是JDBC3的驱动包:postgresql-9.0-801.jdbc3.zip
4、编写相关的脚本:
create table tbl_messages(
msg_id 
integer PRIMARY KEY,
msg_name 
text,
msg_desc 
text,
msg_time  
timestamp     
);

INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (1'腾讯正式起诉360不正当竞争','北京时间10月14日晚间消息,新浪科技今天在腾讯官网获悉,腾讯已于近日正式起诉360,要求奇虎及其关联公司停止侵权、公开道歉并作出赔偿。'current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (2'国奥“抢人“引中超多队不满','  本届国奥队集训计划的安排,意味集训的26人将错过中超联赛的最后四轮比赛。受影响最大的大连实德俱乐部只同意杨博宇一人按时去报到,吕鹏、王选宏和赵宏略三人将在联赛结束后才能去参加集训。'current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (3'外交部就日朝官员访华及南海问题等答问','  2010年10月14日,外交部发言人马朝旭主持例行记者会。'current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (4'智利总统称将追究矿难责任','据外电报道,智利圣何塞铜矿救援行动取得了令人感动的成功,也吸引了全世界关注的目光,不过,在救援行动完成后,圣何塞铜矿的“命运”又将何去何从?智利总统皮涅拉14日表示,该矿将永久性关闭,同时,将责成当局对相关责任人进行惩罚。'current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (5'鲁能只是所谓领头羊','  本周六,上海申花就将北上长春,客场挑战长春亚泰。对于这个几个赛季都没有战胜的对手来说,本场比赛异常关键。赛前,老布对这个对手异常重视,在他看来,长春这个对手绝非一般,而对于本场比赛,老布也明确表示,自己要率领球队,赢得本场比赛的胜利,打破从未战胜过长春的尴'current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (6'英第二大警察局通过Twitter公布每起案件','北京时间10月14日晚间消息,据国外媒体报道,英国第二大警察局大曼彻斯特警察局周四表示,计划将所处理的每一起案件在24小时内发布到Twitter网站上。'current_timestamp);

5、运行:
在浏览器中输入http://localhost/进行访问即可。

posted on 2010-10-15 00:23 俊星 阅读(134) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: