1、此處有一篇比較好RSS原理介紹文章:
http://www.sunnychen.org/article.asp?id=82
2、編寫相關的實現(xiàn)代碼:
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服務器已經(jīng)啟動");
}
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協(xié)議:空行表示信息結束
this.sendRss(out);
out.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void sendRss(PrintWriter out) throws IOException {
// 按照RSS 2.0 的規(guī)則進行生成
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方式安裝的話,會自動生成一個服務);
同時還需要額外到官網(wǎng)下載相關的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日晚間消息,新浪科技今天在騰訊官網(wǎng)獲悉,騰訊已于近日正式起訴360,要求奇虎及其關聯(lián)公司停止侵權、公開道歉并作出賠償。', current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (2, '國奧“搶人“引中超多隊不滿',' 本屆國奧隊集訓計劃的安排,意味集訓的26人將錯過中超聯(lián)賽的最后四輪比賽。受影響最大的大連實德俱樂部只同意楊博宇一人按時去報到,呂鵬、王選宏和趙宏略三人將在聯(lián)賽結束后才能去參加集訓。', current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (3, '外交部就日朝官員訪華及南海問題等答問',' 2010年10月14日,外交部發(fā)言人馬朝旭主持例行記者會。', current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (4, '智利總統(tǒng)稱將追究礦難責任','據(jù)外電報道,智利圣何塞銅礦救援行動取得了令人感動的成功,也吸引了全世界關注的目光,不過,在救援行動完成后,圣何塞銅礦的“命運”又將何去何從?智利總統(tǒng)皮涅拉14日表示,該礦將永久性關閉,同時,將責成當局對相關責任人進行懲罰。', current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (5, '魯能只是所謂領頭羊',' 本周六,上海申花就將北上長春,客場挑戰(zhàn)長春亞泰。對于這個幾個賽季都沒有戰(zhàn)勝的對手來說,本場比賽異常關鍵。賽前,老布對這個對手異常重視,在他看來,長春這個對手絕非一般,而對于本場比賽,老布也明確表示,自己要率領球隊,贏得本場比賽的勝利,打破從未戰(zhàn)勝過長春的尷', current_timestamp);
INSERT INTO tbl_messages (msg_id,msg_name, msg_desc, msg_time) VALUES (6, '英第二大警察局通過Twitter公布每起案件','北京時間10月14日晚間消息,據(jù)國外媒體報道,英國第二大警察局大曼徹斯特警察局周四表示,計劃將所處理的每一起案件在24小時內發(fā)布到Twitter網(wǎng)站上。', current_timestamp);
5、運行:
在瀏覽器中輸入
http://localhost/進行訪問即可。