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中打开互联网地图中的地 ...
随机推荐
- 使用VS调试DUMP文件
使用前准备: 1.保存编译文件的PDB文件(要和生成exe文件的对应) 2.在开发机器上,使用vs直接双击打开dmp文件,注意 进程名称 ,这个是程序运行crash的时候所在的目录位置,这个很重要. ...
- Python 内编写类的各种技巧和方法
Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...
- idea 里自动下载私服jar一直不能下载下来
idea 里自动下载私服jar一直不能下载下来,只生成了.lastUpdated文件,检查了setting.xml文件.网络,私服,均无问题,在idea中打开Terminal窗口,在所要更新的pom. ...
- css常用的可继承属性和不可继承属性
不可继承属性1.display2.text-decoration 添加文本样式3.list-style4.盒子模型属性(如padding系列,border系列,margin等,width,height ...
- height属性
高度属性: height:长度值|百分比|auto 最大高度:max-height 最小高度:min-height 说明:设置块级元素和替换元素的内容高度.
- Java程序第二次作业
1.编写“人”类及其测试类.1.1 “人”类: 类名:Person 属性:姓名.性别.年龄.身份证号码 方法:在控制台输出各个信息1.2 测试类 类名:TestPerson 方法:main ...
- Measuring Text Difficulty Using Parse-Tree Frequency
https://nlp.lab.arizona.edu/sites/nlp.lab.arizona.edu/files/Kauchak-Leroy-Hogue-JASIST-2017.pdf In p ...
- 20164318 毛瀚逸-----EXP5 MSF基础应用
1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (成功) 1.2 一个针对浏览器的攻击, ...
- python中讲的好的内容记载
什么是Name_mangling以及python的下划线约定 (转载来源:https://blog.csdn.net/handsomekang/article/details/40303207)
- nginx配置静态页面访问
server { server_name static.naice.me; // 你的域名或者 ip # 域名:static.naice.me 这里用 "_" 代表获取匹配所有 ...