您的位置:首页 > 理论基础 > 计算机网络

从WebView到http协议

2015-08-09 19:07 681 查看

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");

}

}

实际界面:



对于 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();
}
}

实际界面:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: