多線程Web-Server設計與實現_第1頁
多線程Web-Server設計與實現_第2頁
多線程Web-Server設計與實現_第3頁
多線程Web-Server設計與實現_第4頁
多線程Web-Server設計與實現_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、多線程Web Server的設計與實現班 級:研1428班 學 號:2141221064 姓 名:王 嬌 概述如今,上網已成為最熱門話題,通過Internet,我們既能獲取信息又能發布信息,而迅速開展的Web技術更是給Internet應用提供了一個很好的開展方向。當今的許多應用都是基于web技術的,如電子商務、視頻會議、遠程醫療診斷等。由于HTML 語言的標準統一性,只要在設備里建立一個微型web效勞器,人們就可以使用現有的Web瀏覽器與該設備進展雙向交互、接收或發送信息。因此,針對微型web效勞器的研究和應用,具有重大的意義,它為我們管理、控制和監測各種各樣的設備提供了一個很好的途徑一基于I

2、nternet,也就是說,只要設備接入了Internet,我們就可以在世界上的任何地方十分方便地控制、操縱那些配備有微型Web效勞器的設備。設計內容熟悉WWW效勞器和WEB效勞器的工作原理; 熟悉套接字編程的相關知識; 完成一個簡單的WEB效勞器的設計與實現,要求能夠通過HTTP GET命令獲得一個簡單的HTML文件;運行該效勞器,并編寫一個簡單的HTML文件完成測試。實驗原理HTTP協議的作用原理包括四個步驟:連接:Web瀏覽器與Web效勞器建立連接,翻開一個稱為socket套接字的虛擬文件,此文件的建立標志著連接建立成功。請求:Web瀏覽器通過socket向Web效勞器提交請求。HTTP的

3、請求一般是GET或POST命令POST用于FORM參數的傳遞。GET命令的格式為:GET路徑/文件名HTTP/1.0文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。應答:Web瀏覽器提交請求后,通過HTTP協議傳送給Web效勞器。Web效勞器接到后,進展事務處理,處理結果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。三、實驗方法Java實現Web效勞器功能的程序設計根據上述HTTP協議的作用原理,實現GET請求的Web效勞器程序的方法如下:創立ServerSocket類對象,監聽端口8080。等待、承受客戶機連接到端口8080,得到與客戶

4、機連接的socket;創立與socket字相關聯的輸入流instream和輸出流outstream;從請求信息中獲取請求類型。如果請求類型是GET,那么從請求信息中獲取所訪問的HTML文件名。沒有HTML文件名時,那么以index.html作為文件名;如果HTML文件存在,那么翻開HTML文件,把HTTP頭信息和HTML文件內容通過socket傳回給Web瀏覽器,然后關閉文件。否那么發送錯誤信息給Web瀏覽器;關閉與相應Web瀏瀏覽器連接的socket字。四、實驗過程首先翻開開發工具 是一個開放源代碼的、基于Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組效勞,用于通過插件組件構建

