android客户端和struts框架之间的通信

android客户端和struts框架使用json数据通信很方便。参考了网上的一些资料和博客

struts.xml文件一定要注意小心:今天因为粗心浪费了不少时间。。

<package name="struts2" extends="json-default" namespace="/">一定不要写成

<package name="struts2" extends="struts-default" namespace="/">android客户端得json数据。服务器端:

其中一个action配置如:

<action name="returnGroupList" class="flow.com.cn.action.GroupPurchaseAction" method="returnGroupPurchaseInfoList">

<resultname="success"type="json">

</result>

        </action>

服务器端其他的和一样,返回单个实体对象和实体列表没有区别。

json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回。

<result name="success" type="json">

只要为Action指定类型为json返回结果类型,那么这个响应结果不需要返回给任何视图层,JSON会将Action里的状态信息序列化为JSON指定格式的数据,并将该数据返回

<paramname="includeProperties">

flowinfo\.id,flowinfo\.monthusedflow,flowinfo\.dayusedflow

           </param> 

<result>

服务器端接收android客户端传递过来的数据其中一个插入方法

public Boolean insertFeedbackInfo(FeedbackInfo feedback)throws Throwable{

//TODOAuto-generatedmethodstub

Stringsql="insertintofeedbackinfo(content,time)values('"+feedback.getContent()+"','"+feedback.getTime()+"')";

Connectionconn=null;

PreparedStatementps=null;

conn=(Connection)DBUtilsC3P0.getInstance().getConnection();

try{

ps=conn.prepareStatement(sql);

if(ps.execute())

returntrue;

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}finally{

ps.close();

conn.close();

}

returnfalse;

    }

struts.xml中配置为:  

  <action name="insertFeedbackInfo" class="flow.com.cn.action.FeedbackInfoAction" method="insertFeedbackInfo">

<resultname="success">/index.jsp</result>

   </action>

android客户端:

@Override

publicBooleaninsertFeedbackInfo(Stringcontent,Stringtime){

//192.168.1.122:8089为本机IP地址,不能用localhost代替

Stringpath="http://192.168.1.122:8089/FlowServer/insertFeedbackInfo.action";

//http://192.168.1.122:8089/Strust2Json/csdn/listNewsGoods.action

Map<String,String>params=newHashMap<String,String>();

params.put("content",content);

params.put("time",time);

Booleanres=false;

try{

res=sendHttpClientPOSTRequest(path,params,"UTF-8");

System.out.println(res+"..............");

returnres;

}catch(Exceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnres;

        }

httpclient请求方法

 private  boolean sendHttpClientPOSTRequest(String path,

Map<String,String>params,Stringencoding)throwsException{

List<NameValuePair>pairs=newArrayList<NameValuePair>();//存放请求参数

for(Map.Entry<String,String>entry:params.entrySet()){

pairs.add(newBasicNameValuePair(entry.getKey(),entry.getValue()));

}

//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

UrlEncodedFormEntityentity=newUrlEncodedFormEntity(pairs,encoding);

HttpPosthttpPost=newHttpPost(path);

httpPost.setEntity(entity);

DefaultHttpClientclient=newDefaultHttpClient();

HttpResponseresponse=client.execute(httpPost);

if(response.getStatusLine().getStatusCode()==200){

returntrue;

}

returnfalse;

             }

/**

*发送post请求

*@parampath请求路径

*@paramparams请求参数

*@paramencoding编码

*@return请求是否成功

*/

privatestaticbooleansendPOSTRequest(Stringpath,

Map<String,String>params,Stringencoding)throwsException{

StringBuilderdata=newStringBuilder(path);

for(Map.Entry<String,String>entry:params.entrySet()){

data.append(entry.getKey()).append("=");

//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

data.append(URLEncoder.encode(entry.getValue(),encoding));

data.append("&");

}

data.deleteCharAt(data.length()-1);

byte[]entity=data.toString().getBytes();//得到实体数据

HttpURLConnectionconn=(HttpURLConnection)newURL(path).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("POST");

conn.setDoOutput(true);//设置为允许对外输出数据

conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

conn.setRequestProperty("Content-Length",String.valueOf(entity.length));

OutputStreamoutStream=conn.getOutputStream();

outStream.write(entity);//写到缓存

if(conn.getResponseCode()==200){//只有取得服务器返回的http协议的任何一个属性时才能把请求发送出去

returntrue;

}

returnfalse;

}

/**

*发送GET请求

*@parampath请求路径

*@paramparams请求参数

*@return请求是否成功

*@throwsException

*/

privatestaticbooleansendGETRequest(Stringpath,

Map<String,String>params,Stringencoding)throwsException{

StringBuilderurl=newStringBuilder(path);

url.append("?");

for(Map.Entry<String,String>entry:params.entrySet()){

url.append(entry.getKey()).append("=");

//get方式请求参数时对参数进行utf-8编码,URLEncoder

//防止客户端传递过去的参数发生乱码,需要对此重新编码成UTF-8

url.append(URLEncoder.encode(entry.getValue(),encoding));

url.append("&");

}

url.deleteCharAt(url.length()-1);

HttpURLConnectionconn=(HttpURLConnection)newURL(url.toString()).openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if(conn.getResponseCode()==200){

returntrue;

}

returnfalse;

     }

android客户端要导入gson.jar包。

相关推荐