傳送門 ☞ 輪子的專欄 ☞ 轉載請註明 ☞ http://blog.csdn.net/leverage_1229
上一節我們對於實現TomJetty服務器做了一些與Web有關的知識鋪墊和回顧。那麼從本節正式開始實現TomJetty服務器的“山寨”之旅。要想實現一個服務器,第一步要把服務器建立起來,並且能夠正常運行,才能等待來自客戶端的請求。考慮到這一點,我們本節就來處理TomJetty服務器的創建和啓動工作。
1服務器建立
(1)新建一個名爲TomJetty的Java工程
(2)在工程根目錄下新建一個tomjetty.config文件,用於提供服務器配置參數
tomjetty.port=9527
tomjetty.requestheader.class=cn.lynn.tomjetty.RequestHeaderParserImpl
(3)編寫一個工具類TomJettyUtil,用於程序讀取服務器配置參數值
package cn.lynn.tomjetty;
import java.io.IOException;
import java.io.FileInputStream;
import java.util.Properties;
public class TomJettyUtil {
private static Properties props = new Properties();
static {
try {
props.load(new FileInputStream(".//tomjetty.config"));
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
}
}
public static String getValue(String key) {
return props.getProperty(key);
}
}
(4)編寫一個TomJetty類繼承於Thread類,用於封裝服務器對象
public class TomJetty extends Thread {
private static ServerSocket server;
private Socket socket;
public TomJetty(Socket socket) {
this.socket = socket;
}
...
}
(5)爲TomJetty類提供openServer()和closeServer()方法,用於封裝打開和關閉服務器的細節操作
public static void openServer() throws Exception {
server = new ServerSocket(Integer.parseInt(TomJettyUtil.getValue("tomjetty.port")));
while (true) {
new TomJetty(server.accept()).start();
}
}
public static void closeServer() throws Exception {
if (server != null) {
if (!server.isClosed()) {
server.close();
}
}
}
到這裏爲止,TomJetty服務器已經建立完畢,並且提供了openServer()和closeServer()方法,供外部程序調用,以執行打開和關閉服務器的操作。
2服務器啓動
編寫一個服務器啓動類StartTomJetty。
package cn.lynn.tomjetty;
public class StartTomJetty {
public static void main(String[] args) {
try {
TomJetty.openServer();
} catch (Exception e) {
try {
TomJetty.closeServer();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
這樣一來,TomJetty服務器就能正常啓動了,控制檯無任何異常出現出現^_^。當然,它什麼也不會做。因爲在run()方法中沒有進行任何操作^_^。好了,現在服務器的創建和啓動工作都已完成,可以等待來自客戶端的請求。但是當真的有請求來到時,目前的TomJetty服務器會感到“束手無策”,不知道請求到底要做什麼、需要什麼東西。這還談什麼交互呢?因此在下一節裏我們將掀開HTTP請求頭的神祕面紗,讓TomJetty服務能夠認識它,明白它的意圖!