俊星的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 俊星 閱讀(142) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 南靖县| 博罗县| 岳池县| 南阳市| 石狮市| 石楼县| 中方县| 长子县| 沅江市| 民勤县| 酉阳| 右玉县| 保德县| 咸丰县| 乐至县| 石渠县| 改则县| 晴隆县| 天柱县| 沾化县| 怀集县| 盱眙县| 永济市| 边坝县| 巴南区| 亳州市| 克什克腾旗| 乌海市| 土默特左旗| 连城县| 左贡县| 北京市| 合江县| 马边| 金华市| 泸西县| 太保市| 开鲁县| 塔河县| 高淳县| 海阳市|