<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 204326
    • 排名 - 283

    最新評論

    HttpServer1?類?

    此應用程序內的?HttpServer1類?與前文簡單的?WEB?服務器應用程序中的HttpServer?十分相似。但是,此應用程序內的?HttpServer1?能服務靜態資源和?servlet。如果要請求一個靜態資源,請輸入以下?URL:?

    http://machineName:port/staticResource?

    它就是前文中提到的怎樣在?WEB?服務器應用程序里請求靜態資源。如果要請求一個?servlet,請輸入以下?URL:?

    http://machineName:port/servlet/servletClass?

    如果您想在本地瀏覽器請求一個?PrimitiveServle?servlet?,請輸入以下?URL:?

    http://localhost:8080/servlet/PrimitiveServlet?

    下面?Listing?2.2?類的?await?方法,是等待一個?HTTP?請求,直到一個發布?shutdown?命令。與前文的?await?方法相似。?

    Listing?2.2.?HttpServer1?類的?await?方法
    public?void?await()?{
    ServerSocket?serverSocket?=?null;
    int???????port??=?8080;
    try?{
    serverSocket?=??new?ServerSocket(port,?1,InetAddress.getByName("127.0.0.1"));
    ????}catch?(IOException?e)?{
    e.printStackTrace();
    System.exit(1);
    ????}
    //?循環,等待一個請求
    while?(!shutdown)?{
    Socket?socket???????=?null;
    InputStream?input???=?null;
    OutputStream?output?=?null;
    try?{
    socket?=?serverSocket.accept();
    input??=?socket.getInputStream();
    output?=?socket.getOutputStream();
    //?創建請求對象并解析
    Request?request?=?new?Request(input);
    request.parse();
    //?創建回應對象
    Response?response?=?new?Response(output);
    response.setRequest(request);
    //檢測是否是?servlet?或靜態資源的請求
    //servlet?請求以?"/servlet/"?開始?
    if?(request.getUri().startsWith("/servlet/"))?{
    ServletProcessor1?processor?=?new?ServletProcessor1();
    processor.process(request,?response);
    ????????????}
    else?{
    StaticResourceProcessor?processor?=new?StaticResourceProcessor();
    processor.process(request,?response);
    ??????}
    //?關閉socket
    socket.close();
    //檢測是否前面的?URI?是一個?shutdown?命令
    shutdown?=?request.getUri().equals(SHUTDOWN_COMMAND);
    ????????}catch?(Exception?e)?{
    e.printStackTrace();System.exit(1);
    ????????}????
    }
    }
    ?

    此文?await?方法和前文的不同點就是,此文的?await?方法中的請求調度到StaticResourceProcessor?或?ervletProcessor?。?
    如果?URI中包含?"/servlet/.",請求推進到后面,否則,請求傳遞到?StaticResourceProcessor?實例?

    Request?類?

    Servlet?service?方法接受?servlet?容器的?javax.servlet.ServletRequest?和javax.servlet.ServletResponse?實例。因此,容器必須構建?ServletRequest和ServletResponse對象,然后將其傳遞到正在被服務的service?方法。?

    ex02.pyrmont.Request?類代表一個請求對象傳遞到?service?方法。同樣地,它必須實現?javax.servlet.ServletRequest?接口。這個類必須提供接口內所有方法的實現。這里盡量簡化它并只實現幾個方法。要編譯?Request?類的話,必須提供這些方法的空實現。再來看看?request?類,內部所有需要返回一個對象實例都返回null,如下:?

    public?Object?getAttribute(String?attribute)?{
    ?????return?null;
    ??}
    public?Enumeration?getAttributeNames()?{
    ?????return?null;
    ??}
    public?String?getRealPath(String?path)?{
    ?????return?null;
    ??}

    另外,request?類仍需有前文有介紹的?parse?和getUri?方法。?

    Response?類?

    response?類實現?javax.servlet.ServletResponse,同樣,該類也必須提供接口內所有方法的實現。類似于?Request?類,除?getWriter?方法外,其他方法的實現都為空。?

    public?PrintWriter?getWriter()?{
    //?autoflush?is?true,?println()?will?flush,
    //?but?print()?will?not.
    writer?=?new?PrintWriter(output,?true);
    return?writer;
    }


    PrintWriter?類構建器的第二個參數是一個代表是否啟用?autoflush?布爾值,如果為真,所有調用println?方法都?flush?輸出。而?print?調用則不?flush?輸出。因此,如果在servelt?的service?方法的最后一行調用?print方法,則從瀏覽器上看不到此輸出?。這個不完整性在后面的應用程序內會有調整。?

    response?類也包含有前文中介紹的?sendStaticResource方法。?

    StaticResourceProcessor?類?

    StaticResourceProcessor?類用于服務靜態資源的請求。它唯一的方法是?process。?

    Listing?2.3.StaticResourceProcessor?類的?process方法.
    public?void?process(Request?request,?Response?response)?{
    try?{
    response.sendStaticResource();
    ????}catch?(IOException?e)?{
    e.printStackTrace();
    ????}
    }

    process?方法接受兩個參數:Request?和?Response?實例。它僅僅是調用?response?類的?sendStaticResource?方法。
    posted on 2006-12-06 12:37 matthew 閱讀(247) 評論(0)  編輯  收藏 所屬分類: 基礎編程篇
    主站蜘蛛池模板: 插B内射18免费视频| 国产偷国产偷亚洲清高动态图| 成人免费一区二区三区在线观看| 亚洲熟妇av一区二区三区| 免费网站观看WWW在线观看| 免费成人午夜视频| 热久久这里是精品6免费观看| 亚洲国产成人精品91久久久| 亚洲人AV在线无码影院观看| 国产色婷婷精品免费视频| 2020天堂在线亚洲精品专区| 四虎国产精品免费久久影院| 久久免费视频网站| 亚洲成a人片在线不卡一二三区| 国产在线观看片a免费观看| 一区免费在线观看| 亚洲精品黄色视频在线观看免费资源| 亚洲欧洲专线一区| 在线观着免费观看国产黄| 国产色爽免费无码视频| 亚洲欧美一区二区三区日产| 好大好硬好爽免费视频| 国产午夜无码精品免费看| 亚洲激情在线视频| 久久www免费人成看片| 黄色a级片免费看| 亚洲冬月枫中文字幕在线看| 国产精品亚洲高清一区二区| 国产久爱免费精品视频| 国精无码欧精品亚洲一区| 久久久久久国产精品免费免费男同| 亚洲AV无码一区二区三区系列| 久久午夜伦鲁片免费无码| 四虎影视久久久免费观看| 精品久久久久久亚洲精品| 亚洲成在人线av| 亚洲最大AV网站在线观看| 免费看一级做a爰片久久| 国产中文字幕在线免费观看| 亚洲AV女人18毛片水真多| 亚洲成人免费电影|