自己動手寫Web容器之TomJetty之二:開啓服務器

傳送門 ☞ 輪子的專欄 ☞ 轉載請註明 ☞ 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服務能夠認識它,明白它的意圖!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章