国产探花免费观看_亚洲丰满少妇自慰呻吟_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://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东海县| 尉氏县| 怀宁县| 尉犁县| 老河口市| 禹州市| 岑溪市| 鲁甸县| 崇州市| 香港| 鹤壁市| 沂水县| 重庆市| 资溪县| 杭州市| 都江堰市| 右玉县| 德钦县| 弋阳县| 文登市| 延庆县| 宜丰县| 博湖县| 江都市| 容城县| 榕江县| 司法| 大庆市| 清远市| 嘉峪关市| 新干县| 永春县| 阿图什市| 邢台县| 隆德县| 孝昌县| 嘉峪关市| 丰城市| 东海县| 鲁山县| 望奎县|