基于Jave的Web服务工作机制(7)
来源:asp之家 发布时间:2010-04-05 18:13:00
sendStaticResource 方法是非常简单的。它首先传递父路径和子路径给File类的构造器,从而对java.io.File类进行了实例化。
File file = new File(HttpServer.WEB_ROOT, request.getUri());
然后它检查文件是否存在。如果存在,sendStaticResource 方法通过传递File对象来构造一个java.io.FileInputStream对象。然后调用FileInputStream 的read方法,将字节流写如到OutputStream输出。注意这种情况下, 静态资源的内容也被作为原始数据被发送给了浏览器。
if (file.exists()) {
fis = new FileInputStream(file);
int ch = fis.read(bytes, 0, BUFFER_SIZE);
while (ch != -1) {
output.write(bytes, 0, ch);
ch = fis.read(bytes, 0, BUFFER_SIZE);
}
}
如果这个文件不存在,sendStaticResource 方法发送一个错误消息给浏览器。
String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +
"Content-Type: text/html\r\n" +
"Content-Length: 23\r\n" +
"\r\n" +
"<h1>File Not Found</h1>";
output.write(errorMessage.getBytes());
编译和运行应用程序
为了编译和运行应用,你首先需要解压包含本文应用程序的.zip文件。你解压的目录成为工作目录(working directory),它有三个子目录: src/, classes/, 和 lib/。 要编译应用程序需要在工作目录输入如下语句:
javac -d . src/ex01/pyrmont/*.java
这个-d 选项参数将结果写到当前目录,而不是src/ 目录。
要运行应用程序,在工作目录中输入如下语句:
java ex01.pyrmont.HttpServer
要测试你的应用程序,打开浏览器,在地址栏中输入如下URL:
http://localhost:8080/index.html
你将可以看到浏览器中显示的index.html 页面。
Figure 1. The output from the web server
在控制台(Console),你能看到如下内容:
GET /index.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Host: localhost:8080
Connection: Keep-Alive
GET /images/logo.gif HTTP/1.1
Accept: */*
Referer: http://localhost:8080/index.html
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Host: localhost:8080
Connection: Keep-Alive
概要总结
在本文中,你了解了一个简单的WEB服务器的工作机制。本文附带的应用程序源代码只包含三个类,但并不是所有的都有用。尽管如此,它还是能被作为一种很好的学习工具为我们服务。


猜你喜欢
- 我们需要在 Apache/conf/extra/ 目录下建立一个 httpd-vhosts.conf 这样的文件。文件内容如下:# ../v
- 在入门篇,我们学会了SQL注入的判断方法,但真正要拿到网站的保密内容,是远远不够的。接下来,我们就继续学习如何从数据库中获取想要获得的内容,
- 核心提示:鞭牛士与搜狐IT共同打造的公益性平台网编训练营,第35期嘉宾是CNET中国现CBSi)执行主编高飞先生,谈网络编辑初入行业如何起步
- 在切入正题之前给大家讲一个故事,估计有很多人人听过:从前有一个人很笨,想学习功夫,但是很多师傅都不收。最后一个师傅被他搞得不耐烦了。就把他叫
- QQ这个聊天工具,对于很多在互联网打滚多年的站长朋友来说,应该不会陌生,可能其中不少人还是QQ这个品牌成长的见证者。以我个人对腾讯,对QQ的
- 11月20日,阿里巴巴集团正式宣布,试运行百日的阿里妈妈网站(www.alimama.com )已获惊人成长,跃居成为中国最大的网上广告交易
- 今天看我的BLOG(zishu.cn)还有以前另一个站的统计,发现和SEO相关的一点东西,写出来和大家分享一下!我的观点是“放弃无效的收录,
- 1.从容器中将文件拷贝到宿主机上。在宿主机你想要接收文件的地方,运行下面的指令docker cp 容器id:home/test .docke
- 搜索引擎优化项目的规划需要做什么?系统的分析,哪种SEO策略适合当前客户的网站。长尾关键词的方向、内容的方向、竞争的程度以及如何增加独特的网
- lighttpd(发音为lighty)是一套开放源代码的网页服务器,以BSD许可证发布。相较于其他的网页服务器,lighttpd仅需少量的存
- 下面的每一条戒律都将有效地影响代码的性能和可伸缩性。换句话说,尽可能不要照着戒律去做!下面,我将解释如何破坏他们以便提高性能和可伸缩性。1、
- 问:SiteWeaver文章默认有一个固顶的选项,将文章在文章列表中实现置顶。很多用户都在探究如何在SiteFactory上实现同样的功能。
- 经常有人会问:我的网站被莫名的挂上木马,怎么能有效的预防网站被挂马?这个问题需要分具体情况来具体分析。一、如果是自己的服务器因为你只需要远程
- 最近才上的服务器,出现了无法删除文件夹的情况,文件可以删除,文件夹删除的时候提示The directory is not empty,解决办
- 这个是今天刚听董事长在学院十年的什么会议上的报告里听到的话:(简化一下,因为不甚重要,仅做引子) 我们JJ学院,一直奉
- 老谢今天来说说怎么找到新闻点来写软文.希望对大家企业软文推广提供些帮助!1、 产品。如果你的企业开发了非常有价值的新产品,这也许就是一个大大
- 为了方便,最近用vitualbox搭了一个centos7的虚拟机,整个过程比较简单,在这里记录一下。下载vitualbox直接去官网(htt
- 在百度C2C产品“百度有啊”即将上线的时候,淘宝网站曾经屏蔽百度搜索爬虫,禁止百度搜索引擎抓取淘宝网站的网页内容,淘宝官方的解释是“杜绝不良
- 我并不是一个善于思考的人,我做网站的最初目的是消磨时间,因为大学让人感觉很空虚。但是慢慢的随着对做网站的深入,我也慢慢的喜欢上了站长这些可爱
- 不要耍小聪明,自己点广告绝对危险,Google这么大的公司,有钱有技术在支持,不要认为我们开发个小软件就能骗过Google,不是不封~~是时