咨詢電(diàn)話(huà):023-88959644    24小(xiǎo)時(shí)服務熱線:400-023-8809
NEWS CENTER ·
新聞動态
關注中技(jì)互聯 關注前沿

怎樣運用Java來(lái)實現Web服務器(qì)?

發表日期:2012-04-30    文章編輯:山(shān)城阿修    浏覽次數(shù):83    标簽:重慶網站(zhàn)建設;重慶網頁制(zhì)作(zuò)

重慶網頁制(zhì)作(zuò) 提供

  首先,HTTP和(hé)談,真理(lǐ)的效果

       萬維網是互聯網作(zuò)為(wèi)傳輸系統的序言中,最基本的傳輸單位的WWW互聯網網頁。基于WWW的客戶端的任務/服務網絡讀者(客戶端)和(hé)Web服務(服務),超文本傳輸​​和(hé)談(HTTP)的設備占模具兩者之間(jiān)的溝通(tōng)。 HTTP和(hé)談是TCP / IP為(wèi)基礎的和(hé)平談判,和(hé)談上(shàng),使用層之間(jiān)的網絡讀者和(hé)網絡服務和(hé)談,是一種常見的形式面向對象的和(hé)談。 HTTP和(hé)談,真理(lǐ)的影(yǐng)響包括四個(gè)步伐:

鏈接:(1)的Web網頁服務建立銜接,打開(kāi)一個(gè)虛拟的文件被稱為(wèi)一個(gè)socket(套接字),這個(gè)文件的建設,标志(zhì)着寄養成功的銜接。

(2)懇求:網絡讀者是一個(gè)套接字設備的Web服務的懇求。 HTTP的請(qǐng)求一般是GET或者POST敕令(POST表單參數(shù)傳遞)。獲取過關敕令:

獲取途徑/文件名HTTP/1.0的

那(nà)次訪問文件,文件名的HTTP/1.0指出,網絡讀者使用的HTTP版本。

(3)款:提交通(tōng)過HTTP和(hé)談的懇求和(hé)發送到網絡服務的網絡讀者。 Web服務收到的事務處理(lǐ),處理(lǐ)後的HTTP返回網站(zhàn)讀者頁面懇求的後果,然後顯示在網絡上(shàng)的讀者。

例如:假設客戶端和(hé)www.mycompany.com:8080/mydir/index.html建立銜接,它會(huì)發送一個(gè)GET敕令:GET / mydir的/的index.html HTTP/1.0的。主機名www.mycompany.com MYDIR內(nèi)容從找到的文件空(kōng)間(jiān)的文件index.html子表的Web服務。如果您找到該文件,該文件內(nèi)容的Web服務發送到Web的讀者反應。

為(wèi)了通(tōng)知您傳輸的內(nèi)容類型,Web服務的設備起首網絡讀者發送的HTTP頭信息,然後發送的細節(例如,HTTP正文中的信息)的HTTP之間(jiān)的空(kōng)白行(xíng)隔開(kāi)頭和(hé)HTTP。
HTTP頭信息:

:①HTTP 1.0 200 OK“

這是Web服務的響應的第一行(xíng),列表發球正在運行(xíng)的HTTP版本号和(hé)響應代碼。代碼“200 OK”的公開(kāi)懇求完成性能。

②在MIME_Version:1.0

它指示MIME類型的版本。

(3)CONTENT_TYPE:類型

這個(gè)頭信息是一個(gè)非常重大(dà),這表明(míng)MIME類型的信息的HTTP正文。如:“CONTENT_TYPE:text / html的指示數(shù)據發送到一個(gè)HTML文檔。

④CONTENT_LENGTH:長度值

這表明(míng)信息的HTTP身體(tǐ)的長度(字節)。

(4)封閉的銜接:網絡讀者與Web服務的必要處理(lǐ)後斷開(kāi),以保證其他網站(zhàn)讀者可(kě)以建立與設備的Web服務的融合。

