Android 对其访问进行封装
服务端
packagecom.server;importjava.io.PrintWriter;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.json.JSONObject;public class LoginServer extends HttpServlet implementsjava.io.Serializable{/****/
private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse res){
String user= request.getParameter("user"); //获取服务端数据
String pass= request.getParameter("pass");
System.out.println(user+pass);//业务逻辑
try{//中文乱码解决
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回Json数据
JSONObject jsonObj= new JSONObject().put("userId" , 1);
pw.println(jsonObj.toString());
}catch(Exception ex){
ex.printStackTrace();
}
}public voiddoPost(HttpServletRequest req, HttpServletResponse res){this.doGet(req, res);
}
}
web.xml
LoginServer
com.server.LoginServer
LoginServer
/login
客户端通过Json获取服务端数据
/****/
packageorg.crazyit.auction.client.util;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.concurrent.Callable;importjava.util.concurrent.FutureTask;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.HttpClient;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;/*** Description:
*
网站: 疯狂ava联盟
*
Copyright (C), 2001-2014, Yeeku.H.Lee
*
This program is protected by copyright laws.
*
Program Name:
*
Date:
*@authorYeeku.H.Lee kongyeeku@163.com
*@version1.0*/
public classHttpUtil
{//创建HttpClient对象
public static HttpClient httpClient = newDefaultHttpClient();/***
*@paramurl 发送请求的URL
*@return服务器响应字符串
*@throwsException*/
public static String getRequest(finalString url)throwsException
{
FutureTask task = new FutureTask(new Callable()
{
@Overridepublic String call() throwsException
{//创建HttpGet对象。
HttpGet get = newHttpGet(url);//发送GET请求
HttpResponse httpResponse =httpClient.execute(get);//如果服务器成功地返回响应
if(httpResponse.getStatusLine()
.getStatusCode()== 200)
{//获取服务器响应字符串
String result =EntityUtils
.toString(httpResponse.getEntity());returnresult;
}return null;
}
});newThread(task).start();returntask.get();
}/***@paramurl 发送请求的URL
*@paramparams 请求参数
*@return服务器响应字符串
*@throwsException*/
public static String postRequest(finalString url
,final Map rawParams)throwsException
{
FutureTask task = new FutureTask(new Callable()
{
@Overridepublic String call() throwsException
{//创建HttpPost对象。
HttpPost post = newHttpPost(url);//如果传递参数个数比较多的话可以对传递的参数进行封装
List params =
new ArrayList();for(String key : rawParams.keySet())
{//封装请求参数
params.add(newBasicNameValuePair(key
, rawParams.get(key)));
}//设置请求参数
post.setEntity(newUrlEncodedFormEntity(
params,"gbk"));//发送POST请求
HttpResponse httpResponse =httpClient.execute(post);//如果服务器成功地返回响应
if(httpResponse.getStatusLine()
.getStatusCode()== 200)
{//获取服务器响应字符串
String result =EntityUtils
.toString(httpResponse.getEntity());returnresult;
}return null;
}
});newThread(task).start();returntask.get();
}
}
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
(1)Callable规定的方法是call(),而Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。
(3)call()方法可抛出异常,而run()方法是不能抛出异常的。
(4)运行Callable任务可拿到一个Future对象,
Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。
测试
public classtest {public static voidmain(String []main){
Map map = new HashMap();
map.put("user", "user");
map.put("pass", "pass");//定义发送请求的URL
String url = "http://localhost:8080/HttpServletServer/login";//发送请求
try{
System.out.println(HttpUtil.postRequest(url, map));
}catch(Exception e) {//TODO Auto-generated catch block
e.printStackTrace();
};
}
}
引用的包的下载地址 :http://download.csdn.net/download/huhuan19890427/6608621