struts2服务端与android交互
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了struts2服务端与android交互,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含17374字,纯文字阅读大概需要25分钟。
内容图文
![struts2服务端与android交互](/upload/InfoBanner/zyjiaocheng/1083/68b27ed9150b43e4a8381b86dc8e1d72.jpg)
本文主要包括以下内容
- android与struts2服务器实现登陆
- android从struts2服务器获取list数据
- android上传数据到struts2服务器
服务器端代码
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
*
*/publicclassLoginActionextendsActionSupportimplementsServletRequestAware,
ServletResponseAware {/** * */privatestaticfinallong serialVersionUID = 1L;
HttpServletRequest request;
HttpServletResponse response;
private String userName;
private String password;
public String getPassword() {
return password;
}
publicvoidsetPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
publicvoidsetUserName(String userName) {
this.userName = userName;
}
publicvoidsetServletRequest(HttpServletRequest request) {
this.request = request;
}
publicvoidsetServletResponse(HttpServletResponse response) {
this.response = response;
}
/**
* 模拟用户登录的业务
*/publicvoidlogin() {
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", "欢迎管理员登陆");
} elseif ((!"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> -->
<constantname="struts.i18n.encoding"value="UTF-8"/>
<constantname="struts.enable.DynamicMethodInvocation"value="true"/>
<!-- add package here extends="struts-default"-->
<packagename="default"extends="json-default">
<!--需要将struts-default改为-->
<actionname="login"class="com.easyway.json.android.LoginAction"method="login">
<resulttype="json"/>
<!--返回值类型设置为json,不设置返回页面-->
</action>
</package>
</struts>
ajax测试页面
<%@ 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>
<metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Ajax调用web服务</title><scripttype="text/javascript">var xmlHttpReq; //用于保存XMLHttpRequest对象的全局变量//用于创建XMLHttpRequest对象functioncreateXmlHttp() {//根据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");
} elseif (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
}
}
functionloadAjax() {
createXmlHttp(); //创建XmlHttpRequest对象var url="http://localhost:8080/AndroidStruts2JSON/login.action?userName=admin&password=123456&date="+newDate();
//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);
}
functionloadCallback() {//alert(xmlHttpReq.readyState);if (xmlHttpReq.readyState == 4) {
alert("aa");
//if(xmlHttpReq.status==200){
document.getElementById("contentDiv").innerHTML=xmlHttpReq.responseText;
//}
}
}
</script><body><divid="contentTypeDiv"></div><br/><br/><divid="contentDiv"></div><inputtype="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+REST WebService服务方式开发的手机平台很少采用
* soap协议这种方式,主要soap协议解析问题,增加了代码量。
*
*
* 在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
*
*
*/publicclassAndroidHttpJSONActivityextendsActivity {privatestatic String processURL="http://192.168.1.130:8080/AndroidStruts2JSON/login.action?";
private EditText txUserName;
private EditText txPassword;
private Button btnLogin;
/**
* Called when the activity is first created.
*/@OverridepublicvoidonCreate(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();
}
/**
* 创建初始化视图的方法
*/privatevoidinitView() {
btnLogin=(Button)findViewById(R.id.btnLogin);
txPassword=(EditText)findViewById(R.id.txtPassword);
txUserName=(EditText)findViewById(R.id.txtUserName);
}
/**
* 设置事件的监听器的方法
*/privatevoidsetListener() {
btnLogin.setOnClickListener(new View.OnClickListener() {
@OverridepublicvoidonClick(View v) {
String userName=txUserName.getText().toString();
String password=txPassword.getText().toString();
loginRemoteService(userName,password);
}
});
}
/**
* 获取Struts2 Http 登录的请求信息
* @param userName
* @param password
*/publicvoidloginRemoteService(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() {
@OverridepublicvoidonClick(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();
}
}
}
参考链接
Android+struts2+JSON方式的手机开发 - topMan’blog - ITeye技术网站
效果如下
android从struts2服务器获取list数据
参考链接
android–使用Struts2服务端与android交互 - android开发实例 - 博客园
效果如下
android上传数据到struts2服务器
android端代码
package com.zj.wifitest;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
publicclassMainActivityextendsActivity {@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
publicvoidclick(View view)
{
run();
}
publicvoidrun() {
new Thread() {
@Overridepublicvoidrun() {
try {
HttpURLConnection conn = null;
String content = "";
try {// 为了测试取消连接// Thread.sleep(5000);// http联网可以用httpClient或java.net.url// URL url = new URL(////// "http://115.28.34.52:8080/Car_Experiment/carInsert_insert_info.action");// carInsert_insert_info.action"
URL url = new URL("http://120.27.126.68:8080/CarServer/transAction");
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setConnectTimeout(1000 * 30);
conn.setReadTimeout(1000 * 30);
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
OutputStream output = conn.getOutputStream();
JSONObject jsonObject = new JSONObject();
jsonObject.put("0C", "0A0B");
jsonObject.put("0D", "0B");
jsonObject.put("10", "0A0B");
jsonObject.put("11", "0B");
//jsonObject.put("13", "0B");// jsonObject.put("14", "0A0B");// jsonObject.put("15", "0A0B");// jsonObject.put("16", "0A0B");// jsonObject.put("17", "0A0B");// jsonObject.put("18", "0A0B");// jsonObject.put("19", "0A0B");// jsonObject.put("1A", "0A0B");// jsonObject.put("1B", "0A0B");
jsonObject.put("2F", "0A0B");
jsonObject.put("02", "0A0B");
System.out.println(jsonObject.toString());
output.write(jsonObject.toString().getBytes());
output.flush();
output.close();
int responseCode = conn.getResponseCode();
Log.i("test", "responseCode"+responseCode);
InputStream in = conn.getInputStream();
System.out.println("responseCode=" + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println("responseCode=" + HttpURLConnection.HTTP_OK);
Log.i("test", "successed");
// InputStreamReader reader = new// InputStreamReader(in,charSet);
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
content += line;
}
System.out.println("result:" + content);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.disconnect();
conn = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
服务器端代码
package whu.zhengrenjie.Action;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import whu.zhengrenjie.Model.SimpleService;
import whu.zhengrenjie.Util.Util;
import com.opensymphony.xwork2.ActionSupport;
publicclassTransDataActionextendsActionSupport {private SimpleService simpleService;
private BufferedReader reader;
public SimpleService getSimpleService() {
return simpleService;
}
publicvoidsetSimpleService(SimpleService simpleService) {
this.simpleService = simpleService;
}
@Overridepublic String execute() throws Exception {
// TODO Auto-generated method stubif (Util.TEST) {
String test;
JSONObject jsonObject = new JSONObject();
jsonObject.put("0C", "0000");
jsonObject.put("0D", "00");
jsonObject.put("10", "0000");
jsonObject.put("11", "00");
jsonObject.put("2F", "00");
jsonObject.put("02", "12345678");
test = jsonObject.toString();
System.out.println("----------------------" + test);
simpleService.insert(test);
} else {
try {
String request = "";
String temp = "";
System.out.println("herrrrrrrrrrrrre");
reader = new BufferedReader(new InputStreamReader(
ServletActionContext.getRequest().getInputStream(),
"UTF-8"));
while ((temp = reader.readLine()) != null) {
request += temp;
}
simpleService.insert(request);
} catch (IOException e) {
// TODO Auto-generated catch blockc
e.printStackTrace();
} finally {
reader.close();
}
}
returnsuper.execute();
}
}
SimpleService
package whu.zhengrenjie.Model;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JSONObject;
import whu.zhengrenjie.DAO.SimpleDAO;
import whu.zhengrenjie.PO.RunTimePO;
import whu.zhengrenjie.Util.Util;
publicclass SimpleService {
privateint count = 0;
private SimpleDAO simpleDAO;
private RunTimePO runTimePO;
private JSONObject jsonObject;
public SimpleDAO getSimpleDAO() {
return simpleDAO;
}
publicvoidsetSimpleDAO(SimpleDAO simpleDAO) {
this.simpleDAO = simpleDAO;
}
public RunTimePO getRunTimePO() {
return runTimePO;
}
publicvoidsetRunTimePO(RunTimePO runTimePO) {
this.runTimePO = runTimePO;
}
publicvoidinsert(String requestStr) {
jsonObject = JSONObject.fromObject(requestStr);
String rpmStr = (String) jsonObject.get("0C");
if (!rpmStr.contains("0000")) {
double rpm = Integer.parseInt(rpmStr, 16) / 4;
runTimePO.setRpm(rpm);
if (Util.DEBUG) {
System.out.println(count++);
}
} else {
runTimePO.setRpm(0);
}
String speedStr = (String) jsonObject.get("0D");
if (!speedStr.contains("00")) {
double speed = Integer.parseInt(speedStr, 16);
runTimePO.setSpeed(speed);
if (Util.DEBUG) {
System.out.println(count++);
}
} else {
runTimePO.setSpeed(0);
}
String airSpeedStr = (String) jsonObject.get("10");
if (!airSpeedStr.contains("0000")) {
double airSpeed = Integer.parseInt(airSpeedStr, 16) / 100;
runTimePO.setAirSpeed(airSpeed);
if (Util.DEBUG) {
System.out.println(count++);
}
} else {
runTimePO.setAirSpeed(0);
}
String throttleStr = (String) jsonObject.get("11");
if (!throttleStr.contains("00")) {
double throttle_1 = Integer.parseInt(throttleStr, 16) * 100 / 255;
runTimePO.setThrottle(throttle_1);
if (Util.DEBUG) {
System.out.println(count++);
}
} else {
runTimePO.setThrottle(0);
}
String VIN=(String) jsonObject.get("02");
runTimePO.setSIN(VIN);
String oilLevelStr = (String) jsonObject.get("2F");
if (!oilLevelStr.contains("00")) {
double oilLevel = Integer.parseInt(oilLevelStr, 16) * 100 / 255;
runTimePO.setOilLevel(oilLevel);
if (Util.DEBUG) {
System.out.println(count++);
}
} else {
runTimePO.setOilLevel(0);
}
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String time = sdf.format(date);
date = sdf.parse(time);
runTimePO.setDate(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
simpleDAO.insert();
}
}
完成
原文:http://blog.csdn.net/whuhan2013/article/details/51364980
内容总结
以上是互联网集市为您收集整理的struts2服务端与android交互全部内容,希望文章能够帮你解决struts2服务端与android交互所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。