第二,Java Web服務的設備的功能設計(jì),為(wèi)了完成

基于上(shàng)述HTTP和(hé)談真理(lǐ)的效果,得(de)到承認的Web服務方法的順序如下:

(1)創建ServerSocket類對象,監聽(tīng)端口8080。這是HTTP規範的TCP / IP端口80,以區(qū)别于它,并采取;

(2)等待承受收斂到8080端口,與客戶端的套接字接口的客戶端;

(3)創建一個(gè)輸入流套接字字河(hé)道(dào)和(hé)輸出流outstream之間(jiān)的關聯;

(4)從輸入流inStream讀取與客戶端的插座觸點提交懇求線的關系,懇求信息模式:獲取途徑/文件名HTTP/1.0的

(5)獲得(de)懇求懇求信息類型。如果承認類型GET,懇求信息獲取訪問的HTML文件名。沒有(yǒu)HTML文件名作(zuò)為(wèi)文件名,地方的index.html;

(6)如果HTML文件,打開(kāi)該HTML文件,返回的HTTP頭和(hé)HTML內(nèi)容的文件後插座讀者到Web,然後關閉該文件。 Web或發送錯誤信息的讀者;

(7)封閉和(hé)響應Web閱讀器(qì)接口插座字。

下列順序準備按照上(shàng)面的方法可(kě)以完成多(duō)線程的Web發球局,以保證多(duō)個(gè)客戶端的功能與Web服務的銜接。

1為(wèi)了:WebServer.java文件
/ / WebServer.java使用設備的Java Web服務
進口java.io. *;
導入java.net。 *;
公共類WebServer的{
公共靜态無效的主要(字符串作(zuò)為(wèi)參數(shù)[]){
I = 1端口= 8080;
ServerSocket的服務器(qì)= NULL;
Socket的客戶端= NULL;
嘗試{
服務器(qì)=新的ServerSocket(PORT);
(\ + server.getLocalPort()“Web服務器(qì)監聽(tīng)端口\”);
(; ;) {
客戶端= server.accept(); / /下的懇求客戶端的收斂
新ConnectionThread(客戶端)。啓動();
I + +;
}
}趕上(shàng)(例外五){(E);}
}
}

