URLConnection(互联网)
一、urlconnection连接Servlet
1:> URL请求的类别:
分为二类,GET与POST请求。二者的区别在于:
a:) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
b:) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
MyTask.java文件:
public class MyTask extends AsyncTask {
private BaseAdapter adapter;
private List<User> userList;
private MainActivity activity;
public MyTask(MainActivity activity){
this.activity = activity;
}
private String errorMessage = "";
private String messageInfo = "";
private static final String URL_STR = "http://android2017.duapp.com/test1.jsp";
private String lastId = "123&1=1";
//1.所有耗时的代码,写到这里来(数据库、蓝牙、网络服务)
//2.绝对不能碰UI
@Override
protected Object doInBackground(Object... params) {
try {
URL url = new URL(URL_STR);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();//创建了一个连接对象
//对连接进行配置
conn.setDoInput(true);//输入
conn.setDoOutput(true);//输出
conn.setRequestMethod("POST");
//防止读取脏数据
conn.setUseCaches(false);
//获取一个输出流
OutputStream os = conn.getOutputStream();
//可以上传文本数据,通過DataOutputStream写入数据输出流中
DataOutputStream dos = new DataOutputStream(os);
dos.writeBytes("lastId="+URLEncoder.encode(lastId, "UTF-8"));
//dos.writeBytes("lastId="+lastId);
dos.flush();//刷新,将数据发到缓冲区。
dos.close();
// getResponseCode获取URL服务端响应的状态码
if ( conn.getResponseCode() == 200){
//输入流
InputStream is = conn.getInputStream();
//reader(注意UTF-8读),InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。
如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
//缓冲区,防止读死
BufferedReader br = new BufferedReader(isr);
String ReadOneline = null;
//多行数据时,减少不断创建String对象
StringBuffer sb = new StringBuffer();
while ( (ReadOneline=br.readLine())!=null ){
sb.append(ReadOneline);
}
br.close();
isr.close();
is.close();
conn.disconnect();
return sb.toString();
}
else{
errorMessage = "服务器繁忙,请稍后再试("+conn.getResponseCode()+")";
return "errorserver";
}
} catch (Exception e) {
errorMessage = e.getMessage();
return "errorclient";
}
}
//准备
@Override
protected void onPreExecute() {
Toast.makeText(activity, "开始执行...", Toast.LENGTH_SHORT).show();
}
//做完后执行
@Override
protected void onPostExecute(Object result) {
String r = result.toString();
TextView tv = (TextView)activity.findViewById(R.id.textView1);
if ("errorclient".equals(r)){
if (errorMessage.indexOf("No add")!=-1){
tv.setText("网络不通");
}
else{
tv.setText("访问网络时其它异常:"+errorMessage);
}
}else if("errorserver".equals(r)){
tv.setText(errorMessage);
}else{
tv.setText(r);
}
}
}
2:> URLConnection的对象:
URL url = new URL(URL_STR);
//URLConnection rulConnection = url.openConnection();//创建了一个连接对象,获取URLConnection对象。
// 此处的urlConnection对象实际上是根据URL的
// 请求协议(此处是http)生成的URLConnection类
// 的子类HttpURLConnection,故此处最好将其转化
// 为HttpURLConnection类型的对象,以便用到
HttpURLConnection conn = (HttpURLConnection)url
3:> HttpURLConnection对象参数问题
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true;
conn.setDoInput(true);//输入
conn.setDoOutput(true);//输出 // Post 请求不能使用缓存,防止读取脏数据
conn.setUseCaches(false); // 设定请求的方法为"POST",默认是GET
conn.setRequestMethod("POST"); // 连接,url.openConnection()至此的配置必须要在connect之前完成,
// conn.connect(); //实现连接
4:> HttpURLConnection连接问题:
//url对象用openconnection()打开连接;获得URLConnection类对象,再用URLConnection类对象的connect()方法进行连接
//getOutputStream()会隐含的进行connect()方法实现连接。
OutputStream os =conn.getOutputStream();
5:> HttpURLConnection写数据与发送数据问题:
//获取一个输出流
OutputStream os = conn.getOutputStream();
//可以上传文本数据,通過DataOutputStream写入数据输出流中
DataOutputStream dos = new DataOutputStream(os);
dos.writeBytes("lastId="+URLEncoder.encode(lastId, "UTF-8"));
//dos.writeBytes("lastId="+lastId);
dos.flush();//刷新,将数据发到缓冲区。
dos.close();
// getResponseCode获取URL服务端响应的状态码
if ( conn.getResponseCode() == 200){
//输入流,获取服务端返回的
InputStream is = conn.getInputStream();
//reader(注意UTF-8读),InputStreamReader 将字节流转换为字符流。
是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
//缓冲区,防止读死
BufferedReader br = new BufferedReader(isr);
String ReadOneline = null;
//多行数据时,减少不断创建String对象
StringBuffer sb = new StringBuffer();
while ( (ReadOneline=br.readLine())!=null ){
sb.append(ReadOneline); }
br.close();//关闭缓存区
isr.close();
is.close();//关闭输入流
conn.disconnect(); return sb.toString();
} else{
errorMessage = "服务器繁忙,请稍后再试("+conn.getResponseCode()+")";
return "errorserver";
} } catch (Exception e) {
errorMessage = e.getMessage(); return "errorclient";
}
URLConnection(互联网)的更多相关文章
- Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转
Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...
- Java网络编程小结 URLConnection协议处理器
URL和URLConnection类 网络中的URL(Uniform Resource Locator)是统一资源定位符的简称.它表示Internet上某一资源的地址.通过URL我们可以访问Inter ...
- 一、URL和URLConnection
一.简述: 在Java网络编程中,我们最常听到的一个单词是URL.URL标识了一个资源,并可以通过URL来获取这个资源.我们不知道资源具体是什么,也不需要关心怎么获取.你只需要拿到一个URL,你就可以 ...
- JAVA学习第六十三课 — 关于client服务端 && URL类 & URLConnection
常见的client和服务端 client: 浏览器:IE:弹窗体,猎豹:弹窗体.多标签,争强效果 服务端: server:TomCat:1.处理请求 2.给予应答 想让TomC ...
- java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- 2016年我们重新思考移动互联网创业的风险, 微信还是APP?
感觉这两年前端开发又火起来了,很多做内容创业和做微电商创业的人,往往都选择了运营微信号.对于做纯技术开发的人来说,一般是看不上微信号的,感觉没什么技术含量,或者说没什么技术壁垒.也有另一批人观点相反的 ...
- Arcmap中加载互联网地图资源
本文转载自:http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地 ...
随机推荐
- UML作业第三次:分析《书店图书销售管理系统》,绘制类图
一. 类图语法学习小结(类间关系的表示方法) 1.抽象类和接口 我们用关键字abstract或abstract class来定义抽象类(抽象类用斜体显示).也可以使用interface,annotat ...
- Linux 驱动——Button驱动1
button_drv.c驱动文件: #include <linux/module.h>#include <linux/kernel.h>#include <linux/i ...
- 完美解决win10家庭版本系统无法远程连接问题
版权声明:本文转载.原文: https://blog.csdn.net/rainmaple20186/article/details/80913191 近期接入同一局域网的服务器,发现在连接的时候,报 ...
- python从零开始 -- 第2篇之python版本差异
python从零开始 -- 第2篇之python版本差异 第0篇开始,咱们就说选择 python 3.x,一般来说,咱们面临选择的时候总是想了解更多一点,并且版本之间的对比能引申出很多有意思的故事和知 ...
- BarCodeUtile
package com.rscode.credits.util; import java.awt.image.BufferedImage; import java.io.ByteArrayOutput ...
- ArcMap复制粘贴问题
ArcMap 10.2能进行复制,但是不能进行粘贴的问题: 前几天用朋友的ArcMap10.2时,偶然发现在编辑数据的时候,需要在不同的shp层之间操作,往往有时候可以复制,但是粘贴那一项是灰色的,经 ...
- adb+monkey压力测试入门
一.ADB安装步骤及ADB环境配置 1.ADB安装步骤 1)adb工具安装地址:http://www.wmzhe.com/soft-39913.html 2)下载安装包后,解压,将adb安装在根目录下 ...
- Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks-paper
Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks 作者信息:Kai Shen ...
- JQuery----操作01
---恢复内容开始--- 一 JQuery选择器: 基本选择器和基本过滤器和筛选选择器 基础选择器: <title>Title</title> <script src=& ...
- Introduction tp Operating System
一.虚拟化 为了让用户告诉操作系统如何利用虚拟机功能,OS提供给应用程序一些接口——系统调用,也会说提供了一个标准库. CPU通过分时达到虚拟化. 内存物理模型只是一个字节数组,读写修改需要制定地址. ...