本文为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,
.netaddress.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);
}
}
}
public object getattribute(string attribute) {
return null;
}
public enumeration getattributenames() {
return null;
}
public string getrealpath(string path) {
return null;
}public printwriter getwriter() {
// autoflush is true, println() will flush,
// but print() will not.
writer = new printwriter(output, true);
return writer;
}listing 2.3.staticresourceprocessor 类的 process方法。
public void process(request request, response response) {
try {
response.sendstaticresource();
}
catch (ioexception e) {
e.printstacktrace();
}
}
petrel ,java 爱好者,在深圳从事 java 和数据库的开发工作,喜爱各项运动!可以通过petrel.zhang@ccjk.com 与她联系.也可以点击http://www.matrix.org.cn/user_view.asp?username=petrel查看她的信息.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器