http是最常见的应用网络协议之一。这里我们要实现用安卓应用程序,访问javaweb。这里访问的是jsp页面。在实际开发中,
应该访问的是servlet。
第一步: 编写xml布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editname"
android:layout_height="40dp"
android:layout_width="match_parent"/>
<EditText
android:id="@+id/edit"
android:layout_height="40dp"
android:layout_width="match_parent"/>
<Button
android:id="@+id/btn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="发送数据给http网络"/>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:text="你发表的内容:"
/>
<ScrollView
android:id="@+id/se"
android:layout_height="match_parent"
android:layout_width="match_parent">
<TextView
android:id="@+id/showmagess"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:text=" "
/>
</ScrollView>
</LinearLayout>
下面是具体视图

第二步: 给应用程序权限
<uses-permission android:name="android.permission.INTERNET"/>
第三步:在MainActivity中写代码
public class MainActivity extends Activity {
private EditText nickname;
private EditText content;
private Button button;
private Handler handler;
private String result=null;
private TextView resultTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content=(EditText)findViewById(R.id.edit);
resultTV=(TextView)findViewById(R.id.showmagess);
nickname=(EditText)findViewById(R.id.editname);
button=(Button)findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if("".equals(content.getText().toString()))
{
Toast.makeText(MainActivity.this,"请输入要发表的内容",Toast.LENGTH_SHORT).show();
}
else{
//创建一个新线程,发送并读取信息
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
send(); //发送文本内容到web服务器上,并读取
Message m=handler.obtainMessage(); //获取一个Message
handler.sendMessage(m);
}
}).start();//开启线程
}
}
});
handler=new Handler()
{
public void handleMessage(Message msg)
{
if(result!=null)
{
resultTV.setText(result);
content.setText("");
nickname.setText("");
}
super.handleMessage(msg);
}
};
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void send() //用于建立http连接的方法
{
String target="";
target="http://10.66.71.143:8080/AndroidTest/index.jsp"; //重点这个是服务器的ip地址
URL url;
try {
url=new URL(target); //创建url对象
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
//创建一个http连接对象。
urlConn.setRequestMethod("POST");
urlConn.setDoInput(true); //从连接中写入数据
urlConn.setDoOutput(true); //从连接中读取数据
urlConn.setUseCaches(false); //禁止缓存
urlConn.setInstanceFollowRedirects(true);
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
DataOutputStream out=new DataOutputStream(urlConn.getOutputStream());
//连接要提交的数据
String param="nickname="+URLEncoder.encode(nickname.getText().toString(),"utf-8")
+"&content="+URLEncoder.encode(content.getText().toString(),"utf-8");
//将要传递的数据写入数据流中
out.writeBytes(param);
out.flush();
out.close();
// 判断是否响应成功
if(urlConn.getResponseCode()==HttpURLConnection.HTTP_OK)
{
InputStreamReader in=new InputStreamReader(urlConn.getInputStream());
BufferedReader buffer=new BufferedReader(in);
String inputLine=null;
while((inputLine=buffer.readLine())!=null)
{
result+=inputLine+"\n";
}
in.close(); //字符输入流
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
第四步:编写web应用,也就是服务端。接收应用程序发送过来的数据,然后反馈给应用程序
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.sun.org.apache.xerces.internal.impl.dv.util.Base64"%>
<%@page import="sun.misc.BASE64Decoder"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
String content=request.getParameter("content");
//System.out.println(content);
String nickname=request.getParameter("nickname");
if(content!=null&&nickname!=null)
{
nickname=new String(nickname.getBytes("iso-8859-1"),"utf-8");
content=new String(content.getBytes("iso-8859-1"),"utf-8");
String date=new java.util.Date().toLocaleString();
System.out.println(content+" "+nickname);
}
// if(request.getParameter("content")!=null)
//{
//content=request.getParameter("contenr");
// System.out.print("111"+content);
// content=content.replaceAll("%2B","+");
// BASE64Decoder decoder=new BASE64Decoder();
// content=new String(decoder.decodeBuffer(content,"utf-8"));
//}
%>
<%= content%>>+++++<%= nickname%>+++++
</body>
</html>
这是一个简单的jsp页面。