一 .Get和Post的优缺点

1. Get
> 优点: 编写起来比较简单,只要在地址后面拼接数据即可。

> 缺点: 提交的数据有长度限制、安全性比较差

2.Post

> 优点: 提交的数据没有长度限制、使用的是流的方式提交,安全性比较高

> 缺点: 编写起来比较麻烦

二.使用POST方式提交数据
1. 定位资源
        
        String path = "http://10.0.2.2:8080/QQ/LoginServlet";
        
        URL url = new URL(path);
2. 打开连接

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3. 设置请求方式

//1.设置请求的方式: post
                    conn.setRequestMethod("POST"); // post 大写
4. 设置提交的数据类型

//2. 设置提交的数据类型
                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
5. 设置提交的数据长度

String data = "qq="+qq+"&pwd="+pwd;
        //3. 设置提交的数据长度
                    conn.setRequestProperty("Content-Length", data.length()+"");
6. 打开输出流

//4.先打开输出流
                    conn.setDoOutput(true);
7. 开始往服务器写数据

//5.开始写数据
                    OutputStream os = conn.getOutputStream();
                    os.write(data.getBytes());
                    os.close();
8. 获取服务器返回的数据(与Get一样)

三.中文乱码问题

1. 服务器返回数据出现乱码

> 服务器返回数据的时候,请使用UTF-8进行编码

> 服务器使用默认的码表编码,客户端使用GBK的码表进行解码

> 注意: Tomcat服务器在返回数据的时候,默认先使用本地的码表进行编码,如果本地的码表不支持这个字符,那么在使用ISO-8859-1码表去编码

2. 客户端提交中文的时候出现乱码
     2.1. 客户端提交的时候要进行中文的URL编码

2.2. 服务器要进行解码

   由于tomcat服务器在获取到数据的时候,默认使用的是ISO-8859-1的码表进行编码,但是客户端那边使用的是UTF-8的码表,所以必须先让字符串回到最初的状态,然后在进行解码

String newPwd = new String (pwd.getBytes("ISO-8859-1")  , "UTF-8") ;

四. 使用HttpClient提交数据步骤-post

1. 定义客户端

//1.创建客户端
                    HttpClient client  = new DefaultHttpClient();

2. 定义请求

String path = "http://10.0.2.2:8080/QQ/LoginServlet";
        //2.定义一个post请求
                    HttpPost request = new HttpPost(path);
3. 给请求封装数据实体(Get方式省略此步骤)

//定义带上的参数集合
                    List<NameValuePair> parameters  = new ArrayList<NameValuePair>();
                    
                    //给集合装上两个参数, qq -- pwd
                    parameters.add(new BasicNameValuePair("qq", qq));
                    parameters.add(new BasicNameValuePair("pwd", pwd));
                    
                    //定义一个数据实体 如果有中文,编码应该在new实体对象的时候设置。
                    HttpEntity entity = new UrlEncodedFormEntity(parameters  ,"utf-8");
                    
                    //3.给post请求设置参数
                    request.setEntity(entity);
4. 执行请求

//3执行一个get请求
                    HttpResponse res = client.execute(request);
5. 根据响应对象判断状态码

//4.获取状态码
                    int code = res.getStatusLine().getStatusCode();
                    
                    if(code ==200){
                        。。。
                    }

6. 从响应对象获取数据内容

//5.获取响应对象里面的数据实体,然后获取输入流
                        InputStream is = res.getEntity().getContent();
                        //服务器返回的数据
                        String result = StreamTools.readStream(is);

多线程下载
 网络数据访问
> 线程并发

为什么多线程下载速度比较快
> 多个线程同时瓜分服务器的资源,每个人都等分得到内容。单位时间内,获取到的资源就变多了。

> 多线程下载的速率也受客户端的下行带宽和服务器的上行带宽限制。

###多线程断点续传

1. 在写入数据的时候,保存起来当前的下载量。
2. 在进来的时候,开始下载前,必须要读取以前的保存位置,然后从这个位置开始下载
3. 跳转的位置也要注意一下,并不是以前的startIndex

关于Get和Post的学习笔记(五)的更多相关文章

  1. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  2. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  3. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  5. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  7. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  8. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  9. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

  10. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

随机推荐

  1. 加载本地html遇到的问题

    之前要做一个Demo,需要用UIWebView来加载网页,前端的同事把资源包给我,里面包含html,css,JavaScript,图片等文件.我想当然的把文件夹拷到工程中,然后用以下方法加载: NSU ...

  2. Python中安装numpy,scipy,matplotlib安装方法

    这个吧,说简单也简单,说难吧我捣鼓了两天才弄出来,真是头发都急白了.其实只要一个网址就搞定了,嘿嘿 http://www.lfd.uci.edu 这里面有你需要的任何东西,当你运行python imp ...

  3. Activity之间的跳转

    /* * 触发按钮bt1跳转到另一个Activity */ bt1.setOnClickListener(new OnClickListener() { @Override public void o ...

  4. 纪念SlingShot 矩阵

    第一次独立做矩阵,只WA了一次,好高兴~~ 题意:已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给 ...

  5. linux网络编程:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)

    从别人的博客中转载过来了这一篇文章,经过重新编辑排版之后展现于此,做一个知识点保存与学习. select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复 ...

  6. 安装weblogic的步骤10.3.0.0

    一.安装前的注意事项: weblogic在安装前必须要有对应的jdk支持weblogic的运行.所以在安装之前一定要根据本机上安装的jdk来选择安装的weblgoic的什么版本.因为weblogic的 ...

  7. SSO单点登录PHP简单版

    前面做了一个新项目,需要用户资源可以需要共享.由于之前没有做过这样的东西,回家之后,立马网站百度"单点登录".帖子很多,甄别之后,这里列几篇认为比较有营养. http://blog ...

  8. FTP下文件夹权限的设置755,766,777,644代表什么意思

    一般情况下,为了网站更安全,我们需要给文件或文件夹设置权限,在采用FTP登录的方式下,经常会用到755,766,777,644等设置. 具体这些数字都代表什么意思呢? 这三个数字分别表示:不同用户或用 ...

  9. KNN(k-nearest neighbor的缩写)又叫最近邻算法

    KNN(k-nearest neighbor的缩写)又叫最近邻算法 机器学习笔记--KNN算法1 前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的 ...

  10. android 手势滑动

    1.概述, 两次都是画曲线统计图用到手势滑动.左滑动,右滑动曲线图翻页 2.直接上代码 3.注: 第一次使用的时候是implement了 OnTouchListener 接口,是在画图布局上layou ...