httpserver 類
httpserver類表示一個web服務器,且在公共靜態目錄web_root及它的子目錄中能為找到的那些靜態資源而服務。web_root用以下方式初始化:
public static final string web_root =
system.getproperty("user.dir") + file.separator + "webroot";
這段代碼指明了一個包含靜態資源的webroot目錄,這些資源可用來測試該應用。在該目錄中也能找到servlet容器。
要請求一個靜態資源,在瀏覽器中輸入如下地址或url:
http://machinename:port/staticresource
machinename 是運行這個應用的計算機名或者ip地址。如果你的瀏覽器是在同一臺機器上,可以使用localhost作為機器名。端口是8080。staticresource是請求的文件夾名,它必須位于web-root目錄中。
必然,如果你使用同一個計算機來測試應用,你想向httpserver請求發送一個index.html 文件,那么使用如下url:
http://localhost:8080/index.html
想要停止服務器,可以通過發送一個shutdown命令。該命令是被httpserver 類中的靜態shutdown_command變量所定義:
private static final string shutdown_command = "/shutdown";
因此,要停止服務,你可以使用命令:
http://localhost:8080/shutdown
現在讓我們來看看前面提到的await方法。下面一個程序清單給出了解釋。
listing 1.1. the httpserver class' await method
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);
}
// loop waiting for a request
while (!shutdown) {
socket socket = null;
inputstream input = null;
outputstream output = null;
try {
socket = serversocket.accept();
input = socket.getinputstream();
output = socket.getoutputstream();
// create request object and parse
request request = new request(input);
request.parse();
// create response object
response response = new response(output);
response.setrequest(request);
response.sendstaticresource();
// close the socket
socket.close();
//check if the previous uri is a shutdown command
shutdown = request.geturi().equals(shutdown_command);
}
catch (exception e) {
e.printstacktrace();
continue;
}
}
}
await方法是通過創建一個serversocket實例而開始的。然后它進入了一個while循環:
serversocket = new serversocket(
port, 1, inetaddress.getbyname("127.0.0.1"));
...
// loop waiting for a request
while (!shutdown) {
...
}
socket = serversocket.accept();
在收到一個請求后,await方法從accept方法返回的socket實例中獲得java.io.inputstream 和java.io.outputstream對象。
新聞熱點
疑難解答