java servlet json_Java HttpServlet Json 数据交互

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

在 Android Studio 中搭建服务器需要进行以下步骤: 1. 创建一个新的 Java 项目,在项目中创建一个 Servlet 类。 2. 在 Servlet 类中实现对客户端请求的响应。 3. 在 Android 工程中创建一个 AsyncTask 类用来与服务器进行通信。 4. 在 AsyncTask 类中实现网络通信的逻辑,包括连接服务器、发送请求、接收响应等。 5. 在 Android 应用中调用 AsyncTask 类来进行与服务器的通信。 具体步骤如下: 1. 在 Android Studio 中创建一个新项目。 2. 在项目中创建一个 Java 项目,选择 Web Application 项目类型。 3. 在项目中创建一个 Servlet 类,实现对客户端请求的响应。例如: ``` @WebServlet("/hello") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello Servlet</h1>"); out.println("</body>"); out.println("</html>"); } } ``` 4. 在 Android 工程中创建一个 AsyncTask 类,用来与服务器进行通信。例如: ``` public class HttpTask extends AsyncTask<String, Void, String> { private String url; private Map<String, String> params; private OnCompleteListener listener; public HttpTask(String url, Map<String, String> params) { this.url = url; this.params = params; } public void setCompleteListener(OnCompleteListener listener) { this.listener = listener; } @Override protected String doInBackground(String... strings) { try { // 连接服务器 URL url = new URL(this.url); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); conn.setDoInput(true); // 发送请求 OutputStream os = conn.getOutputStream(); String data = ""; for (String key : params.keySet()) { data += "&" + key + "=" + params.get(key); } os.write(data.substring(1).getBytes()); os.flush(); os.close(); // 接收响应 InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); is.close(); conn.disconnect(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { if (listener != null) { listener.onComplete(s); } } public interface OnCompleteListener { void onComplete(String result); } } ``` 5. 在 Android 应用中调用 AsyncTask 类来进行与服务器的通信。例如: ``` Map<String, String> params = new HashMap<>(); params.put("name", "张三"); params.put("age", "18"); HttpTask httpTask = new HttpTask("http://localhost:8080/hello", params); httpTask.setCompleteListener(new HttpTask.OnCompleteListener() { @Override public void onComplete(String result) { // 处理服务器返回的结果 Log.d("HttpTask", result); } }); httpTask.execute(); ``` 需要注意的是,如果要在 Android 应用中访问 localhost 上的服务器,需要在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 以上就是在 Android Studio 中搭建服务器的简单步骤,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值