基于Jave的Web服務(wù)工作機制(2)_Windows教程
和請求類似,一個HTTP響應(yīng)也包含三個部分:
協(xié)議狀態(tài) 代碼描敘(Protocol-Status code-Description)
響應(yīng)包頭(Response headers)
實體(Entity body)
下面是HTTP響應(yīng)的一個簡單范例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112
<html>
<head>
<title>HTTP Response Example</title></head><body>
Welcome to Brainy Software
</body>
</html>
第一行的響應(yīng)包頭和上面的請求包頭很相似。 第一行告訴我們,協(xié)議是使用的HTTP1.1,響應(yīng)請求已成功(200表示成功),一切已OK。
響應(yīng)包頭和請求包頭相似,也包含一些有用的信息。響應(yīng)的實體是HTML那一部分的內(nèi)容。包頭和實體也都是被CRLF序列分離開的。
Socket類
套接字(socket)是網(wǎng)絡(luò)連接的一個端點。它使得應(yīng)用程序能夠通過網(wǎng)絡(luò)進行讀和寫的操作。 通過在連接上發(fā)送和接受字節(jié)流,兩個位于不同計算機的軟件程序能夠彼此相互通訊。為了發(fā)送一個消息到另一個程序,你需要知道對方機器的IP地址和socket端口號。在JAVA中,一個socket是由java.net.Socket類所表示的。
為了創(chuàng)建一個套接字,你可以使用Socket類的構(gòu)造函數(shù)來完成。 這些構(gòu)造函數(shù)接受主機名和端口:
public Socket(String host, int port)
host表示遠程計算機名或者IP地址,port表示該遠程應(yīng)用的端口號。比如,要在80端口連接到y(tǒng)ahoo.com,你需要構(gòu)造下面的socket:
new Socket("yahoo.com", 80);
一旦你成功創(chuàng)建了一個Socket類的實例,就可以使用它來發(fā)送和接受字節(jié)流了。 要發(fā)送字節(jié)流,必須首先調(diào)用Socket類的getOutputStream 方法來獲得一個java.io.OutputStream對象。要發(fā)送一個文本到遠程應(yīng)用程序,經(jīng)常要構(gòu)造一個從OutputStream對象返回的java.io.PrintWriter對象。要接收連接另一端的字節(jié)流,要調(diào)用Socket類的getInputStream方法,該方法是從 java.io.InputStream返回的。
下面的程序段創(chuàng)建了一個socket,和本地HTTP服務(wù)器(127.0.0.1代表本地)進行通訊,發(fā)送一個HTTP請求,然后從服務(wù)器接收一個響應(yīng)。它創(chuàng)建了一個StringBuffer 來保存響應(yīng),并將它打印到控制臺。
Socket socket = new Socket("127.0.0.1", "8080");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter( socket.getOutputStream(), autoflush );
BufferedReader in = new BufferedReader(
new InputStreamReader( socket.getInputStream() ));
// send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection: Close");
out.println();
// read the response
boolean loop = true;
StringBuffer sb = new StringBuffer(8096);
while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
Thread.currentThread().sleep(50);
}
// display the response to the out console
System.out.println(sb.toString());
socket.close();
要從服務(wù)器得到一個確切的響應(yīng),你需要發(fā)送一個遵循HTTP協(xié)議規(guī)則的HTTP請求。如果你閱讀了上面的那段"超文本傳輸協(xié)議(HTTP)" ,那么你就應(yīng)該能夠理解剛才上面建立socket的代碼。
Windows教程Rss訂閱服務(wù)器教程搜索
Windows教程推薦
猜你也喜歡看這些
- 一步一步實例教你如何配置apache的rewrite模塊
- 使IIS支持PHP,ISAPI或CGI,FastCGI完全配置教程(最新php5.2.13配置方法)
- Windows2003校園Web服務(wù)器常見問題
- Apache服務(wù)器優(yōu)化
- 妙用SSL給IIS加把鎖(一)
- 讓你的Web服務(wù)器日志文件更安全
- 虛擬主機下asp.net 2.0的導(dǎo)航控件treeview,menu等出錯
- 降低winnt Apache服務(wù)的權(quán)限,讓你的虛擬主機更安全
- Apache 2.2 + Tomcat 5.5 使用UrlRewrite實現(xiàn)泛域名解析的方法
- 為應(yīng)用程序池 ''DefaultAppPool'' 提供服務(wù)的進程關(guān)閉時間超過了限制
- 相關(guān)鏈接:
- 教程說明:
Windows教程-基于Jave的Web服務(wù)工作機制(2)
。