-
大小: 386KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-06-09
- 語言: Java
- 標(biāo)簽: 實(shí)驗(yàn)??Web服務(wù)器??Java實(shí)現(xiàn)??
資源簡介
該壓縮包是計(jì)算機(jī)網(wǎng)絡(luò)課程的實(shí)驗(yàn)——多線程Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn),里面內(nèi)容很全,也有文檔描述怎樣操作,代碼的注釋很清晰,傻瓜式的,有java編程基礎(chǔ)的一看就會(huì)

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