网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  servlet容器工作原理讲解(二)     
  文章作者:未知  文章来源:水木森林  
  查看:63次  录入:管理员--2007-11-17  
 
此应用程序内的 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);            }// 关闭socketsocket.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翻译,petrel ,java 爱好者,在深圳从事 java 和数据库的开发工作,喜爱各项运动!也可以点击http://www.matrix.org.cn/user_view.asp?username=petrel查看她的信息.或者通过petrel.zhang@ccjk.com 与她联系.

【原文】:http://www.onjava.com/pub/a/onjava/2003/05/14/java_webserver.html【未完待续】
 
 
上一篇: 用jbuilder实现类似visualstudio的宏扩展功能    下一篇: servlet容器工作原理讲解(三)
  相关文档
java编程中应用dom4j轻松地处理xml文档 11-16
为java程序中添加播放midi音乐功能 11-17
基于oo模版技术的文档web输出新法 11-17
用java实现smtp服务器 11-16
学习DisplayTag想到的学习方法 03-25
面向对象编程:java中的抽象数据类型 11-16
match 方法 11-16
java精典文萃:从java谈软件开发的流程 11-16
剖析jsp和servlet对中文的处理(1) 11-17
提取英文中的单词 11-17
hibernate 入门(1) 11-17
如何使用线程 11-17
ejb3.0开发指南之多对多和一对一 11-17
java网络编程基础(四) serversocket类使用 10-29
彻底明白java的多线程-线程间的通信 11-17
java中数组之间的比较 11-17
jdk 和 j2ee 的安装 11-17
利用ecipse生成javadoc乱码解决方法 11-17
sun java程序员和开发员的认证介绍 11-17
java网络蚂蚁的制作流程 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息