创建一个到 URL 的连接需要几个步骤:
1、通过在 URL 上调用 openConnection 方法创建连接对象。
URL url = new URL("http://localhost:8080/day04/1.html");
2、处理设置参数和一般请求属性。
- 表示应用程序要将数据写入 URL 连接,及发送数据
- 表示应用程序要从 URL 连接读取数据,及获取数据
3、使用 connect 方法建立到远程对象的实际连接。
conn.connect();
只是建立了一个与服务器的tcp连接,并没有实际发送http请求
4、远程对象变为可用。远程对象的头字段和内容变为可访问。
conn.getOutputStream();
注意:
如果setDoOutput没有设置true,会出现java.net.ProtocolException异常
getOutputStream会隐含的进行connect
conn.getInputStream();
注意: 在调用此方法之前以上所准备的数据仅缓存在本地内存中。调用了此方法将内存缓冲区中封装好的完整的HTTP请求发送到服务端
package cn.itcast.url;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
/**
* URLConnection简单示例
* @author <a href="mailto:liangtong@itcast.cn">梁桐</a>
*/
public class UrlConnectionTest {
public static void main(String[] args) throws Exception{
//对指定的web链接进行描述
URL url = new URL("http://localhost:8080/day04/1.html");
//确定链接是否,获得链接--链接否?
URLConnection conn = url.openConnection();
//设置参数
conn.setDoOutput(true); //默认false,是否可发送数据
conn.setDoInput(true); //默认true,是否可以接受数据
//链接
conn.connect();
//发送数据
OutputStream out = conn.getOutputStream(); //java.net.ProtocolException
out.write("username=rose".getBytes());
//获得资源,并打印到控制台
InputStream in = conn.getInputStream();
StringBuffer sb = new StringBuffer();
byte[] arr = new byte[10240];
while ((len = in.read(arr)) > 0) {
sb.append(new String(arr, 0, len));
}
System.out.println(sb.toString());
}
}