多线程WebServer设计与实现Word下载.docx

上传人:b****6 文档编号:16745847 上传时间:2022-11-25 格式:DOCX 页数:10 大小:802.47KB
下载 相关 举报
多线程WebServer设计与实现Word下载.docx_第1页
第1页 / 共10页
多线程WebServer设计与实现Word下载.docx_第2页
第2页 / 共10页
多线程WebServer设计与实现Word下载.docx_第3页
第3页 / 共10页
多线程WebServer设计与实现Word下载.docx_第4页
第4页 / 共10页
多线程WebServer设计与实现Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

多线程WebServer设计与实现Word下载.docx

《多线程WebServer设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《多线程WebServer设计与实现Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

多线程WebServer设计与实现Word下载.docx

0指出Web浏览器使用的HTTP版本。

3)应答:

Web浏览器提交请求后,通过HTTP协议传送给Web服务器。

Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。

三、实验方法

Java实现Web服务器功能的程序设计

根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下:

1)创建ServerSocket类对象,监听端口8080。

2)等待、接受客户机连接到端口8080,得到与客户机连接的socket;

3)创建与socket字相关联的输入流instream和输出流outstream;

4)从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:

GET路径/文件名HTTP/1.0

5)从请求信息中获取请求类型。

如果请求类型是GET,则从请求信息中获取所访问的HTML文件名.没有HTML文件名时,则以index.html作为文件名;

6)如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。

否则发送错误信息给Web浏览器;

7)关闭与相应Web浏浏览器连接的socket字.

四、实验过程

1.首先打开开发工具MyEclipse8.5

MyEclipse8.5是一个开放源代码的、基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

向MyEclipse8.5中输入如下Web服务器程序源码:

importjava。

io。

*;

  

importjava。

net。

*;

publicclassWebServer{ 

 public staticvoidmain(Stringargs[]) { 

ﻩint i=1,PORT=8080;

 

ﻩServerSocketserver=null;

   

Socketclient=null;

  

try{  

server=newServerSocket(PORT);

  

system。

out。

println("

WebServeris listeningonport”+server.getLocalPort());

 for (;

){ 

   client=server.accept();

// 接受客户机的连接请求

 newConnectionThread(client,i).start();

    

ﻩ   i++;

 

ﻩ    }   

  }catch(Exceptione){System.out.println(e);

} 

 }  

 }

/* ConnnectionThread类完成与一个Web浏览器的通信*/

