网络编程(二)

【URL&URLConnection】
为什么IE浏览打印的只是一个主体数据

    
        这是我的网页
    

    

        

欢迎光临

        这是一个tomcat服务器中的资源。是一个html网页。
    


 

这样的内容而已,而我们的打印了那么多的内容呢,这是因为IE里面内置了http的解析引擎,所以服务端返回来的内容
它能识别那些应答消息头,应答体,所以它就把应答体打印了出来,而我们自己的程序没有解析引擎不能识别那些应答体,就全部打印了。
所以我们如果能具备一个能解析这个http协议的东西,就能和IE浏览器一样了。
http://192.168.1.100:8080/myweb/1.html这么一串地址中,包含了很多信息,
比如说http 协议,主机,端口,访问的资源,因此它应该被封装成一个对象,在java中
就被封装为URL。

URL代表统一资源定位符。什么叫做定位,也就是说“http://192.168.1.100:8080/myweb/1.html”
这个符号能定位到互联网资源。

 

URI表示一个统一资源标识符。就是凡是能标识这个统一资源的符号都叫URI。所以URL也是URI的一种。


URL可以直接解析URL地址,它可以分的出来谁是协议,谁是主机,谁是地址。


public class URLDemo {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {

        String str_url = "http://192.168.1.100:8080/myweb/1.html?name=lisi";
        
        URL url = new URL(str_url);
        
        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());
        
    }

}
可以打印:
getProtacol:http
getHost:192.168.1.100
getPort:8080
getFile:/myweb/1.html?name=lisi
getPath:/myweb/1.html
getQuery:name=lisi

这就说明URL是可以解析http协议的
 

 

 

URL还可以获取统一资源定位符中的内容
public class URLDemo {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {

        String str_url = "http://192.168.1.100:8080/myweb/1.html";
        
        URL url = new URL(str_url);
        InputStream in=url.open.Stream();//这个方法可以连接这个地址,还能返回连接后的读取流
        byte[]buf=new byte[1024];
        int len =in.read(buf);
        String text = new String(buf,0,len);
        System.out.println(text);
        in.close();
    }

}
打印:


    
        这是我的网页
    

    

        

欢迎光临

        这是一个tomcat服务器中的资源。是一个html网页。
    



其实这个方法是简写了 ,完整的代码如下:

 

public class URLDemo {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {

        String str_url = "http://192.168.1.100:8080/myweb/1.html";
        
        URL url = new URL(str_url);
        
//        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();
        
        //获取url对象的Url连接器对象。将连接封装成了对象:java中内置的可以解析的具体协议的对象+socket.
        URLConnection conn = url.openConnection();
        
//        String value = conn.getHeaderField("Content-Type");
//        System.out.println(value);
        
//        System.out.println(conn);
        //sun.net.www.protocol.http.HttpURLConnection:http://192.168.1.100:8080/myweb/1.html
        
        InputStream in = conn.getInputStream();
        
        byte[] buf = new byte[1024];
        int len = in.read(buf);
        
        String text = new String(buf,0,len);
        
        System.out.println(text);
        
        in.close();
        
        
        
        
        
    }

 

 

【网络结构】

网络结构,
1,C/S  client/server
    
    特点:
        该结构的软件,客户端和服务端都需要编写。
        可发成本较高,维护较为麻烦。
        
    好处:
        客户端在本地可以分担一部分运算。


2,B/S  browser/server
    特点:
        该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。 
        开发成本相对低,维护更为简单。
    缺点:所有运算都要在服务端完成。
 

 

 

 

 

 

 

 

你可能感兴趣的:(网络编程(二))