前言:不知不觉,java的学习我们已经接近尾声了,今天我们就以上传数据和下载数据结尾,过了今天我们就进入安卓的开发之旅。
首先在讲解POST和GET之前,我们先来学习一下 HttpURLConnection,这是一个抽象类,在此之前我们是没有接触过的,所以我觉得在学习向服务器端上传数据下载数据之前,我们必须知道这个抽象类的作用。
1. URLConnection抽象类
URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。在很多时候我们要将URLConnection转换为HttpURLConnection,目的是能使用更多的API,如下所示:
- 1 URL url = new URL("http://192.168.43.32/login.php");
- 2 URLConnection rulConnection = url.openConnection();
- 3 /*
此处的urlConnection对象实际上是根据URL的 请求协议(此处是http)生成的URLConnection类 的子类HttpURLConnection,故此处最好将其转化 为HttpURLConnection类型的对象,以便用到 HttpURLConnection更多的API.如下:
*/- 4 HttpURLConnection httpUrlConnection = (HttpURLConnection) urlConnection;
2. HttpURLConnection 的一些方法
(1) .设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true);
(2). 设置是否从httpUrlConnection读入,默认情况下是true;
httpUrlConnection.setDoInput(true);
(3). Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false);
(4). 设定请求的方法为"POST",默认是GET
httpUrlConnection.setRequestMethod("POST");
(5). 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成,
httpUrlConnection.connect();
3. HttpURLConnection连接问题:
OutputStream outStrm = httpUrlConnection.getOutputStream();
这里的getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,个人认为在开发中不调用上述的connect()也可以)。
4. HttpURLConnection写数据与发送数据问题:
思路是:
-
打开一个URL连接
URL url = new URL("http://192.168.43.32/login.php");
2 .获取connection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-
设置参数
httpConn.setDoOutput(true); //需要输出 httpConn.setDoInput(true); //需要输入 httpConn.setUseCaches(false); //不允许缓存
-
设置请求方式为post
connection.setRequestMethod("POST");
-
准备上传数据
String data = "yourname= jack&userpassword=123";
6.开始上传 设置输出流,需要上传
OutputStream os = connection.getOutputStream();
os.write(data.getBytes());
os.flush();//表示写完了
-
接受服务器端返回的数据
InputStream is = connection.getInputStream(); byte[] buf = new byte[1024]; int len; while ((len = is.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } }
另外一个重要的类是URL,通常URL可以通过传给构造器一个String类型的参数来生成一个指向特定地址的URL实例。
5.URL请求的类别:
分为二类,GET与POST请求。二者的区别在于:
a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
上面我们讲解了post请求方式,下面我们来看看get 方式:
一:不带参数的GET请求的步骤:
-
打开一个URL 链接
2.获取与服务器连接的对象
3.读取下载内容
源代码如下:URL url= new URL("http://192.168.43.32/1.png"); //获取与服务器连接的对象 URLConnection connection1 = url.openConnection(); //读取下载内容 InputStream fsi=connection1.getInputStream(); FileInputStream fos = new FileInputStream("C:\\Users\\Administrator\\Desktop\\java\\java\\java1\\src\\main\\java\\day14"); byte[] buf2 = new byte[1024]; int len2; while ((len2 = fsi.read(buf2)) != -1){ System.out.println(new String(buf2,0,len2)); }
二:带参数的GET请求方式的步骤如下:
1.打开一个URL 链接
String path = "http://192.168.43.32/login.php?" + "yourname=1232&user_password=2";
URL url1 = new URL(path);
2.获取与服务器连接的对象
URLConnection connection1 = url1.openConnection();
3.设置请求方式,默认是get
HttpURLConnection httpConnecion = (HttpURLConnection) connection1;
httpConnecion.setRequestMethod("GET");
4.读取下载内容
InputStream is1 = httpConnecion.getErrorStream();
byte[] buf1 = new byte[1024];
int len1;
while ((len1 = is1.read(buf1)) !=-1 ){
System.out.println(new String(buf1,0,len1));
}
}
对比:POST和GET的步骤都差不多一样的,设置参数get也可以设置,只是上面我们采用了默认的请求方式,设置输出流,get方式,我们是吧参数放在了url中,所以答题上这些步骤都是一样的。
时间就是这么快,一个月就过去了,我们java 课程的学习就到此结束了,安卓见!~~~~~~~
网友评论