資源簡介
該壓縮包是計算機網絡課程的實驗——多線程Web服務器的設計與實現,里面內容很全,也有文檔描述怎樣操作,代碼的注釋很清晰,傻瓜式的,有java編程基礎的一看就會

代碼片段和文件信息
package?test;
import?java.io.*;?//導入輸入輸出流包,且是導入包中所有類?
import?java.io.BufferedReader;?//字符緩沖輸入流包導入
import?java.io.File;?//文件流包導入
import?java.io.IOException;?//輸入輸出流異常處理包導入
import?java.io.InputStream;?//字節輸入流包導入?
import?java.io.PrintStream;?//字節輸出打印流包導入,它是?OutputStream的子類?
import?java.net.Socket;?//網絡功能包套接字子包導入
public?class?Processor?extends?Thread?{?//聲明線程子類Processor他的超類是?thread
private?PrintStream?out;?//聲明私有成員變量—out(輸出流)?
private?InputStream?input;?//聲明私有成員變量—input(輸入流)?
public?static?final?String?WEB_ROOT=“E:\\Java\\wangluo\\bin\\test“;?//聲明并初始化靜態最終類字符串常量---服務器提供文件存儲位置
public?Processor(Socket?socket)?{?//聲明構造成員方法---創建線程?
try?{?//創建異常處理機制?
input=socket.getInputStream();?//賦值表達式—從套接字獲得客戶端?連接輸入,返回字節輸入流?inputstream對象并賦值給input?
out=new?PrintStream(socket.getOutputStream());//實例化輸出流對?象—輸出到客戶端
}?catch?(IOException?e)?{?//捕捉匹配異常?
e.printStackTrace();?//顯示異常信息?
}?
}
public?void?run()?{?//創建run方法,它是對象的線程體(這里涉及子類對超類的?方法覆蓋)-----在線程被創建啟動后,直接調用?
try?{?//構造監視塊,捕捉異常
String?fileName=parse(input);?//?調用方法parse解析客戶端請求信息?獲取請求文件名?
readFile(fileName);?//?調用方法readFile打開讀取文件
}?catch?(IOException?e)?{?//捕捉匹配異常?
e.printStackTrace();?//顯示異常信息
}?
}?
public?String?parse(InputStream?input)?throws?IOException?{?//聲明并???構造方法parse解析客戶端輸入請求,并拋出可能引發的所有異常
BufferedReader?in=new?BufferedReader(new?InputStreamReader(input));?//聲明并實例化字符緩沖輸入流對象—用于服務器緩沖輸入?
String?inputContent=in.readLine();//聲明成員變量,用于存儲調用in的成?員方法讀入的客戶端輸入數據?
if?(inputContent==null||inputContent.length()==0)?{?
sendError(400“Client?invoke?error“);//如果變量值為空或零,輸出?客戶端調用錯誤信息
return?null;?//并返回空值,關閉連接
}
String?request[]=inputContent.split(“?“);?//聲明字符串數組,存放成?員變量inputstream中內容以空格為界分割后的數據信息?
if(request.length?!=3)?{?//判斷字符串數組長度是否為3?
sendError(400“Client?invoke?error“);//若不為3,輸出錯誤信息
return?null;
}?
String?method=request[0];//聲明成員變量method并賦值第一個字符數組中?內容
String?fileName=request[1];?
String?httpVersion=request[2];?
System.out.println(“Method:“+method+“file?name:“?+fileName?+“?HTTP?version:“+httpVersion);?//顯示輸出信息
return?fileName;?
}
public?void?readFile(String?fileName)?throws?IOException?{//構造方法讀取文件內容,若發生錯誤拋出所有異常,并將異常處理交給調用者?
File?file=new?File(Processor.WEB_ROOT+fileName);//實例化文件對象并?與實際文件建立關聯?
if?(!file.exists())?{?//判斷文件是否存在?
sendError(404“File?Not?Found“);//文件不存在則輸出錯誤信息—是輸?出顯示在客戶端
return;
}?
InputStream?in=new?FileInputStream(file);//創建文件輸入流對象并打開?源文件?
byte?content[]=new?byte[(int)?file.length()];?//實例化字節數組?????????
in.read(content);????????//從輸入流對象中讀入數據到字節數組content中
out.println(“HTTP/1.1?200?sendFile“);?//輸出流打印信息?
out.println(“Content-length:“+content.length);
out.println();//這段打印信息并不會顯示在web瀏覽器網頁源代碼中,應該是?給http協議理解的,過濾掉了
out.write(content);?//將字節數組內容寫入輸出流—真正的請求文件信息?
out.flush();?//強制輸出緩沖區數據?
out.close();?//關閉打印流?
in.close();?//關閉輸入流?
}
?public?void?sendError(int?errNumString?errMsg)?{//構造錯誤信息發送方?法?
?out.println(“HTTP/1
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????????10??2018-11-02?10:32??多線程Web服務器的設計與實現\1.txt
?????文件???????21036??2018-07-25?21:25??多線程Web服務器的設計與實現\3.png
?????文件????????4220??2018-11-02?11:14??多線程Web服務器的設計與實現\Processor.java
?????文件????????1701??2018-11-02?11:14??多線程Web服務器的設計與實現\Webserver.java
?????文件?????????157??2018-11-02?10:22??多線程Web服務器的設計與實現\index.html
?????文件??????278017??2018-11-02?10:38??多線程Web服務器的設計與實現\截圖.docx
?????文件??????110406??2018-11-02?16:39??多線程Web服務器的設計與實現\請按照此操作.docx
?????目錄???????????0??2018-11-02?16:39??多線程Web服務器的設計與實現\
- 上一篇:org.swtchart.jar+example
- 下一篇:Utils.java
評論
共有 條評論