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对象。
新闻热点
疑难解答