Android与Struts2简单json通信
具体要求是:
服务器端得到客户端传递来的数据,并返回给客户端一条json格式的字符串
闲话不多说,直接上代码
首先是服务器端代码:建立一个web工程,导入struts2和json的jar包,并在web.xml中引入struts2

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>StrutsForAndroid</display-name>
<!-- 配置过滤器(即在web中添加struts2) -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 配置后缀 <init-param> <param-name>struts.action.extension</param-name>
<param-value>do,html</param-value> </init-param> -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
web.xml
然后就是java代码啦

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="androidService" namespace="/androidService"
extends="struts-default">
<action name="getMessage" class="com.wzy.andriod.actions.AndroidService"
method="getMsg">
<result></result>
</action>
</package>
<package name="androidJsonService" namespace="/androidJsonService"
extends="struts-default">
<action name="*" class="com.wzy.andriod.actions.AndroidService" method="{1}">
<result ></result>
</action>
</package>
</struts>
androidService.xml
package com.wzy.andriod.actions;
import java.io.PrintWriter;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class AndroidService extends SuperAction {
private static final long serialVersionUID = 1L;
public void getMsg() {
System.out.println("开始-->");
try {
String name = request.getParameter("name");
System.out.println(name);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("get到了");
} catch (Exception e) {
e.printStackTrace();
}
}
public void getJson() {
// http://localhost:8080/StrutsForAndroid/androidJsonService/getJson
System.out.println("getJson开始-->");
try {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String passwd = request.getParameter("passwd");
System.out.println("-->"+name);
System.out.println("-->"+passwd);
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", 1);
jsonObject.put("name", "小明");
jsonObject.put("age", 23);
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("id", 2);
jsonObject1.put("name", "小红");
jsonObject1.put("age", 12);
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("id", 3);
jsonObject2.put("name", "Jack");
jsonObject2.put("age", 100);
jsonArray.add(0, jsonObject);
jsonArray.add(1, jsonObject1);
jsonArray.add(2, jsonObject2);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
// System.out.println(jsonArray.toString());
writer.print(jsonArray.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
AndroidService.java
package com.wzy.andriod.actions;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
//所有的action动作的父类
public class SuperAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware, ServletContextAware {
private static final long serialVersionUID = 1L;
/*serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。*/
protected HttpServletRequest request;
protected HttpServletResponse response;
protected ServletContext application;
protected HttpSession session;
@Override
public void setServletContext(ServletContext application) {
this.application = application;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = this.request.getSession();
}
}
SuperAction.java
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
</package>
<include file="com/struts2/files/androidService.xml"></include>
</struts>
struts.xml
开启tomcat服务器后,通过浏览器访问是如下效果

后台打印结果

以上就是服务端代码部署情况,接下来是安卓客户端代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.strutsclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.strutsclient.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
AndroidManifest.xml
layout中建立一个用户登录界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:text="123">
</EditText>
<EditText
android:id="@+id/passwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="123"
android:ems="10" />
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定" />
</LinearLayout>
userlogin.xml
然后就是java代码啦
package com.example.strutsclient;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import android.util.Log;
public class HttpDownloader {
public String download(String urlStr) {
StringBuffer sb = new StringBuffer();
String line = null;
BufferedReader buffer = null;
try {
URL url = new URL(urlStr);// 创建url对象
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection();// 创建http链接
Log.i("---->", "----11----");
InputStream stream = urlConn.getInputStream();
Log.i("---->", "----22----");
buffer = new BufferedReader(new InputStreamReader(stream));// io流
Log.i("---->", "----33----");
while ((line = buffer.readLine()) != null) {
sb.append(line);
}
} catch (Exception e) {
Log.i("---->", e.toString());
e.printStackTrace();
return "wrong";
} finally {
try {
buffer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
HttpDownloader.java
package com.example.strutsclient;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@SuppressLint("NewApi")
public class MainActivity extends Activity {
EditText name;
EditText passwd;
Button login;
String sname;
String spasswd;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.userlogin);
// 防止android.os.NetworkOnMainThreadException,可使用异步加载或者加入以下代码
// 因为访问网络会消耗很长时间,安卓会认为死机了,所有出现异常
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
.penaltyLog().penaltyDeath().build());
this.name = (EditText) super.findViewById(R.id.name);
this.passwd = (EditText) super.findViewById(R.id.passwd);
this.login = (Button) super.findViewById(R.id.login);
// Toast.makeText(this, name.getText(), Toast.LENGTH_SHORT).show();
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
sname = name.getText().toString();
spasswd = passwd.getText().toString();
HttpDownloader downloader = new HttpDownloader();
String url = "http://172.22.0.1:8080/StrutsForAndroid/androidJsonService/getJson?name="
+ sname + "&passwd=" + spasswd;
String msg = downloader.download(url);
// Toast.makeText(this, url, Toast.LENGTH_SHORT).show();
login.setText(msg);
}
});
}
}
MainActivity.java
response发送不同类型的数据:
public static void writeJson(HttpServletResponse response, String text) {
render(response, "application/json;charset=UTF-8", text);
}
public static void writeXml(HttpServletResponse response, String text) {
render(response, "text/xml;charset=UTF-8", text);
}
public static void writeText(HttpServletResponse response, String text) {
render(response, "text/plain;charset=UTF-8", text);
}
public static void render(HttpServletResponse response, String contentType,
String text) {
response.setContentType(contentType);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
response.getWriter().write(text);
} catch (IOException e) {
//log.error(e.getMessage(), e);
}
}
Android与Struts2简单json通信的更多相关文章
- struts2 + jquery + json 简单的前后台信息交互
ajax 是一种客户端与服务器端异步请求的交互技术.相比同步请求,大大提高了信息交互的速度和效率.是当下非常实用和流行的技术. 这里简单的说明 struts2 + jquery + json 下的 信 ...
- 深入了解Struts2返回JSON数据的原理
首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...
- (转)Struts2返回JSON数据的具体应用范例
转载自 yshjava的个人博客主页 <Struts2返回JSON数据的具体应用范例> 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...
- Struts2返回JSON数据的具体应用范例
早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找 ...
- Struts2返回JSON数据的具体应用范…
Struts2返回JSON数据的具体应用范例 博客分类: Struts2 Struts2JSON 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...
- 【转】Struts2中json插件的使用
配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承js ...
- struts2 + ajax + json的结合使用,实例讲解
struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4 ...
- (转)Struts2返回JSON对象的方法总结
转自:http://kingxss.iteye.com/blog/1622455 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选 ...
- Android BLE开发——Android手机与BLE终端通信初识
蓝牙BLE官方Demo下载地址: http://download.csdn.net/detail/lqw770737185/8116019参考博客地址: http://www.eoeandr ...
随机推荐
- ibatis 和 mybatis
ibatis 在daoImpl 层 继承 SqlMapClientDaoSupport 实现 dao 层的接口. this.getSqlMapClientTemplate().queryForObj ...
- web前端--边框的特征
1.一个面试题:边框是什么形状的? 你可能认为是一个矩形的 细心地人可能说是 梯形 或者 三角形 比较合理的答案是 非矩形的 2.画三角形 将div的width height 都设置为0px bo ...
- hibernate理解
SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,基于持久层的框架(数据访问层使用)! Spring,创建对象处理对象的依赖关系以及框架整合! Dao代码,如何编 ...
- Spring(二)__bean的装配
Bean的装配: 在spring容器内拼凑bean叫做装配.装 配bean的时候,需要告诉容器哪些bean 以及容器如何使用依赖注入将它们配合在一起. 上下文定义文件的根元素是<beans> ...
- inline-block 空白间距问题
一. 问题 元素是inline-block属性时,会有空白间隙 二. 解决方案 1. html方式 1)将元素之间的空隙去除 <div class="space"> & ...
- python操作SQL
pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同 一.下载安装 pip3 install pymysql 二.操作使用 1.执行SQL #!/usr ...
- centos 更换软件源
最近都在使用国内的VPS.系统统一使用的都是Linux系统.但是,有一些服务商的系统给默认设置的是国外的.这样就会导致下载速度缓慢.于是,找到了国内几家比较热门的镜像点.奉献给大家.下面的镜像全部支持 ...
- tabbarItem字体及图片颜色设置
tabbarItem设置图片后运行往往与我们原始图片颜色有出入,这是因为在默认情况下,未选中状态图片和字体颜色为灰色,选中状态下图片和字体颜色为蓝色. UIImage 在呈现(render)时会选 ...
- iframe大小自适应
前几天,舍友去某互联网公司面前端研发工程师.回来后,他就跟我们聊了下面试官给他出的题.其中,有一道题是“如何实现iframe高度的自适应?”.好吧,我承认,我听到iframe这个词的第一反应就是:这个 ...
- MS SQL 错误 :17883,严重度: 1,状态: 0
公司一台老旧的SQL SERVER 2000 数据库,一周内会出现若干次(一次或多次)CPU 持续100%,导致应用程序没有反应的情况,如下图所示: 错误信息如下所示: 日期 2013/7/12 2: ...