从WebView到http协议

WebView--->>

package com.app.cceasy.webviewtest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.web_view);

        //设置浏览器的一些属性
        webView.getSettings().setJavaScriptEnabled(true); //让webview支持javascript脚本

        //加载网页的方式
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url); //根据传入的参数加载新的网页

                return true; //表示当前webview可以处理打开新网页的请求,不用借助系统浏览器
            }
        });
        webView.loadUrl("http://www.baidu.com");



    }

}

实际界面:

Screenshot_2015-08-09-19-05-03

 

 

对于 HTTP 协议,你只需要稍微了解一些就足够了,它的工作原理特别的简单,就是客户端向服务器发出一条HTTP 请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。是不是非常简单?一个浏览器的基本工作原理也就是如此了。

比如说上一节中使用到的 WebView 控件,其实也就是我们向百度的服务器发起了一条 HTTP 请求,接着服务器分析出我们想要访问的是百度的首页,于是会把该网页的 HTML 代码进行返回,
然后 WebView再调用手机浏览器的内核对返回的 HTML代码进行解析, 最终将页面展示出来。

简单来说,WebView 已经在后台帮我们处理好了发送 HTTP 请求、接收服务响应、解析
返回数据,以及最终的页面展示这几步工作,不过由于它封装得实在是太好了,反而使得我
们不能那么直观地看出 HTTP 协议到底是如何工作的。因此,接下来就让我们通过手动发送
HTTP 请求的方式,来更加深入地理解一下这个过程

在 Android 上发送 HTTP 请求的方式一般有两种,HttpURLConnection 和 HttpClient,

HttpURLConnection

package com.app.cceasy.httptest;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    public static final int SHOW_RESPONSE = 0;
    Handler handler;

    TextView tw4Response;
    Button bn4GetResponse;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tw4Response = (TextView) findViewById(R.id.id_textview_show_response);
        bn4GetResponse = (Button) findViewById(R.id.button_get_response);

        bn4GetResponse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendRequestWithHttpURLConnection();

            }
        });

        handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                String msgStr = (String) msg.obj;
                if(msg.what == SHOW_RESPONSE){
                    tw4Response.setText(msgStr);
                }

                super.handleMessage(msg);
            }
        };
    }


    private void sendRequestWithHttpURLConnection(){
        new Thread(){
            @Override
            public void run() {
                HttpURLConnection connection = null;
                try{
                    URL url = new URL("http://www.baidu.com/");
                    connection = (HttpURLConnection) url.openConnection();

                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);

                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

                    //connection.setRequestMethod("POST");
                    //BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
                    //bufferedWriter.write("username=admin&password=123456");


                    String line;
                    StringBuilder response = new StringBuilder();

                    while ((line = bufferedReader.readLine()) != null){
                        System.out.print("-------------");
                        response.append(line);
                    }


                    Message message = new Message();
                    message.what = SHOW_RESPONSE;
                    message.obj = response.toString();

                    handler.sendMessage(message);

                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    if(connection != null){
                        connection.disconnect();
                    }
                }
            }
        }.start();
    }
}

实际界面:

Screenshot_2015-08-09-19-06-53

posted @ 2015-08-09 19:07  cuiz_book  阅读(947)  评论(0编辑  收藏  举报