libs如图:

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>

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>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" extends="json-default" namespace="/">
<action name="getjson" class="com.zte.android.LoginAction"
method="login">
<result type="json"></result>
</action>
</package>
</struts>

Student.java

package com.zte.android;

public class Student
{ private String name; private String age; private String school; private String phone; public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public String getAge()
{
return age;
} public void setAge(String age)
{
this.age = age;
} public String getSchool()
{
return school;
} public void setSchool(String school)
{
this.school = school;
} public String getPhone()
{
return phone;
} public void setPhone(String phone)
{
this.phone = phone;
} }

Login.action:

package com.zte.android;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
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; 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()
{
returnUserInfo();
} private void returnUserInfo()
{ this.response.setContentType("text/json;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
String json;
if (username == null || password == null)
{ json = "请求参数错误";
flushData(json);
return;
}
if (username.equals("123") && password.equals("123"))
{
List<Student> list = new ArrayList<Student>();
Gson gson = new Gson();
for (int i = 0; i < 10; i++)
{
Student st = new Student();
st.setAge("10" + i);
st.setName("csh" + i);
st.setPhone("1333007" + i);
st.setSchool("abc" + i);
list.add(st);
}
json = gson.toJson(list);
}
else
{
json = "非法登陆信息!";
}
flushData(json);
} private void flushData(String json)
{
byte[] jsonBytes;
try
{
jsonBytes = json.getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
response.getOutputStream().close();
}
catch (IOException e)
{
e.printStackTrace();
}
} }
}

