`
wen742538485
  • 浏览: 238915 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android+struts2+JSON方式的手机开发

阅读更多
http://topmanopensource.iteye.com/blog/1290487
在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现。本文实现Android+Struts2+JSON方式实现为手机前台提供服务。

涉及的知识点:

  1.Struts2框架的搭建(包括Struts2的jSON插件)

  2.Android前台访问Web采用HttpClient方式。

  3.Android采用JSON的解析。



功能:模拟远程登录流程:



手机后台服务:由于采用Struts2的JSON响应格式,响应详细会自动转变为JSON格式,故直接输出即可。

Java代码 
package com.easyway.json.android;  
 
import java.util.HashMap;  
import java.util.Map;  
 
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
 
import org.apache.struts2.interceptor.ServletRequestAware;  
import org.apache.struts2.interceptor.ServletResponseAware;  
 
import com.opensymphony.xwork2.ActionSupport;  
 
/** 
* 在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据, 
* 那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 
*一:基于Http协议获取数据方法。 
*二:基于SAOP协议获取数据方法, 
*那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据, 
*这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。 
*那么,接下来我们便开始这一路程: 
*首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目, 
*技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。 
*服务器端:新建WebProject ,选择Java ee 5.0. 
*为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去): 
*xwork-core-2.2.1.1.jar  struts2-core-2.2.1.1.jar commons-logging-1.0.4.jar  freemarker-2.3.16.jar 
*ognl-3.0.jar  javassist-3.7.ga.jar commons-ileupload.jar commons-io.jar json-lib-2.1-jdk15.jar   
*处理JSON格式数据要使用到 struts2-json-plugin-2.2.1.1.jar    
* 基于struts2的json插件. 
*  
*  
* 采用接口注入的方式注入HttpServletRequest,HttpServletResponse对象 
*  
* @author longgangbai 

*/ 
public class LoginAction extends ActionSupport implements ServletRequestAware,  
        ServletResponseAware {  
    /** * */ 
    private static final long serialVersionUID = 1L;  
 
    HttpServletRequest request;  
 
    HttpServletResponse response;  
      
    private String userName;  
    private String password;  
      
 
    public String getPassword() {  
        return password;  
    }  
 
    public void setPassword(String password) {  
        this.password = password;  
    }  
 
    public String getUserName() {  
        return userName;  
    }  
 
    public void setUserName(String userName) {  
        this.userName = userName;  
    }  
 
    public void setServletRequest(HttpServletRequest request) {  
        this.request = request;  
    }  
 
    public void setServletResponse(HttpServletResponse response) {  
        this.response = response;  
    }  
      
    /** 
     * 模拟用户登录的业务 
     */ 
    public void login() {  
        try {  
              //如果不采用接口注入的方式的获取HttpServletRequest,HttpServletResponse的方式  
              // HttpServletRequest request =ServletActionContext.getRequest();  
              // HttpServletResponse response=ServletActionContext.getResponse();  
              
               this.response.setContentType("text/json;charset=utf-8");  
               this.response.setCharacterEncoding("UTF-8");  
               //JSONObject json=new JSONObject();   
                Map<String,String> <SPAN style="COLOR: #ff0000">json</SPAN>=new HashMap<String,String>();  
                if ("admin".equals(userName)&&"123456".equals(password)) {  
                     json.put("message", "欢迎管理员登陆");  
                } else if ((!"admin".equals(userName))&&"123456".equals(password)) {  
                    json.put("message", "欢迎"+userName+"登陆!");  
                } else {  
                    json.put("message", "非法登陆信息!");  
                }  
              byte[] jsonBytes = json.toString().getBytes("utf-8");  
              response.setContentLength(jsonBytes.length);  
              response.getOutputStream().write(jsonBytes);  
              response.getOutputStream().flush();  
              response.getOutputStream().close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  


package com.easyway.json.android;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;

/**
* 在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,
* 那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有
*一:基于Http协议获取数据方法。
*二:基于SAOP协议获取数据方法,
*那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,
*这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。
*那么,接下来我们便开始这一路程:
*首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,
*技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。
*服务器端:新建WebProject ,选择Java ee 5.0.
*为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):
*xwork-core-2.2.1.1.jar  struts2-core-2.2.1.1.jar commons-logging-1.0.4.jar  freemarker-2.3.16.jar
*ognl-3.0.jar  javassist-3.7.ga.jar commons-ileupload.jar commons-io.jar json-lib-2.1-jdk15.jar 
*处理JSON格式数据要使用到 struts2-json-plugin-2.2.1.1.jar  
* 基于struts2的json插件.
*
*
* 采用接口注入的方式注入HttpServletRequest,HttpServletResponse对象
*
* @author longgangbai
*
*/
public class LoginAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
/** * */
private static final long serialVersionUID = 1L;

HttpServletRequest request;

HttpServletResponse response;

private String userName;
private String password;


public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
   
/**
* 模拟用户登录的业务
*/
public void login() {
try {
              //如果不采用接口注入的方式的获取HttpServletRequest,HttpServletResponse的方式
  // HttpServletRequest request =ServletActionContext.getRequest();
  // HttpServletResponse response=ServletActionContext.getResponse();

   this.response.setContentType("text/json;charset=utf-8");
   this.response.setCharacterEncoding("UTF-8");
   //JSONObject json=new JSONObject();
    Map<String,String> json=new HashMap<String,String>();
if ("admin".equals(userName)&&"123456".equals(password)) {
json.put("message", "欢迎管理员登陆");
} else if ((!"admin".equals(userName))&&"123456".equals(password)) {
json.put("message", "欢迎"+userName+"登陆!");
} else {
json.put("message", "非法登陆信息!");
}
  byte[] jsonBytes = json.toString().getBytes("utf-8");
  response.setContentLength(jsonBytes.length);
  response.getOutputStream().write(jsonBytes);
  response.getOutputStream().flush();
  response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
}
}



struts.xml

Java代码 
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">  
<struts>  
<!-- setting encoding,DynamicMethod,language        
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>    -->  
    <constant name="struts.i18n.encoding" value="UTF-8"/>  
    <constant name="struts.enable.DynamicMethodInvocation"  value="true"/>  
    <!-- add package here extends="struts-default"-->  
    <package name="default" extends="json-default"><!--需要将struts-default改为-->  
        <action name="login" class="com.easyway.json.android.LoginAction" 
            method="login">  
            <SPAN style="COLOR: #ff0000"><result type="json"/></SPAN>  
            <!--返回值类型设置为json,不设置返回页面-->  
        </action>  
    </package>  
</struts> 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- setting encoding,DynamicMethod,language     
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>    -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.enable.DynamicMethodInvocation"  value="true"/>
<!-- add package here extends="struts-default"-->
<package name="default" extends="json-default"><!--需要将struts-default改为-->
<action name="login" class="com.easyway.json.android.LoginAction"
method="login">
<result type="json"/>
<!--返回值类型设置为json,不设置返回页面-->
</action>
</package>
</struts> web.xml

Java代码 
<?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">  
    <!-- 定义Struts2的核心控制器:FilterDispatcher -->  
    <filter>  
        <!-- 定义核心Filter的名称 -->  
        <filter-name>struts2</filter-name>  
        <!-- 定义Filter的实现类 -->  
        <filter-class>  
            org.apache.struts2.dispatcher.FilterDispatcher  
        </filter-class>  
    </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> 

<?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">
<!-- 定义Struts2的核心控制器:FilterDispatcher -->
<filter>
<!-- 定义核心Filter的名称 -->
<filter-name>struts2</filter-name>
<!-- 定义Filter的实现类 -->
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</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>jsp测试页面:

Html代码 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Ajax调用web服务</title> 
<script type="text/javascript"> 
var xmlHttpReq;    //用于保存XMLHttpRequest对象的全局变量  
 
//用于创建XMLHttpRequest对象  
function createXmlHttp() {  
    //根据window.XMLHttpRequest对象是否存在使用不同的创建方式  
//    if (window.XMLHttpRequest) {  
//       xmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式  
//   } else {  
//      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式  
//    }  
    if (window.ActiveXObject) {  
        xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");  
    } else if (window.XMLHttpRequest) {  
        xmlHttpReq = new XMLHttpRequest();  
    }  
}  
 
function loadAjax() {  
    alert("-------1----------");  
    createXmlHttp();                        //创建XmlHttpRequest对象  
      alert("-------2---------");  
        
      
    var url="http://localhost:8080/AndroidStruts2JSON/login.action?userName=admin&password=123456&date="+new Date();  
    xmlHttpReq.open("get", encodeURI(encodeURI(url+param,"UTF-8"),"UTF-8"), true);  
    //xmlHttpReq.open("get", encodeURI(encodeURI(url,"UTF-8"),"UTF-8"), true);//上传图片  
    xmlHttpReq.setrequestheader("content-type","application/x-www-form-urlencoded");//post提交设置项  
    xmlHttpReq.onreadystatechange = loadCallback;  //IE这里设置回调函数  
    xmlHttpReq.send(null);  
      
}  
 
 
function loadCallback() {  
    alert("-------3---------");  
    //alert(xmlHttpReq.readyState);  
    if (xmlHttpReq.readyState == 4) {  
       alert("aa");  
        //if(xmlHttpReq.status==200){  
        document.getElementById("contentDiv").innerHTML=xmlHttpReq.responseText;  
        //}  
    }  
}  
 
 
</script> 
 
<body> 
<div id="contentTypeDiv"> 
</div> 
<br/><br/> 
<div id="contentDiv"> 
</div> 
 
 
 
 
<input type="button" value="调用" onclick="loadAjax()"> 
 
</body> 
</head> 
</html> 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax调用web服务</title>
<script type="text/javascript">
var xmlHttpReq;    //用于保存XMLHttpRequest对象的全局变量

//用于创建XMLHttpRequest对象
function createXmlHttp() {
    //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
//    if (window.XMLHttpRequest) {
//       xmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式
//   } else {
//      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
//    }
if (window.ActiveXObject) {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
}
}

function loadAjax() {
    alert("-------1----------");
createXmlHttp();                        //创建XmlHttpRequest对象
  alert("-------2---------");
 

var url="http://localhost:8080/AndroidStruts2JSON/login.action?userName=admin&password=123456&date="+new Date();
xmlHttpReq.open("get", encodeURI(encodeURI(url+param,"UTF-8"),"UTF-8"), true);
//xmlHttpReq.open("get", encodeURI(encodeURI(url,"UTF-8"),"UTF-8"), true);//上传图片
xmlHttpReq.setrequestheader("content-type","application/x-www-form-urlencoded");//post提交设置项
xmlHttpReq.onreadystatechange = loadCallback;  //IE这里设置回调函数
xmlHttpReq.send(null);

}


function loadCallback() {
    alert("-------3---------");
//alert(xmlHttpReq.readyState);
    if (xmlHttpReq.readyState == 4) {
       alert("aa");
//if(xmlHttpReq.status==200){
document.getElementById("contentDiv").innerHTML=xmlHttpReq.responseText;
//}
    }
}


</script>

<body>
<div id="contentTypeDiv">
</div>
<br/><br/>
<div id="contentDiv">
</div>




<input type="button" value="调用" onclick="loadAjax()">

</body>
</head>
</html>




手机前台服务:

Java代码 
package com.easyway.android.json;  
 
import java.io.IOException;  
 
import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
import org.apache.http.client.ClientProtocolException;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.impl.client.DefaultHttpClient;  
import org.apache.http.util.EntityUtils;  
import org.json.JSONException;  
import org.json.JSONObject;  
 
import android.app.Activity;  
import android.app.AlertDialog;  
import android.app.AlertDialog.Builder;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.os.StrictMode;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
/** 
  
*   
*   
* 在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据, 
* 那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有 
*  一:基于Http协议获取数据方法。 
*  二:基于SAOP协议获取数据方法 

*备注:在网络有关的问题最好添加以下两项: 
*   1.线程和虚拟机策略 
*   ///在Android2.2以后必须添加以下代码 
*           //本应用采用的Android4.0 
*           //设置线程的策略 
*            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()    
*            .detectDiskReads()    
*            .detectDiskWrites()    
*            .detectNetwork()   // or .detectAll() for all detectable problems    
*            .penaltyLog()    
*            .build());    
*           //设置虚拟机的策略 
*         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()    
*                    .detectLeakedSqlLiteObjects()    
*                    //.detectLeakedClosableObjects()    
*                    .penaltyLog()    
*                    .penaltyDeath()    
*                    .build()); 
*      2.可以访问网络的权限: 
*       即AndroidManifest.xml中配置: 
*        <uses-permission android:name="android.permission.INTERNET"/> 

*  
* @author longgangbai 
*  

*/ 
public class AndroidHttpJSONActivity extends Activity {  
     private static  String processURL="http://192.168.134.1:8080/AndroidStruts2JSON/login.action?";  
          
      private EditText txUserName;  
      private EditText txPassword;  
      private Button btnLogin;  
        
        /** 
         *  Called when the activity is first created. 
         */ 
        @Override 
        public void onCreate(Bundle savedInstanceState) {  
            ///在Android2.2以后必须添加以下代码  
            //本应用采用的Android4.0  
            //设置线程的策略  
             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()     
             .detectDiskReads()     
             .detectDiskWrites()     
             .detectNetwork()   // or .detectAll() for all detectable problems     
             .penaltyLog()     
             .build());     
            //设置虚拟机的策略  
              StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()     
                     .detectLeakedSqlLiteObjects()     
                     //.detectLeakedClosableObjects()     
                     .penaltyLog()     
                     .penaltyDeath()     
                     .build());  
            super.onCreate(savedInstanceState);  
            //设置页面布局  
            setContentView(R.layout.main);  
            //设置初始化视图  
            initView();  
            //设置事件监听器方法  
            setListener();  
        }  
        /** 
         * 创建初始化视图的方法 
         */ 
        private void initView() {  
            btnLogin=(Button)findViewById(R.id.btnLogin);  
            txPassword=(EditText)findViewById(R.id.txtPassword);  
            txUserName=(EditText)findViewById(R.id.txtUserName);  
        }  
 
        /** 
         * 设置事件的监听器的方法 
         */ 
        private void setListener() {  
            btnLogin.setOnClickListener(new View.OnClickListener() {  
                @Override 
                public void onClick(View v) {  
                    String userName=txUserName.getText().toString();  
                    String password=txPassword.getText().toString();  
                    loginRemoteService(userName,password);  
                }  
            });  
        }  
      
    /** 
     * 获取Struts2 Http 登录的请求信息 
     * @param  userName 
     * @param  password 
     */ 
    public void loginRemoteService(String userName,String password){  
        String result=null;  
        try {  
                   
            //创建一个HttpClient对象  
            HttpClient httpclient = new DefaultHttpClient();  
            //远程登录URL  
            processURL=processURL+"userName="+userName+"&password="+password;  
            Log.d("远程URL", processURL);  
            //创建HttpGet对象  
            HttpGet request=new HttpGet(processURL);  
            //请求信息类型MIME每种响应类型的输出(普通文本、html 和 XML,json)。允许的响应类型应当匹配资源类中生成的 MIME 类型  
            //资源类生成的 MIME 类型应当匹配一种可接受的 MIME 类型。如果生成的 MIME 类型和可接受的 MIME 类型不 匹配,那么将  
            //生成 com.sun.jersey.api.client.UniformInterfaceException。例如,将可接受的 MIME 类型设置为 text/xml,而将  
            //生成的 MIME 类型设置为 application/xml。将生成 UniformInterfaceException。  
            request.addHeader("Accept","text/json");  
            //获取响应的结果  
            HttpResponse response =httpclient.execute(request);  
            //获取HttpEntity  
            HttpEntity entity=response.getEntity();  
            //获取响应的结果信息  
            String json =EntityUtils.toString(entity,"UTF-8");  
            //JSON的解析过程  
            if(json!=null){  
                JSONObject jsonObject=new JSONObject(json);  
                result=jsonObject.get("message").toString();  
            }  
           if(result==null){  
               json="登录失败请重新登录";  
           }  
            //创建提示框提醒是否登录成功  
             AlertDialog.Builder builder=new Builder(AndroidHttpJSONActivity.this);  
             builder.setTitle("提示")  
             .setMessage(result)  
             .setPositiveButton("确定", new DialogInterface.OnClickListener() {  
                  
                @Override 
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.dismiss();  
                }  
            }).create().show();  
           
         } catch (ClientProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (JSONException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  • 大小: 50.8 KB
分享到:
评论

相关推荐

    struts2+json

    Struts2是一个强大的Java web开发框架,它极大地简化了基于MVC(模型-视图-控制器)架构的应用程序开发。这个资源"struts2+json"显然涉及到在Struts2框架下实现JSON(JavaScript Object Notation)数据交换,这是一...

    Struts2+Json+Android简单实现

    Struts2、JSON和Android是三个在Web应用开发中至关重要的技术。本示例将详细介绍如何结合这三者实现一个简单的交互。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它简化了创建动态、...

    struts2+android+Json

    Struts2和Android是两种不同平台上的开发框架,它们在实际应用中经常通过JSON进行数据交互。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,因此...

    Android远程访问Struts2服务器程序(用到Json解析数据)

    Android+struts2+JSON形式的手机开发 把本机当作服务器,将Android当作客户端 服务器端采用Struts2编码,Android客户端采用Json解析它的数据 服务器端程序为ServerProject(用MyEclipse建立此项目),Android客户端程序...

    android接收json例子struts2Action返回json格式数据

    在Android开发中,与服务器进行数据交互是常见的需求,JSON作为一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的通信。本示例将详细讲解如何在Android应用中通过HTTP请求从Struts2 Action获取JSON格式的...

    android+s2sh+json

    在这个项目中,开发者可能结合了移动应用开发(Android)和服务器端业务逻辑处理(Struts2和Spring),并通过JSON格式进行数据的序列化和反序列化,以便于客户端和服务器之间的通信。 Struts2是一个基于MVC设计模式...

    Android开发HTTP传输数据到Struts2生成Json数据案例

    在这个“Android开发HTTP传输数据到Struts2生成Json数据案例”中,我们将探讨如何实现这一过程。 首先,我们从Android客户端开始。在Android应用中,我们通常使用`HttpURLConnection`或者第三方库如`Volley`、`...

    struts2ToJson

    综上所述,Struts2ToJson帮助Android开发者利用Struts2框架的便利性,高效地进行JSON数据的生成和交换,降低了客户端与服务器通信的复杂性,提升了开发效率和应用性能。在实际项目中,结合恰当的网络库和数据解析...

    android调用struts2源码

    本示例探讨的是如何在Android客户端调用Struts2源码来实现JSON格式的数据交换。 **一、Android客户端调用Struts2** 1. **网络请求库**:Android中,我们可以使用`HttpURLConnection`、`HttpClient`(已废弃)或第...

    Android客户端与服务器通信+json交互数据

    Struts2使用JSON插件可以方便地将Java对象转换为JSON格式返回给客户端。 JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Android中,有多种库可以处理JSON,例如Gson和Jackson,...

    Struts2_Android(2.2)_模拟数据访问项目 JSON项目

    在“Struts2_Android(2.2)_模拟数据访问项目 JSON项目”中,我们关注的是如何在Android客户端与Struts2后端之间进行JSON数据交换。这个项目可能是为了展示如何在Android应用中利用Struts2提供的服务接口来获取或提交...

    myeclipse8下STRUTS(自带JSON插件)的JSON传值例子.rar

    STRUTS作为Java Web开发的一个热门框架,通过集成JSON插件,能够方便地实现JSON数据的传递。本示例主要探讨的是如何在MyEclipse8环境下,利用STRUTS框架内置的JSON支持,进行JSON数据的传递,同时避免了额外下载和...

    基于android开发的服务器端和客户端例子Struts2AndJSON

    这个例子为开发者提供了一个实践平台,帮助他们理解如何在Android应用中集成Struts2服务器和JSON数据交换,对于学习Android网络编程和服务器端开发有很高的参考价值。通过深入研究和实践这个示例,开发者可以提升...

    JAVA+JSP+Servlet+android+SSH视频教程全集+项目视频 亲自总结

    2. **开发环境搭建**:安装Android Studio、配置模拟器。 3. **UI设计**:布局管理器的使用、常用控件的属性设置。 4. **Activity与Intent**:Activity生命周期、Intent传递数据。 5. **数据存储**:...

    struts2小程序 struts2代码

    这个“struts2小程序”很可能是开发者利用Struts2框架开发的一个小型项目,可能包含了基本的CRUD操作或其他特定功能。在描述中提到花费了3小时搭建,暗示这可能是一个简单的入门示例,用于学习或教学目的。 Struts2...

    android客户端上传文件,struts2服务端接收

    在Android应用开发中,文件上传是一项常见的功能,通常用于用户分享图片、文档等信息到服务器。Struts2作为Java Web框架,提供了处理文件上传的能力。本篇将详细讲解如何实现Android客户端上传文件以及Struts2服务端...

    Android与服务器端数据交互(http协议整合struts2 android).doc

    文中提到了使用json-lib和struts2的JSON插件来处理JSON格式的数据。 5. **Android客户端**: - **发送HTTP请求**:在Android应用中,可以使用`HttpURLConnection`或`OkHttp`库发送HTTP请求到服务器,获取JSON或...

Global site tag (gtag.js) - Google Analytics