5、開發環境。向MyEclipse8.5中輸入如下Web效勞器程序源碼:import java.io.*; import .*; public class WebServer public static void main(String args) int i=1, PORT=8080; ServerSocket server=null; Socket client=null; try server=new ServerSocket(PORT); system.out.println(Web Server is listening on port+server.getLocalPort(); fo

6、r (;) client=server.accept(); / 承受客戶機的連接請求 new ConnectionThread(client,i).start(); i+; catch (Exception e) System.out.println(e); /* ConnnectionThread類完成與一個Web瀏覽器的通信 */ class ConnectionThread extends Thread Socket client; / 連接Web瀏覽器的socket字 int counter; / 計數器 public ConnectionThread(Socket cl,int c)

7、 client=cl; ounter=c; public void run() / 線程體 try String destIP=client.getInetAddress().toString(); / 客戶機IP地址 int destport=client.getPort(); / 客戶機端口號 System.out.println(Connection +counter+:connected to+destIP+ on port +destport+.); PrintStream outstream=new PrintStream(client.getOutputStream(); Dat

8、aInputStream instream=new DataInputStream(client.getInputStream(); String inline=instream.readLine(); / 讀取Web瀏覽器提交的請求信息System.out.println(Received:+inline); if (getrequest(inline) / 如果是GET請求 String (inline); ); if () / 假設文件存在,那么將文件送給Web瀏覽器 System.out.println( requested.); outstream.println(HTTP/1.0

9、200 OK); outstream.println(MIME_version:1.0); outstream.println(Content_Type:text/html); int len=(int)(); outstream.println(Content_Length:+len); outstream.println(); send); / 發送文件 outstream.flush(); else / 文件不存在時 String notfound=Not Found您訪問的這個文件不存在,請您仔細核對!; outstream.println(您訪問的這個文件不存在,請您仔細核對!);

10、outstream.println(Content_Type:text/html); outstream.println(Content_Length:+notfound.length()+2); outstream.println(); outstream.println(notfound); outstream.flush(); long m1=1; while (m10) if (s.substring(0,3).equalsIgnoreCase(GET) return true; return false; /* 獲取要訪問的文件名 */ String get(String s) St

11、ring f=s.substring(s.indexOf( )+1); f=f.substring(0,f.indexOf( ); try if (f.charAt(0)=/) f=f.substring(1); catch (StringIndexOutOfBoundsException e) System.out.println(Exception:+e); if (f.equals() f=index.html; return f; /*把指定文件發送給Web瀏覽器 */ void send outs,) try DataInputStream in=new DataInputStrea

12、m(new (file); int len=(int)(); byte buf=new bytelen; in.readFully(buf); outs.write(buf,0,len); outs.flush(); in.close(); catch (Exception e) System.out.println(Error retrieving file.); System.exit(1); 在MyEclipse8.5中如下列圖:2、為了測試上述程序的正確性,將編譯后的WebServer.class、ConnectionThread.class和下面的index.html文件置于本機的同

13、一目錄中在dos里運行web效勞器。index.html的代碼如下: Java開發多線程 Web效勞器 這是用JAVA寫出的多線程WEB效勞器的主頁! 2021年9月27日 3、然后在客戶機運行瀏覽器軟件,在URL處輸入web程序所屬的URL地址如:或如: HYPERLINK ,就在瀏覽器窗口顯示出指定的HTML文檔。 ,就在瀏覽器窗口顯示出指定的HTML文檔。單一browser請求多browser并發通信同時發出三次請求實現多線程通信,如下列圖所示:完畢語本次設計就是完成一個簡單的多線程Web效勞器,實現web效勞器根本功能:頁面訪問請求響應、HTML文件的解析以及數據發送。 本次設計的We

14、b效勞器,除了完成網絡通信鏈路的建立和撤除之外至少還要有二方面的功能:“分折請求 和“構造響應。客戶端與效勞器交換數據之前,首先用TCPIP建立連接,客戶端向效勞器請求數據,效勞器那么向客戶端響應并提供數據。客戶端和效勞器以HTTP協議進展請求和響應。效勞器和客戶端只能為一次事務處理建立并維持連接,完成一次事務處理后便完畢連接。接收客戶端請求、解析客戶端請求、響應客戶端請求、向客戶端回送請求的結果是Web效勞器所需完成的主要任務,Web效勞器程序代碼主要是為了完成這幾項任務。 Web效勞器通常由以下幾個局部組成,也就是本次設計的主要內容:(1)效勞器初始化局部。這局部主要完成Web效勞器的初始

15、化工作,如建立守護進程、創立TCP套接字、綁定端口、將TCP套接字轉換成偵聽套接字,進入循環構造,等待接收用戶瀏覽器連接。(2接收客戶端請求。由于客戶端請求以文本行的方式實現,所以效勞器一般也以文本行為單位接收。(3)解析客戶端請求。這局部工作比擬復雜,需要解析出請求的方法、URL目標、可選的查詢信息及表單信息。如果請求方法為HEAD,那么簡單地返回響應首部即可;如果方法是GET,那么首先返回響應首部,然后將客戶端請求的URL目標文件從效勞器磁盤上讀出,再發送給客戶端;如果是POST,那么比擬麻煩,首先要調用相應的CGI程序,然后將用戶表單信息傳給CGI程序,CGI程序根據表單內容完成相應的工作,并將結果數據返回。(4)發送響應信息之后,關閉與客戶機的連接。最后實際設計完成結果根本到達要求,實現了頁面訪問請求響應、HTML文件的解析以及數據發送。當然,也有很多遺憾,比方對于多線程的Web還不是很熟悉,端口、套接字的實現仍有些模糊,這幾點是以后如果有時機或者時間一定要爭取改良的地方。參考文獻1 Harvey M.Deitel等著邱仲潘等 譯.Java Web效勞高級教程 .第一版.機械工業出版社,2003.7 2 孫衛琴. ?Java網絡編程精解?. 北京:電子工業出版社,2007.3 3 劉賀湘?In

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論