RSS初探

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/进行访问即可。

你可能感兴趣的:(RSS初探)