Java 浏览器请求与web服务器应答

HTML:
浏览器向web服务器请求网页,使用tcp协议,向其发送特定格式的数据字段,web服务器根据这些字段中携带的信息作出对应的应答。
浏览器请求字段:

GET /myweb/1.html  HTTP/1.1   // 请求行  请求方式  /myweb/1.html  请求的资源路径   http协议版本。
 /*请求消息头 . 属性名:属性值*/
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, 
application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* // 其中*/*表示所有的文件类型
Accept-Language: zh-cn,zu;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)
Host: 192.168.1.100:9090
//Host: www.huyouni.com:9090
Connection: Keep-Alive
//空行
//请求体

WEB服务器应答:

HTTP/1.1 200 OK   //应答行,http的协议版本   应答状态码   应答状态描述信息
Server: Apache-Coyote/1.1
ETag: W/"199-1323480176984"
Last-Modified: Sat, 10 Dec 2011 01:22:56 GMT
Content-Type: text/html
Content-Length: 199
Date: Fri, 11 May 2012 07:51:39 GMT
Connection: close
//空行
//应答体,网页源码

实例:模拟浏览器与web服务器代码
浏览器端:

Socket s = new Socket("192.168.1.100",8080);
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("GET /myweb/1.html HTTP/1.1");
out.println("Accept: */*");
out.println("Host: 192.168.1.100:8080");
out.println("Connection: close");
out.println();//空行
out.println();

InputStream in = s.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);

String str =new String(buf,0,len);
System.out.println(str);
s.close();

服务器端:

ServerSocket ss = new ServerSocket(9090);
        Socket s = ss.accept();
        System.out.println(s.getInetAddress().getHostAddress()+".....connected");

        InputStream in = s.getInputStream();    
        byte[] buf = new byte[1024];    
        int len = in.read(buf);
        String text = new String(buf,0,len);
        System.out.println(text);   
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);
        out.println("<font color='red' size='7'>欢迎光临</font>");//返回网页源码
        s.close();
    ss.close();

Java将URL封装,直接提供访问服务,不需要如上的人工发送请求字段

String str_url = "http://192.168.1.100:8080/myweb/1.html";
        URL url = new URL(str_url);
//      获取信息,更多信息见API文档
                                                    //System.out.println("getProtocol:"+url.getProtocol());
//      System.out.println("getHost:"+url.getHost());
//      System.out.println("getPort:"+url.getPort());
//      System.out.println("getFile:"+url.getFile());
//      System.out.println("getPath:"+url.getPath());
//      System.out.println("getQuery:"+url.getQuery());


        InputStream in = url.openStream();//该句等于下面两句

        URLConnection conn = url.openConnection();
        InputStream in = conn.getInputStream();
//      String value = conn.getHeaderField("Content-Type");//获取服务器端的信息(文件类型等等)

        byte[] buf = new byte[1024];
        int len = in.read(buf);
        String text = new String(buf,0,len);
        System.out.println(text);
        in.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值