【URL&URLConnection】
为什么IE浏览打印的只是一个主体数据
<html>
<head>
<title>这是我的网页</title>
</head>
<body>
<h1>欢迎光临</h1>
<font size='5' color="red">这是一个tomcat服务器中的资源。是一个html网页。</font>
</body>
</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();
}
}
打印:
<html>
<head>
<title>这是我的网页</title>
</head>
<body>
<h1>欢迎光临</h1>
<font size='5' color="red">这是一个tomcat服务器中的资源。是一个html网页。</font>
</body>
</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
特点:
该结构的软件,只开发服务器端,不开发客户端,因为客户端直接由浏览器取代。
开发成本相对低,维护更为简单。
缺点:所有运算都要在服务端完成。