网页ajax请求:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<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浏览器支持的创建方式
}
}
function loadAjax() {
createXmlHttp(); //创建XmlHttpRequest对象
var url = "http://localhost:8080/ssh2ToAndroid/getjson.action?userName=admin&password=123456";
xmlHttpReq.open("GET", url, true);
xmlHttpReq.onreadystatechange = loadCallback; //IE这里设置回调函数
xmlHttpReq.send(null);
}
function loadCallback() {
alert(xmlHttpReq.readyState);
if (xmlHttpReq.readyState == 4) {
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>
</html>

android请求数据:

package com.zte.android.greenweb.launcher.http;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL; import com.zte.android.greenweb.launcher.util.LogEx;
import com.zte.android.greenweb.launcher.util.NetConst; public class HttpConnectionClient
{ public static final String HTTP_REQUEST_METHOD_GET = "GET"; public static final String HTTP_REQUEST_METHOD_POST = "POST"; private HttpURLConnection conn = null; /**
* 发送请求到http服务然后接收返回报文
*
* @param path
* 请求的http服务的路径
* @return 返回请求的响应信息
* @throws IOException
*/
public int doGet(String path) throws IOException
{
URL url = new URL(path);
// openConnection() 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接
conn = (HttpURLConnection) url.openConnection();// 打开一个连接
conn.setRequestMethod(HTTP_REQUEST_METHOD_GET);// 设置get方式请求
conn.setConnectTimeout(NetConst.CONNECTED_TIME_OUT);
conn.setReadTimeout(NetConst.READ_TIME_OUT);
// 打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true
conn.setDoOutput(true);
// 这里只设置内容类型与内容长度的头字段根据传送内容决定
// 内容类型Content-Type:
// application/x-www-form-urlencoded、text/xml;charset=GBK
// 内容长度Content-Length: 38
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
conn.setRequestProperty("Charset", "UTF-8");
// 保存调用http服务后的响应信息
return conn.getResponseCode();
} /**
* 发送请求到http服务然后接收返回报文
*
* @param jsonStr
* 请求的json格式的字符串
* @param path
* 请求的http服务的路径
* @return 返回请求的响应信息
* @throws IOException
*/
public int doPost(String jsonStr, String path) throws IOException
{
LogEx.d("doPost request="+jsonStr);
// 得到请求报文的二进制数据
byte[] data = jsonStr.getBytes();
URL url = new URL(path);
// 打开一个连接
conn = (HttpURLConnection) url.openConnection();
// 设置post方式请求
conn.setRequestMethod(HTTP_REQUEST_METHOD_POST);
conn.setConnectTimeout(NetConst.CONNECTED_TIME_OUT);
conn.setReadTimeout(NetConst.READ_TIME_OUT);
// 打算使用 URL 连接进行输出,则将 DoOutput 标志设置为 true
conn.setDoOutput(true);
conn.setDoInput(true);
// 这里只设置内容类型与内容长度的头字段根据传送内容决定
// 内容类型Content-Type:
// application/x-www-form-urlencoded、text/xml;charset=GBK
// 内容长度Content-Length: 38
conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
conn.setRequestProperty("Charset", "UTF-8");
conn.setRequestProperty("Content-Length", String.valueOf(data.length));
OutputStream outStream = conn.getOutputStream();// 返回写入到此连接的输出流
// 把二进制数据写入是输出流
outStream.write(data);
// 内存中的数据刷入
outStream.flush();
// 关闭流
outStream.close();
int ic = 0;
ic = conn.getResponseCode();
return ic;
} public String getContent() throws UnsupportedEncodingException, IOException
{
if (null == conn)
{
return null;
} // 保存调用http服务后的响应信息
String msg = "";
// 如果请求响应码是200,则表示成功
if (conn.getResponseCode() == NetConst.NET_CONNECTED_SUCCESS)
{
// HTTP服务端返回的编码是UTF-8,故必须设置为UTF-8,保持编码统一,否则会出现中文乱码
BufferedReader in =
new BufferedReader(new InputStreamReader(
(InputStream) conn.getInputStream(), "UTF-8"));// 返回从此打开的连接读取的输入流
msg = in.readLine();
in.close();
}
// 断开连接
conn.disconnect();
LogEx.d("doPost getContent="+msg);
return msg;
}
}

最近在学ssh2框架,很多不懂,放着以后看看。有些代码参照网络的。

strut2服务器与android交互数据的更多相关文章

  1. Android提交数据到JavaWeb服务器实现登录

    之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...

  2. SSH服务器与Android通信(2)--Android客户端接收数据

    基本原理是Android客户端通过HttpClient向服务器发出请求,服务器向Android客户端返回JSON字符串,Android客户端解析JSON字符串获得数据. 1. 新建一个Android项 ...

  3. SSH服务器与Android通信(1)--服务器端发送数据

    很多应用要求SSH服务器不仅和PC通信,还要和Android移动设备通信,这时就需要用到JSON了.其基本原理是服务器将数据转换成JSON格式,发送给Android客户端,客户端再将JSON格式的数据 ...

  4. Android Native Binder,在Native层与App交互数据

    Binder底层是基于C实现的,因此可以作为Native进程与App层交互数据的渠道.其应用场景为:Native Service.Hal驱动设置.应用层JNI服务等. Android 4.4引入SEA ...

  5. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  6. EventBus实现activity跟fragment交互数据

    最近老是听到技术群里面有人提出需求,activity跟fragment交互数据,或者从一个activity跳转到另外一个activity的fragment,所以我给大家介绍一个开源项目,EventBu ...

  7. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...

  8. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  9. 浏览器与服务器间的交互(客服端 <---> 服务器)

    浏览器与服务器间的交互(客服端 <---> 服务器) 请求--->处理--->响应 对类HttpContext 内部成员的使用 例如 :Request .Response .  ...

随机推荐

  1. asp.net 连接access数据库方法

    在 Web.Config 中配置 Access 数据库驱动和数据库文件名称. 请看代码 <appSettings> <add key="DBDriver" val ...

  2. 一道试题引发的血案 int *ptr2=(int *)((int)a+1);

    某日,看到一道比较恶心的C语言的试题,考了很多比较绕的知识点,嘴脸如下: int main(void) { int a[4] = {1, 2, 3, 4}; int *ptr1=(int *)(&am ...

  3. BestCoder Round #47

    1001 Senior's Array 题目链接:1001 题意:给你一个长度为n的序列,你必须修改序列中的某个数为P,求修改后的最大连续子序列和. 思路:数据量比较小,可以直接暴力做, 枚举序列的每 ...

  4. UVa 11082 Matrix Decompressing(最大流)

    不想吐槽了..sample input 和sample output 完全对不上...调了一个晚上...不想说什么了... -------------------------------------- ...

  5. JetBrains PhpStorm 使用

    · 在左侧显示当前文件位置 在左侧显示当前文件位置 alt + F1 在选择第1个在文件夹显示文件 在文件标签上 ctrl + 鼠标左键 或者 alt + F1 在选择第8个显示当前文件的函数,变量 ...

  6. [LeetCode]题解(python):105-Construct Binary Tree from Preorder and Inorder Traversal

    题目来源: https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 题意分析: ...

  7. IOS 使用程序外地图(IOS Map and google Map)

    1.调用IOS6苹果地图 IOS6中实现这个功能需要使用Map Kit中的MKPlaceMark和MKMapItem两个类,因此我们需要在工程中添加MapKit.framework主要代码如下: - ...

  8. Oracle10g--plSql命令

    每天学点Oracle10g--plSql命令 附录B SQL*PLUS Sql*plus 中使用绑定变量: sql> variable x number; sql> exec :x := ...

  9. 转:在控制台中调试AngularJS应用

    在控制台中调试AngularJS应用 在创建AngularJS应用时,一个很棘手的问题是如何在Chrome,Firefox,以及IE的JavaScript控制台中访问深藏在应用中的数据和服务.本文将会 ...

  10. FastJson中@JSONField注解使用

    最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...