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包。