什么是HTTP?
1.超文本传输协议是互联网上应用最为广泛的一种网络协议
2.HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务器端是网站
3.HTTP是客户端浏览器或其他应用程序与Web服务器之间的应用层通信协议
HTTP工作原理
1.客户端与服务器建立连接
2.建立连接后,客户端想服务器端发送一个请求
3.服务器接收到请求之后,向客户端发送响应信息
4.客户端与服务器端断开连接
注意:这里的第四条需要注意,即当用户看到如下的界面时,客户端就已经与服务器断开连接了。
HTTP运行流程
下面以一个简单的例子介绍与服务器端的连接,并从服务器端获取数据,下图是运行的截图:
当用户点击按钮时,向服务器端发送请求,并把返回的数据显示在下面的textview中,下面是具体的实现代码:
[java]
p<span style="font-size:18px;">ublic class MainActivity extends Activity {
private Button button;
private TextView textView;
private HttpResponse httpResponse=null;
private HttpEntity httpEntity=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
textView=(TextView)findViewById(R.id.textview);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//生成一个请求对象
HttpGet httpGet=new HttpGet("http://www.baidu.com");
//生成一个Http客户端对象
HttpClient httpClient=new DefaultHttpClient();
//使用Http客户端发送请求对象
InputStream inputStream=null;
try {
httpResponse=httpClient.execute(httpGet);
//收到服务器的响应之后把返回的数据读取出来
httpEntity=httpResponse.getEntity();
inputStream=httpEntity.getContent();
//流文件的读取
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String resultString="";
String lineString="";
while((lineString=reader.readLine())!=null){
resultString=resultString+lineString;
}
textView.setText(resultString);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
inputStream.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
</span>
注意,由于涉及到网络连接,还要在AndroidManifest中声明网络权限:
[html]
<uses-permission android:name="android.permission.INTERNET"/>