选择显示字体大小

servlet容器工作原理(二)

本文为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);
        }
    }
}


    此文 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查看她的信息.


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons