基于Jave的Web服務(wù)工作機(jī)制2_JSP教程
推薦:基于Jave的Web服務(wù)工作機(jī)制3ServerSocket 類 Socket 類表示的是客戶端的socket。無論什么時(shí)候,只要你想連接到一個(gè)遠(yuǎn)程服務(wù)器的應(yīng)用,你都要構(gòu)建一個(gè)socket。如果你想執(zhí)行一個(gè)服務(wù)器應(yīng)用程序
HTTP響應(yīng)(Responses)
和請(qǐng)求類似,一個(gè)HTTP響應(yīng)也包含三個(gè)部分:
協(xié)議狀態(tài) 代碼描敘(Protocol-Status code-Description)
響應(yīng)包頭(Response headers)
實(shí)體(Entity body)
下面是HTTP響應(yīng)的一個(gè)簡(jiǎn)單范例:
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
Welcome to Brainy Software
第一行的響應(yīng)包頭和上面的請(qǐng)求包頭很相似。 第一行告訴我們,協(xié)議是使用的HTTP1.1,響應(yīng)請(qǐng)求已成功(200表示成功),一切已OK。
響應(yīng)包頭和請(qǐng)求包頭相似,也包含一些有用的信息。響應(yīng)的實(shí)體是HTML那一部分的內(nèi)容。包頭和實(shí)體也都是被CRLF序列分離開的。
Socket類
套接字(socket)是網(wǎng)絡(luò)連接的一個(gè)端點(diǎn)。它使得應(yīng)用程序能夠通過網(wǎng)絡(luò)進(jìn)行讀和寫的操作。 通過在連接上發(fā)送和接受字節(jié)流,兩個(gè)位于不同計(jì)算機(jī)的軟件程序能夠彼此相互通訊。為了發(fā)送一個(gè)消息到另一個(gè)程序,你需要知道對(duì)方機(jī)器的IP地址和socket端口號(hào)。在JAVA中,一個(gè)socket是由java.net.Socket類所表示的。
為了創(chuàng)建一個(gè)套接字,你可以使用Socket類的構(gòu)造函數(shù)來完成。 這些構(gòu)造函數(shù)接受主機(jī)名和端口:
public Socket(String host, int port)
host表示遠(yuǎn)程計(jì)算機(jī)名或者IP地址,port表示該遠(yuǎn)程應(yīng)用的端口號(hào)。比如,要在80端口連接到y(tǒng)ahoo.com,你需要構(gòu)造下面的socket:
new Socket("yahoo.com", 80);
一旦你成功創(chuàng)建了一個(gè)Socket類的實(shí)例,就可以使用它來發(fā)送和接受字節(jié)流了。 要發(fā)送字節(jié)流,必須首先調(diào)用Socket類的getOutputStream 方法來獲得一個(gè)java.io.OutputStream對(duì)象。要發(fā)送一個(gè)文本到遠(yuǎn)程應(yīng)用程序,經(jīng)常要構(gòu)造一個(gè)從OutputStream對(duì)象返回的java.io.PrintWriter對(duì)象。要接收連接另一端的字節(jié)流,要調(diào)用Socket類的getInputStream方法,該方法是從 java.io.InputStream返回的。
下面的程序段創(chuàng)建了一個(gè)socket,和本地HTTP服務(wù)器(127.0.0.1代表本地)進(jìn)行通訊,發(fā)送一個(gè)HTTP請(qǐng)求,然后從服務(wù)器接收一個(gè)響應(yīng)。它創(chuàng)建了一個(gè)StringBuffer 來保存響應(yīng),并將它打印到控制臺(tái)。
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ù)器得到一個(gè)確切的響應(yīng),你需要發(fā)送一個(gè)遵循HTTP協(xié)議規(guī)則的HTTP請(qǐng)求。如果你閱讀了上面的那段"超文本傳輸協(xié)議(HTTP)" ,那么你就應(yīng)該能夠理解剛才上面建立socket的代碼。
分享:基于Jave的Web服務(wù)工作機(jī)制4在下面的段落中,讓我們來看看這三個(gè)類吧。 HttpServer 類 HttpServer類表示一個(gè)web服務(wù)器,且在公共靜態(tài)目錄WEB_ROOT及它的子目錄中能為找到的那些靜態(tài)資源
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
猜你也喜歡看這些
- JS節(jié)日倒計(jì)時(shí)效果
- JSP不是簡(jiǎn)化的Java
- Jquery、Ajax、Struts2完成定時(shí)刷新的方法
- Java中計(jì)算任意兩個(gè)日期之間的工作天數(shù)
- JSP動(dòng)態(tài)網(wǎng)站環(huán)境搭建的詳細(xì)步驟
- 純JSP+DWR實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)下拉選擇菜單實(shí)現(xiàn)技巧
- JSP初級(jí)教程之跟我學(xué)JSP(八)
- JSP初級(jí)教程之跟我學(xué)JSP(四)
- JSP Struts之HTML標(biāo)簽庫(kù)詳解
- 揭秘EL表達(dá)式語言的基礎(chǔ)總結(jié)
- 相關(guān)鏈接:
- 教程說明:
JSP教程-基于Jave的Web服務(wù)工作機(jī)制2
。