使用Struts2服务端与android交互
转自:http://www.cnblogs.com/android-html5/archive/2011/09/25/2534107.html
android--使用Struts2服务端与android交互
一,服务器端:
首先搭建struts2的环境,导入必要的类库。
web.xml文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
struts.xml文件:
- <?xml version="1.0" encoding="GBK"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="testjson" <span style="color:#ff0000;">extends="json-default"</span>>
- <action name="getjson" class="com.shao.action.JSONAction" method="json">
- <result type="json"></result>
- </action>
- </package>
- </struts>
Action类:
- package com.shao.action;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import org.apache.struts2.interceptor.ServletResponseAware;
- import com.google.gson.Gson;
- import com.opensymphony.xwork2.ActionSupport;
- import com.shao.domain.Music;
- public class JSONAction extends ActionSupport implements ServletRequestAware,
- ServletResponseAware {
- /**
- *
- */
- private static final long serialVersionUID = -3604892179657815531L;
- private HttpServletRequest request;
- private HttpServletResponse response;
- private String format;
- public String getFormat() {
- return format;
- }
- public void setFormat(String format) {
- this.format = format;
- }
- @Override
- public void setServletRequest(HttpServletRequest request) {
- // TODO Auto-generated method stub
- this.request = request;
- }
- @Override
- public void setServletResponse(HttpServletResponse response) {
- // TODO Auto-generated method stub
- this.response = response;
- }
- public void json(){
- List<Music> list = new ArrayList<Music>();
- // JsonArray jsonArray = new JsonArray();
- // JsonObject jsonObject = new JsonObject();
- Gson gson = new Gson();
- Music m1 = new Music();
- m1.setId(1);
- m1.setAuthor("游鸿明");
- m1.setName("白色恋人");
- m1.setTime("04:01");
- list.add(m1);
- Music m2 = new Music();
- m2.setId(2);
- m2.setAuthor("陈奕迅");
- m2.setName("淘汰");
- m2.setTime("04:44");
- list.add(m2);
- Music m3 = new Music();
- m3.setId(3);
- m3.setAuthor("谢霆锋");
- m3.setName("黄种人");
- m3.setTime("04:24");
- list.add(m3);
- java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<Music>>() {
- }.getType();
- String beanListToJson = gson.toJson(list,type);
- System.out.println("GSON-->"+beanListToJson);
- try {
- response.setCharacterEncoding("GBK");
- //response.setContentType("text/xml;charset=utf-8");
- this.response.getWriter().write(beanListToJson);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
这个Music实体类,android客户端也用到。
- package com.shao.domain;
- public class Music {
- private Integer id;
- private String name;
- private String time;
- private String author;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getTime() {
- return time;
- }
- public void setTime(String time) {
- this.time = time;
- }
- public String getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- }
访问 http://localhost:8080/Client/getjson.action;结果:
二,android客户端:
Activity类:
- package com.shao.main;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- public class JsonClientActivity extends Activity {
- /** Called when the activity is first created. */
- private Button update;
- private ListView listView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- update = (Button) findViewById(R.id.update);
- listView = (ListView) findViewById(R.id.list);
- update.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- String urlStr="http://10.0.2.2:8080/Client/getjson.action";
- String result = GsonUtil.getJson(urlStr);
- List<Music> list = GsonUtil.getListFromJson(result);
- List<Map<String,Object>> data = getAdapterData(list);
- SimpleAdapter adapter =new SimpleAdapter(JsonClientActivity.this, data, R.layout.list, new String[]{"name","author","time"}, new int[]{R.id.name,R.id.author,R.id.time});
- listView.setAdapter(adapter);
- //listView.
- }
- });
- }
- private List<Map<String,Object>> getAdapterData(List list){
- List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
- for(int i=0;i<list.size();i++){
- Map<String,Object> map = new HashMap<String, Object>();
- Music music= (Music)list.get(i);
- map.put("name",music.getName());
- map.put("author", music.getAuthor());
- map.put("time",music.getTime());
- data.add(map);
- }
- return data;
- }
- }
- package com.shao.main;
- import java.net.URI;
- import java.util.List;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.util.EntityUtils;
- import com.google.gson.Gson;
- public class GsonUtil {
- public static String getJson(String url){
- HttpClient client = new DefaultHttpClient();
- HttpPost request;
- try {
- request = new HttpPost(new URI(url));
- HttpResponse response = client.execute(request);
- // 判断请求是否成功
- if (response.getStatusLine().getStatusCode() == 200) { //200表示请求成功
- HttpEntity entity = response.getEntity();
- if(entity!=null){
- String beanListToJson = EntityUtils.toString(entity,"GBK");
- return beanListToJson;
- }
- }
- } catch (Exception e) {
- // TODO: handle exception
- }
- return null;
- }
- public static List<Music> getListFromJson(String json){
- java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<Music>>() {
- }.getType();
- Gson gson = new Gson();
- List<Music> list = gson.fromJson(json, type);
- return list;
- }
- }
list.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:id="@+id/name"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="name"
- />
- <TextView
- android:id="@+id/author"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/name"
- android:paddingTop="5px"
- android:text="author"
- >
- </TextView>
- <TextView
- android:id="@+id/time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/name"
- android:layout_alignTop="@id/author"
- android:layout_alignParentRight="true"
- android:text="time">
- </TextView>
- </RelativeLayout>
运行结果:
主要的交互都是通过goolge的Gson完成
使用Struts2服务端与android交互的更多相关文章
- android--使用Struts2服务端与android交互
一,服务器端: web.xml文件: <?xml version="1.0" encoding="UTF-8"?> <web-app vers ...
- Android客户端与PC服务端、android服务端通过WiFi通信
前期准备:我的是Linux Mint操作系统(总之折腾的过程中怀疑过是不是系统的问题),首先是要创建wifi热点给android手机使用,这个时候笔记本作为通信的服务器端,android手机作为客户端 ...
- MQTT协议学习及实践(Linux服务端,Android客户端的例子)
前言 MQTT(Message Queuing Telemetry Transport),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提 ...
- [PHP]AES加密----PHP服务端和Android客户端
本文采取128位AES-CBC模式加密和解密 1.首先对服务端安装mcrypt: sudo apt-get install php5-mcrypt php5-dev sudo php5enmod mc ...
- 完整版本的停车场管理系统源代码带服务端+手机android客户端
该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1 机构管理 ,机构有从属管理< ...
- js与C#服务端 json数据交互
1.1 服务端返回给前端 返回的数据都放入对象中(根据需求:单个对象,集合,键值对),然后JSON序列化返回给前端.这里可以引用JSON.NET 库,也可以用.NET自带的类库: JavaScript ...
- Java网络编程(TCP协议-服务端和客户端交互)
客户端: package WebProgramingDemo; import java.io.IOException; import java.io.InputStream; import java. ...
- 大家帮我测试下,IOCP服务端和客户端交互
大家帮我测试下,主要是对游戏服务端的测试,这个客户端C#版本,需要NET4.0支持
- #Eureka 客户端和服务端间的交互
Eureka 服务器客户端相关配置 1.建立eureka服务器 只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka ...
随机推荐
- Python 3.6安装教程
0x01 安装Python 1.1 说明 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的. 本教程安装的是python-3.6.1-amd64版本. Python官 ...
- 【LOJ】 #2130. 「NOI2015」软件包管理器
题解 连树剖我都写跪一次,我现在怎么那么老年啊= = 简直滚粗预定了啊.. 我们线段树维护树剖只需要资瓷区间覆盖和区间求和就好了 安装的时候看看自己到根有多少包装了,dep减去这个数量就好 卸载的时候 ...
- 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂
链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...
- mybatis基础之一
SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
- Python并发编程-一个简单的多进程实例
import time from multiprocessing import Process import os def func(args,args2): #传递参数到进程 print(args, ...
- BeautifulSoup解析库
解析库 解析器 使用方法 优势 劣势 Python标准库 BeautifulSoup(html, 'html.parser') 速度适中,容错能力强 老版本python容错能力差 lxml HTML解 ...
- Python协程(上)
几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...
- Redis学习篇(一)之String类型及其操作
SET 作用: 设置key对应的值, 返回ok 语法: SET key value [EX seconds] [PX milliseconds] [NX] [XX] 如果key已经存在,同名会产生覆盖 ...
- 【BZOJ 4361】 4361: isn (DP+树状数组+容斥)
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 218 Solved: 126 Description 给出一个长度为n的序列A( ...
- BZOJ1552/3506 [Cerc2007]robotic sort
Splay 与之前不同的是如果你仅仅是翻转左右区间的话可以在find里面做因为对他有影响的子树在做之前一定在他的上面从上到下搜索的过程可以把rever做了. 但这道题要求我们输出转换之前的,因此不能保 ...