- 浏览: 7340716 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在手机的后台服务无论是调用WebService还是Http请求,多数都是采用Android的HttpClient实现相关的调用实现。本文实现Android+Struts2+JSON方式实现为手机前台提供服务。
涉及的知识点:
1.Struts2框架的搭建(包括Struts2的jSON插件)
2.Android前台访问Web采用HttpClient方式。
3.Android采用JSON的解析。
功能:模拟远程登录流程:
手机后台服务:由于采用Struts2的JSON响应格式,响应详细会自动转变为JSON格式,故直接输出即可。
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
<?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
<?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测试页面:
<%@ 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>
手机前台服务:
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(); } } }
- AndroidHttpJSON.rar (57.2 KB)
- 下载次数: 656
- AndroidStruts2JSON.rar (3.5 MB)
- 下载次数: 1011
评论
11 楼
longgangbai
2013-11-14
bloomming 写道
Map<String,String> <SPAN style="COLOR: #ff0000">json</SPAN>=new HashMap<String,String>();
这句话报错Map.span cannot be resolved to a type
下面的所有json都报错json cannot be resolved
为什么?
这句话报错Map.span cannot be resolved to a type
下面的所有json都报错json cannot be resolved
为什么?
不明白你想说什么
10 楼
bloomming
2013-11-11
Map<String,String> <SPAN style="COLOR: #ff0000">json</SPAN>=new HashMap<String,String>();
这句话报错Map.span cannot be resolved to a type
下面的所有json都报错json cannot be resolved
为什么?
这句话报错Map.span cannot be resolved to a type
下面的所有json都报错json cannot be resolved
为什么?
9 楼
piaomiaowc1
2013-05-29
longgangbai 写道
piaomiaowc1 写道
我使用servlet做的,不知道能不能成功改成这个
学习了!感谢楼主!
学习了!感谢楼主!
肯定可以,struts2底层也就是Servlet和反射代理等实现的。
得好好研究下!
8 楼
longgangbai
2013-05-29
piaomiaowc1 写道
我使用servlet做的,不知道能不能成功改成这个
学习了!感谢楼主!
学习了!感谢楼主!
肯定可以,struts2底层也就是Servlet和反射代理等实现的。
7 楼
piaomiaowc1
2013-05-29
我使用servlet做的,不知道能不能成功改成这个
学习了!感谢楼主!
学习了!感谢楼主!
6 楼
longgangbai
2013-02-02
hayen201986 写道
为什么我用手机测试 点登陆没反应呢?????
debug测试以下不就知道了
5 楼
hayen201986
2013-01-24
为什么我用手机测试 点登陆没反应呢?????
4 楼
zhengxihong198861
2012-11-30
3 楼
心惶惶呀
2012-09-10
2 楼
longgangbai
2012-05-25
wds1181977 写道
我为什么总是404错误
404的原因可能是页面找不到。要从两个方面分析。可能手机的路径写错了
1.首先要明白即使是手机的虚拟机和后台struts2在一台机器上,手机的虚拟机相等于一个linux系统,所以是不同的服务ip故,但是手机客户端请求的路径是不能采用localhost作为服务ip的。
2.检查服务端struts2在没有采用手机端是否正常运行。采用ajax测试一下验证一下。
综合以上两点基本上应该没有问题。
1 楼
wds1181977
2012-05-22
我为什么总是404错误
发表评论
-
[转]年度最实用50款免费Android应用推荐
2012-11-08 16:39 3377据国外媒体报道,有人说Android应用市场比iPhone应用 ... -
GIS的学习(四十五)【转】Integration of the MBTiles format on Android
2012-10-22 17:13 2945转载自 http:/ ... -
GIS的学习(四十四)osmdroid sdcard检查
2012-10-15 16:12 2339在许多应用中使用到sdcard的检查,在osmdro ... -
GIS的学习(四十三)osmdroid基于几个经典代理类
2012-10-15 16:06 2631在osmdroid中给基于位置的代理类如下: pack ... -
Android中PopupWindow的用法(位置、动画、焦点)
2012-10-12 14:12 11522在Android中有很多级别的Window,不同级别的Wind ... -
【转】Android根据分辨率进行单位转换-(dp,sp转像素px)
2012-10-11 09:18 27133Android系统中,默认的单位是像素(px)。也就是说,在没 ... -
GIS的学习(二十九)Osmdroid 离线地图存放位置的研究和详细分析
2012-09-23 11:49 11543在手机通过osmdroid调用离线地图必须放在 ... -
GIS的学习(二十八)Osmdroid相关的开源项目
2012-09-23 11:31 25430osm 数据格式(openstreet map)与Ro ... -
GIS的学习(二十七)通过geoserver的georss访问第三方地图
2012-09-23 00:34 3601在geoserver中如果想调用第三方地图可以采 ... -
android中使用 定时更新界面定时器Timer的使用
2012-09-22 22:09 25523handler的使用 一、Handler的定义: ... -
【转】Android应用程序的自动更新升级(自身升级、通过tomcat) .
2012-09-16 15:03 7364http://blog.csdn.net/mu0206mu/a ... -
GIS的学习(二十七)OGC 的WCS WFS 及WMS 服务
2012-09-11 22:22 12124http://www.gisall.com/?6678/v ... -
GIS的学习(二十六)geotools 使用 部分代码总结
2012-09-11 22:20 5730前段时间的一个项目 本来用ae完成了种种的 查询,空间分析等等 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9710官方geoserver中WMS服务中几种操作的API的详细说明 ... -
GIS的学习(二十四)android异步调用geoserver wms中的地图
2012-09-10 17:38 8169在geoserver的客户端通过wms的GetMap实现 ... -
GIS的学习(二十三)geoserver中CQL和ECQL的使用
2012-09-10 16:29 6633以下引用自官方文档: CQL and ECQL¶ CQ ... -
GIS的学习(二十二)osmdroid中添加縮放控件
2012-09-06 23:09 2787package com.geoserver.osmdroid; ... -
GIS的学习(二十一)在osmdroid 地图中添加marker 并添加事件
2012-09-06 22:27 6625我有 osmdroid,overlayswithf ... -
GIS的学习(二十)基于Geoserver的WFS服务与Openlayers实现地理查询
2012-08-30 18:48 11408基于Geoserver发布的wfs服务,与Openlayers ... -
GIS的学习(十九)Geoserver使用添加,删除,查询地图中的POI
2012-08-30 17:28 10354在geoserver自定义的地图中通过geoserver ...
相关推荐
Struts2是一个强大的Java web开发框架,它极大地简化了基于MVC(模型-视图-控制器)架构的应用程序开发。这个资源"struts2+json"显然涉及到在Struts2框架下实现JSON(JavaScript Object Notation)数据交换,这是一...
Struts2、JSON和Android是三个在Web应用开发中至关重要的技术。本示例将详细介绍如何结合这三者实现一个简单的交互。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它简化了创建动态、...
Struts2和Android是两种不同平台上的开发框架,它们在实际应用中经常通过JSON进行数据交互。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和生成,因此...
Android+struts2+JSON形式的手机开发 把本机当作服务器,将Android当作客户端 服务器端采用Struts2编码,Android客户端采用Json解析它的数据 服务器端程序为ServerProject(用MyEclipse建立此项目),Android客户端程序...
在Android开发中,与服务器进行数据交互是常见的需求,JSON作为一种轻量级的数据交换格式,被广泛用于客户端和服务器之间的通信。本示例将详细讲解如何在Android应用中通过HTTP请求从Struts2 Action获取JSON格式的...
在这个项目中,开发者可能结合了移动应用开发(Android)和服务器端业务逻辑处理(Struts2和Spring),并通过JSON格式进行数据的序列化和反序列化,以便于客户端和服务器之间的通信。 Struts2是一个基于MVC设计模式...
在这个“Android开发HTTP传输数据到Struts2生成Json数据案例”中,我们将探讨如何实现这一过程。 首先,我们从Android客户端开始。在Android应用中,我们通常使用`HttpURLConnection`或者第三方库如`Volley`、`...
综上所述,Struts2ToJson帮助Android开发者利用Struts2框架的便利性,高效地进行JSON数据的生成和交换,降低了客户端与服务器通信的复杂性,提升了开发效率和应用性能。在实际项目中,结合恰当的网络库和数据解析...
本示例探讨的是如何在Android客户端调用Struts2源码来实现JSON格式的数据交换。 **一、Android客户端调用Struts2** 1. **网络请求库**:Android中,我们可以使用`HttpURLConnection`、`HttpClient`(已废弃)或第...
Struts2使用JSON插件可以方便地将Java对象转换为JSON格式返回给客户端。 JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Android中,有多种库可以处理JSON,例如Gson和Jackson,...
在“Struts2_Android(2.2)_模拟数据访问项目 JSON项目”中,我们关注的是如何在Android客户端与Struts2后端之间进行JSON数据交换。这个项目可能是为了展示如何在Android应用中利用Struts2提供的服务接口来获取或提交...
STRUTS作为Java Web开发的一个热门框架,通过集成JSON插件,能够方便地实现JSON数据的传递。本示例主要探讨的是如何在MyEclipse8环境下,利用STRUTS框架内置的JSON支持,进行JSON数据的传递,同时避免了额外下载和...
这个例子为开发者提供了一个实践平台,帮助他们理解如何在Android应用中集成Struts2服务器和JSON数据交换,对于学习Android网络编程和服务器端开发有很高的参考价值。通过深入研究和实践这个示例,开发者可以提升...
2. **开发环境搭建**:安装Android Studio、配置模拟器。 3. **UI设计**:布局管理器的使用、常用控件的属性设置。 4. **Activity与Intent**:Activity生命周期、Intent传递数据。 5. **数据存储**:...
这个“struts2小程序”很可能是开发者利用Struts2框架开发的一个小型项目,可能包含了基本的CRUD操作或其他特定功能。在描述中提到花费了3小时搭建,暗示这可能是一个简单的入门示例,用于学习或教学目的。 Struts2...
在Android应用开发中,文件上传是一项常见的功能,通常用于用户分享图片、文档等信息到服务器。Struts2作为Java Web框架,提供了处理文件上传的能力。本篇将详细讲解如何实现Android客户端上传文件以及Struts2服务端...
文中提到了使用json-lib和struts2的JSON插件来处理JSON格式的数据。 5. **Android客户端**: - **发送HTTP请求**:在Android应用中,可以使用`HttpURLConnection`或`OkHttp`库发送HTTP请求到服务器,获取JSON或...