Android客户端与服务器端(struts2)通信

来源:互联网 发布:什么是店铺淘宝客 编辑:程序博客网 时间:2024/05/01 19:20

Android客户端向服务器端(struts2框架)发送get或post请求(http),服务器端以json格式返回数据,android客户端解析json数据。

一.服务器端

1.        jar包

struts相关jar包以及:
json-lib-2.3-jdk15.jar
struts2-json-plugin-2.3.4.jar

2.        struts配置文件

  •  extends="json-default"
  •  <result name="success"type="json">
  •   <param name="includeProperties"> user\.userNo,user\.userName,user\.userKey,userlist\[\d+\]\.userNo,userlist\[\d+\]\.userKey </param>

user为Action类中定义的UserInfo类型对象,userNo、userName、userKey为UserInfo类型对象的属性,userList为List<UserInfo>类型的对象。在Action对应的类中应有user和userList的get和set方法。

<package name="android" extends="json-default" ><action name="logina" class="com.cpm.controler.LoginAction"method="login_a"><result name="success" type="json"><param name="includeProperties">user\.userNo,user\.userName,user\.userKey,userlist\[\d+\]\.userNo,userlist\[\d+\]\.userKey</param></result></action></package>

3. Action对应的类

继承自ActionSupport,提供与struts.xml对应的action方法,在该类中定义UserInfo user和List<UserInfo> userList,并为其生成相应的get和set方法。

public class LoginAction extends ActionSupport {private UserInfo user;private List<UserInfo> userlist;public List<UserInfo> getUserlist() {return userlist;}public void setUserlist(List<UserInfo> userlist) {this.userlist = userlist;}public UserInfo getUser() {return user;}public void setUser(UserInfo user) {this.user = user;}public String login_a() { HttpServletRequest request = ServletActionContext.getRequest();String uno = request.getParameter("name");String key = request.getParameter("key");LoginService ls = new LoginService();user = ls.getUser(uno);userlist = ls.getUserList();if (user.getUserNo().equals(uno)&& user.getUserKey().equals(key)) {return "success";} elsereturn "input";}}

4.      参数接收

使用ServletActionContext.getRequest()获取HttpServletRequest;再使用HttpServletRequestgetParameter("key")方法获取参数。


5.      数据返回格式

{"user":{"userKey":"123","userName":"张三"","userNo":"zhangsan"},

"userlist":[{"userKey":"123","userNo":"zhangsan"},{"userKey":"123","userNo":"lisi"}]}


二.Android客户端

1.      AndroidManifest.xml中配置网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>

2.      网络访问不能在主线程中进行,需要新开一个线程,当网络访问结束后向Handler发送消息:

Handler定义:

Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1://............break;case 2://............break;}}};

消息发送:

Message msg = mHandler.obtainMessage(1);mHandler.sendMessage(msg);


3.      以get方式发出请求

HttpGet request = new HttpGet(path);HttpClient client = new DefaultHttpClient();HttpResponse response = client.execute(request);


4.      以post方式发出请求

HttpPost request = new HttpPost(path);HttpClient client = new DefaultHttpClient();HttpEntity entity = new UrlEncodedFormEntity(params,"UTF-8");request.setEntity(entity);HttpResponse response =client.execute(request);

params的构建:

List<NameValuePair> params = newArrayList<NameValuePair>();params.add(new BasicNameValuePair("userno", "zhangsan"));


5.      JSON数据解析

HttpEntity entity1 = response.getEntity();String resource = EntityUtils.toString(entity1);JSONObject object = new JSONObject(resource);JSONObject ob = object.getJSONObject("user");//获取userob .getString("userName ");//获取userNameJSONArray array = object.getJSONArray("userlist ");//获取userlistarray.getJSONObject(i);//获取list中的JSONObject,i为int型


0 0
原创粉丝点击