classConnectionThreadextends Thread{

ﻩSocket client;

//连接Web浏览器的socket字 

ﻩintcounter;

 //计数器 

 publicConnectionThread(Socketcl,int c) {

  client=cl;

  ounter=c;

  } 

 publicvoidrun()// 线程体

 {  

try {

StringdestIP=client.getInetAddress().toString();

//客户机IP地址ﻩ

  int destport=client.getPort();

 //客户机端口号 

ﻩSystem.out。

println(”Connection"

+counter+"

connectedto”+destIP+"

   onport”+destport+”.");

PrintStreamoutstream=newPrintStream(client.getOutputStream());

DataInputStreaminstream=newDataInputStream(client。

getInputStream());

  

ﻩStringinline=instream.readLine();

// 读取Web浏览器提交的请求信息

System。

out.println(”Received:

"

+inline);

ﻩif(getrequest(inline)){ //如果是GET请求 

Stringfilename=getfilename(inline);

   

Filefile=newFile(filename);

if(file.exists()) {//若文件存在,则将文件送给Web浏览器

ﻩ   System.out。

println(filename+"

 requested。

);

ﻩ   outstream.println("HTTP/1.0200OK");

ﻩ  outstream.println("

MIME_version:

1.0"

 

ﻩ outstream.println("Content_Type:

text/html");

ﻩ  int len=(int)file。

length();

    

  outstream.println("Content_Length:

+len);

  outstream.println("");

ﻩﻩ     sendfile(outstream,file);

//发送文件 

outstream.flush();

  

ﻩ}else{// 文件不存在时 

Stringnotfound="

<html〉<

head><title>

NotFound<

/title>

<

/head>

body>

h1〉您访问的这个文件不存在,请您仔细核对!

!

/h1>〈hr〉<

/body>

/html>

”;

outstream。

println(”您访问的这个文件不存在,请您仔细核对!

”);

outstream。

println("

Content_Type:

text/html"

 outstream。

println("

Content_Length:

+notfound.length()+2);

 outstream.println("

);

 outstream。

println(notfound);

ﻩoutstream.flush();

 } 

} 

ﻩ longm1=1;

while(m1<

11100000){m1++;

} //延时 

ﻩﻩclient.close();

 }catch(IOExceptione){   

System.out.println(”Exception:

+e);

ﻩ } 

} 

/*获取请求类型是否为“GET"

 */

booleangetrequest(Strings){ 

if(s.length()〉0){

ﻩ if(s。

substring(0,3).equalsIgnoreCase(”GET”))returntrue;

ﻩ } 

ﻩ return false;

ﻩ} 

/* 获取要访问的文件名*/ 

Stringgetfilename(Strings) {

ﻩStringf=s.substring(s.indexOf(’’)+1);

   

f=f。

substring(0,f。

indexOf(’'

));

  try{  

ﻩ    if(f.charAt(0)=='/'

)   

     f=f.substring

(1);

        } catch(StringIndexOutOfBoundsException e){   

       System。

println(”Exception:

”+e);

 }  

    if(f.equals(”"

)) f=”index。

html"

         return f;

     }

/*把指定文件发送给Web浏览器 */   

voidsendfile(PrintStreamouts,File file){ 

  try {  

DataInputStreamin=new DataInputStream(newFileInputStream(file));

 int len=(int)file.length();

    bytebuf[]=newbyte[len];

   in.readFully(buf);

  outs.write(buf,0,len);

   

     outs.flush();

    in.close();

 } catch(Exceptione){

   System。

out。

println("

Errorretrievingfile。

");

     System。

exit

(1);

  }

      }

 }

在MyEclipse8.5中如下图:

2、为了测试上述程序的正确性,将编译后的WebServer.class、ConnectionThread.class和下面的index.html文件置于本机的同一目录中在dos里运行web服务器.

index.html的代码如下:

<

HTML〉  

 <

HEAD>  

〈META HTTP-EQUIV="

Content—Type"

content="text/html;

charset=gb_2312-80"

>

 〈TITLE〉Java开发多线程Web服务器<

/TITLE>

〈/HEAD〉

<BODY>  

   〈h3>

这是用JAVA写出的多线程WEB服务器的主页!

</h3> 

2014年9月27日

  <

hr>

</BODY>

</HTML〉

3、然后在客户机运行浏览器软件,在URL处输入web程序所属的URL地址(如:

http:

//10。

50。

142.45:

8080/index.html)或(如:

http:

//10.50.142。

45:

8080/),就在浏览器窗口显示出指定的HTML文档.

1)单一browser请求

2)多browser并发通信同时发出三次请求实现多线程通信,如下图所示:

3)如果文件请求不存在文件如s。

txt

结束语

本次设计就是完成一个简单的多线程Web服务器,实现web服务器基本功能:

页面访问请求响应、HTML文件的解析以及数据发送。

  

本次设计的Web服务器,除了完成网络通信链路的建立和拆除之外至少还要有二方面的功能:

“分折请求”和“构造响应”.客户端与服务器交换数据之前,首先用TCP/IP建立连接,客户端向服务器请求数据,服务器则向客户端响应并提供数据。

客户端和服务器以HTTP协议进行请求和响应。

服务器和客户端只能为一次事务处理建立并维持连接,完成一次事务处理后便结束连接。

接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是Web服务器所需完成的主要任务,Web服务器程序代码主要是为了完成这几项任务。

Web服务器通常由以下几个部分组成,也就是本次设计的主要内容:

(1)服务器初始化部分。

这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接。

(2)接收客户端请求.由于客户端请求以文本行的方式实现,所以服务器一般也以文本行为单位接收。

(3)解析客户端请求。

这部分工作比较复杂,需要解析出请求的方法、URL目标、可选的查询信息及表单信息。

如果请求方法为HEAD,则简单地返回响应首部即可;

如果方法是GET,则首先返回响应首部,然后将客户端请求的URL目标文件从服务器磁盘上读出,再发送给客户端;

如果是POST,则比较麻烦,首先要调用相应的CGI程序,然后将用户表单信息传给CGI程序,CGI程序根据表单内容完成相应的工作,并将结果数据返回。

(4)发送响应信息之后,关闭与客户机的连接.

最后实际设计完成结果基本达到要求,实现了页面访问请求响应、HTML文件的解析以及数据发送.当然,也有很多遗憾,比如对于多线程的Web还不是很熟悉,端口、套接字的实现仍有些模糊,这几点是以后如果有机会或者时间一定要争取改进的地方。

参考文献

[1]HarveyM.Deitel等著邱仲潘等译。

JavaWeb服务高级教程 。

第一版.机械工业出版社,2003.7

[2]孙卫琴. 《Java网络编程精解》. 北京:

电子工业出版社,2007。

3

[3]刘贺湘.《Internet实用技术教程》.北京:

清华大学出版社,1998

[4]吴凤祥。

《用Java实现一个Socket通信模型》。

《现代电子技术》,2001.7.20,1~5

[5]耿祥义、张跃平.Java2实用教程(第三版).清华大学出版社.2006

[6]周小松,朱雄军,基于TCP协议的Socket网络编程模式部署及实现,软件技术研究[J],2006(9)

[7]罗惟,王萍。

一个web服务器的设计[J].现代电子技术,2003,157(14)

[8]JamesF。

Kurose,Keith W.Ross《COMPUTERNETWORKING——ATop-DownApproach》.高等教育出版社第四版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1