国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Servlet容器工作原理(二)

2019-11-18 16:24:17
字體:
來源:轉載
供稿:網友
本文為servlet容器工作原理系列文章之一,一共四篇,本文為第二篇.

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 方法。

petrel ,java 愛好者,在深圳從事 java 和數據庫的開發工作,喜愛各項運動!可以通過petrel.zhang@ccjk.com 與她聯系.也可以點擊http://www.matrix.org.cn/user_view.asp?username=petrel查看她的信息.
進入討論組討論。

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弋阳县| 兴义市| 宣威市| 临朐县| 长岭县| 正定县| 中方县| 房产| 丹棱县| 满洲里市| 卢龙县| 盘山县| 合阳县| 武宣县| 武陟县| 宣恩县| 托克托县| 山西省| 沙雅县| 合川市| 鲜城| 青铜峡市| 上杭县| 行唐县| 伊宁县| 庄浪县| 中超| 略阳县| 苏尼特右旗| 封丘县| 拉孜县| 炎陵县| 迁西县| 太保市| 司法| 英德市| 宿迁市| 华宁县| 丰宁| 永靖县| 饶平县|