首页 > 开发 > 综合 > 正文

基于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的代码。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表