/ * ConnnectionThread類,通(tōng)信與網絡讀者完成* /
類ConnectionThread延伸主題{
Socket的客戶端/ /收斂的網絡讀者插座字
INT計(jì)數(shù)器(qì); / /計(jì)數(shù)器(qì)
公共ConnectionThread(CL插座,诠釋三){
客戶端= CL;
計(jì)數(shù)器(qì)= C;
}
公共無效的run()/ /線程體(tǐ)
{
嘗試{
字符串destIP = client.getInetAddress()。的ToString(); / /客戶端的IP地址
destport INT = client.getPort()/ /客戶端橫幅
(\“連接\”+計(jì)數(shù)器(qì)+ \“:\”+ destIP + \“端口\”destport + \“\”);
PrintStream的outstream =新的PrintStream(client.getOutputStream());
數(shù)據輸入流河(hé)道(dào)新的數(shù)據輸入流(client.getInputStream());
字符串聯= instream.readLine(); / /讀取由Web讀者提出認罪
(\“的收稿日期:\”+內(nèi)聯);
如果(getrequest(聯)){/ /如果的GET懇求
字符串的文件名= getfilename(內(nèi)聯);
文件的文件=新的文件(文件名);
(file.exists()){/ /如果文件存在,文件傳送到Web閱讀器(qì)
(文件名+ \“要求\”);
outstream.println(\“HTTP/1.0 200 OK \”);
outstream.println(\“MIME_version:1.0 \”);
outstream.println(\“內(nèi)容類型:文本/ html \”);
LEN =(INT)file.length的();
outstream.println(CONTENT_LENGTH:\“\”+ LEN);
outstream.println(\“\”);
的sendfile(outstream,文件); / /發送文件
outstream.flush();
{/ /文件不存在
字符串NOTFOUND = \“未找到


錯誤404文件未找到
\“;
outstream.println(\“的HTTP/1.0 404沒有(yǒu)找到\”);
outstream.println(\“內(nèi)容類型:文本/ html \”);
outstream.println(\“CONTENT_LENGTH:\”+ notfound.length()+ 2);
outstream.println(\“\”);
outstream.println(NOTFOUND);
outstream.flush();
}
}
長M1 = 1;
(M1是1110萬美元)<{M1 + +;} / /延時(shí)
client.close();
}捕獲的(IOException e)條{
system.out.println(\“異常:\”+ E);
}
}

/ *獲取懇求型的能力,“GET”* /
布爾getrequest(弦樂){
(s.length()> 0)
{
((0,3)。s.substring equalsIgnoreCase(\“\”)),如果返回true;
}
返回false;
}

/ *要訪問的文件名* /
在的字符串getfilename(字符串){
字符串F = s.substring(s.indexOf(\'\')+1);
F = f.substring(0 f.indexOf(\'\'));
嘗試{
(f.charAt(0)== \'/ \')
F = f.substring(1);
}捕捉(StringIndexOutOfBoundsException E){
system.out.println(\“異常:\”+ E);
}
如果(f.equals(\“\”))= \“的index.html \”;
返回f;
}

/ *指定的文件發送到Web浏覽器(qì)* /
無效的sendfile(PrintStream的是出局,檔案文件){
嘗試{
數(shù)據輸入流中的新的數(shù)據輸入流=(新FileInputStream中(文件));
LEN =(INT)file.length的();
字節緩沖區(qū)[] =新的字節[LEN];
in.readFully(BUF);
outs.write(BUF,0,LEN);
outs.flush();
in.close();
}趕上(shàng)(例外五){
system.out.println(\“錯誤檢索文件\”);
system.exit(1);
}
}
}

子類為(wèi)了ConnectionThread線程,用于解析一個(gè)Web讀取設備提交的呼籲,并應對信息返回到Web的讀者。在中學,getrequest()方法用來(lái)檢測客戶的請(qǐng)求是否在“的GET”getfilename(S)的方法獲得(de)的的HTML文件名您要訪問客戶乞求的信息小(xiǎo)号;“的sendfile()指定後套接字文件的內(nèi)容返回到Web的讀者。

上(shàng)述順序getrequest()方法和(hé)當地的相關修正案,發表懇求處置。

三,操作(zuò)實例

為(wèi)了測試的準确性上(shàng)面的命令,編譯WebServer.class,ConnectionThread.class和(hé)index.html文件放置在收集統一的目錄表(主機:主機NT40SRV:\ \的JWEB表的內(nèi)容)。

為(wèi)了2:index.html文件

Java Web服務的設備

這是書(shū)面與Java Web服務主頁

起首上(shàng)運行(xíng)的主機與Java敕令WebServer.class:
C:\ \ jweb> Java的Web服務器(qì)

Reader軟件,然後運行(xíng)在客戶端輸入的WebServer序列屬于讀者窗口中顯示指定的HTML文件中的URL網址:(http://nt40srv:8080/index.html)。

注意,不是默認的一面旗幟默認情況下,如8080,操作(zuò)主機的正常的Web服務。

不具有(yǒu)收集長度單機安裝Windows 95的測試方法的前提是當地的替代URL地址的域名localhost或127.0.0.1,URL地址的訪問http://localhost:8080

如沒特殊注明(míng),文章均為(wèi)中技(jì)互聯原創,轉載請(qǐng)注明(míng)來(lái)自www.zjcoo.com
上(shàng)一篇:web服務器(qì)安全設置配置-超全攻略,超詳細~ 下一篇:已經是最後一篇了
相關新聞

CopyrightZJCOO technology Co., LTD. All Rights Reserved.    

渝ICP 備11003429号

  • qq客服
  • 公衆号
  • 手機版
  • 新浪微博