记录下最近研究的关于如何在Android 应用程序和服务器之间通信的方法。
环境:
1.应用服务器Tomcat http://tomcat.apache.org
2.客户端 HttpClient http://hc.apache.org/httpcomponents-client-ga/index.html
3.GSON http://code.google.com/p/google-gson/
/**
* Example servlet showing how to exchange JSON obj between servlet and HttpClient
*
* @author sureone@yeah.net
*/
/* The data Object sent over Server and Client */
public class Login{
public int mCode=0;
public String mResult=null;
public String mAcc=null;
public String mPwd=null;
public Login(String acc,String pwd){
mAcc = acc;
mPwd = pwd;
}
};
/* Servlet Code */
import java.io.*;
import com.google.gson.Gson;
import com.wcare.object.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.ResourceBundle;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WCS extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final ResourceBundle RB = ResourceBundle.getBundle("LocalStrings");
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
getServletContext().log("doGet");
}
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
getServletContext().log("doPost");
StringBuffer jb = new StringBuffer();
String line = null;
Gson gson = new Gson();
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) { e.printStackTrace(); }
Login objLogin = (Login)(gson.fromJson(jb.toString(),Login.class));
getServletContext().log("doPost:"+objLogin.mAcc+","+objLogin.mPwd);
objLogin.mCode=200;
objLogin.mResult="Success";
response.setContentType("application/json");
// Get the printwriter object from response to write the required json object to the output stream
PrintWriter out = response.getWriter();
out.print(gson.toJson(objLogin));
out.flush();
}
}
/* Client Code */
import java.io.*;
import java.net.Socket;
import com.google.gson.Gson;
import org.apache.http.entity.StringEntity;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ResponseHandler;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.HttpClient;
import org.apache.http.message.BasicHeader;
public class Main{
public static final String URL="http://127.0.0.1:8080/examples/wcs";
public static void main(String[] args) throws Exception {
new Main().doTest();
}
public void doTest(){
Login objLogin= new Login("Li","123");
Gson gson = new Gson();
String json = gson.toJson(objLogin);
System.out.println(json);
int i=0;
do{
PostThread t = new PostThread(json,URL);
new Thread(t).start();
i++;
}while(i<100);
}
public static void doPost(String url, String sjson) throws Exception
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
HttpEntity entity;
Gson gson = new Gson();
StringEntity s = new StringEntity(sjson);
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity = s;
request.setEntity(entity);
ResponseHandler<String> responseHandler=new BasicResponseHandler();
String responseBody = httpclient.execute(request, responseHandler);
System.out.println(responseBody);
Login objLogin = gson.fromJson(responseBody,Login.class);
System.out.println("RESPONSE:"+objLogin.mCode+","+objLogin.mResult);
//JSONObject response=new JSONObject(responseBody);
}
class PostThread implements Runnable {
String sjson;
String url;
public PostThread(String s,String u) { sjson=s;url=u;}
public void run() { // thread dies when finished
try{
doPost(url,sjson);
}catch(Exception e){e.printStackTrace();}
}
}
}