国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

基于Jave的Web服務工作機制(2)

2024-07-21 02:14:20
字體:
來源:轉載
供稿:網友


http響應(responses)

 

  和請求類似,一個http響應也包含三個部分:

  協議狀態 代碼描敘(protocol-status code-description)
  響應包頭(response headers)
  實體(entity body)
  下面是http響應的一個簡單范例:

  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>

  第一行的響應包頭和上面的請求包頭很相似。 第一行告訴我們,協議是使用的http1.1,響應請求已成功(200表示成功),一切已ok。

  響應包頭和請求包頭相似,也包含一些有用的信息。響應的實體是html那一部分的內容。包頭和實體也都是被crlf序列分離開的。

  socket類

  套接字(socket)是網絡連接的一個端點。它使得應用程序能夠通過網絡進行讀和寫的操作。 通過在連接上發送和接受字節流,兩個位于不同計算機的軟件程序能夠彼此相互通訊。為了發送一個消息到另一個程序,你需要知道對方機器的ip地址和socket端口號。在java中,一個socket是由java.net.socket類所表示的。

  為了創建一個套接字,你可以使用socket類的構造函數來完成。 這些構造函數接受主機名和端口:

  public socket(string host, int port)
  host表示遠程計算機名或者ip地址,port表示該遠程應用的端口號。比如,要在80端口連接到yahoo.com,你需要構造下面的socket:

  new socket("yahoo.com", 80);
  一旦你成功創建了一個socket類的實例,就可以使用它來發送和接受字節流了。 要發送字節流,必須首先調用socket類的getoutputstream 方法來獲得一個java.io.outputstream對象。要發送一個文本到遠程應用程序,經常要構造一個從outputstream對象返回的java.io.printwriter對象。要接收連接另一端的字節流,要調用socket類的getinputstream方法,該方法是從 java.io.inputstream返回的。

  下面的程序段創建了一個socket,和本地http服務器(127.0.0.1代表本地)進行通訊,發送一個http請求,然后從服務器接收一個響應。它創建了一個stringbuffer 來保存響應,并將它打印到控制臺。

  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();

  要從服務器得到一個確切的響應,你需要發送一個遵循http協議規則的http請求。如果你閱讀了上面的那段"超文本傳輸協議(http)" ,那么你就應該能夠理解剛才上面建立socket的代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德惠市| 监利县| 安塞县| 喀喇沁旗| 柘荣县| 南通市| 石台县| 鄂托克前旗| 英山县| 刚察县| 嘉荫县| 灵宝市| 潢川县| 四川省| 迁西县| 元朗区| 拉萨市| 金溪县| 海伦市| 富源县| 台安县| 丰镇市| 昭通市| 策勒县| 霍山县| 饶平县| 抚顺县| 容城县| 旬邑县| 建始县| 广东省| 金华市| 台东县| 施甸县| 盐城市| 阿瓦提县| 荥阳市| 三亚市| 台北县| 台北县| 积石山|