Flex HTTPService初探(Flex跟JAVA等后台沟通的桥梁)
2012-04-18 09:07
405 查看
1.Flex HTTPService概念
它是Flex跟JAVA等后台沟通的桥梁的一种方式,这种方式在考勤以及智慧路灯都用得比较广泛,它能够很好的跟*.do,*.action方式的请求联系起来,可以将flex的参数传递给服务器端(JAVA部分),也可以从服务器端返回数据给Flex前端。当前Flex跟JAVA等服务器通信有好多种方式,比如remoteObject,RESTFULL等,在这里主要是HTTPService,下面我以例子讲解它的用法。
2.Flex HTTPSerivce两种方式
2.1标签方式(即静态方式) ,如下所示:
<mx:HTTPService id="ButtonOperate_Authority"
url="/sems/buttonItem.do?action=init" method= " POST "
result="button_operate_authority_resultHandler(event)"/>
它申明的地方在<fx: Declarations>< /fx: Declarations>之间。
然后在调用它的地方,使用 ButtonOperate_Authority.send()就可以将这个请求发送到服务器端,也可以将变量值传给服务器端,
比如ButtonOperate_Authority.send(AmmeterDTO).即将AmmeterDTO变量的值传送给服务器端。
2.2 通过类定义的方式(动态方式,比活灵活,但实现起来没标签那么简洁),如下所示:
var ammeter_query:HTTPService =new HTTPService();
ammeter_query.url = "/sems/ammeter.do";
ammeter_query.method = " POST" ;
ammeter_query.resultFormat="e4x";
//设置参数
var paramsHolder:URLVariables = new URLVariables();
paramsHolder.action="query";
paramsHolder.concentUID=concentUID;
//添加响应回调函数
ammeter_query.addEventListener(ResultEvent.RESULT, ammeter_query_resultHandler);
ammeter_query.addEventListener(FaultEvent.FAULT, ammeter_query_faultHandler);
//发送无参数请求给服务器
ammeter_query.send(paramsHolder);
这种方式可以传递多个变量值,类似**/*.do?action=query&concentUID=concentUID将两个变量传送给服务器端。而URLVariables类则用于封装这两个变量。
3.结果响应函数
public function ammeter_query_resultHandler(event:ResultEvent):void{
//得到电表XML字符串
var dataXML:XML = event.result as XML;
trace(dataXML.toString());
var ammeteritemNodeList:XMLList=dataXML.descendants("ammeteritem");
//获取它的后代所有节点
//遍历它的后代列表
for each (var node:XML in ammeteritemNodeList){
//trace("node.@uid:==========>"+node.@uid);
UID.text = node.@uid;
nodeName.text = node.@name;
mutualInductor.text =node.@ratio;
locationDesc.text = node.@address;
remark.text = node.@remark;
ammeterType.selectedIndex = node.@type;
}
}
注意到:
ammeter_query.resultFormat="e4x";这个赋值,它表示服务器返回的变量类型是XML类型的,所以我们看到它的响应函数用XML变量进行接收,否则不用的话,就会报错或得不到正确的结果。
4.错误响应函数
//查询出现异常的处理结果
function ammeter_query_faultHandler(event:FaultEvent):void
{
trace("ammeter_query_faultHandler:"+event.fault.toString())
}
我们可以看到它的错误类型和原因,如果是后台代码出现问题,我们还要去调试后台代码。下面写一小段后台代码供参考。如下。
5.后台片段代码
/**
* 执行查询电表方法,根据集中器ID,查询成功后往日志表填写正常日志信息,查询失败则写失败日志信息到日志表。
* @param response:当前请求的HttpServletResponse
* @throws Exception 执行异常
*/
@RequestMapping(params ="action=query", method = {RequestMethod.POST,RequestMethod.GET})
public void queryAllAmmeterDevices(HttpServletResponse response, String concentUID) throws Exception {
//根据Concentrator ID号查询,查询出XML字符串
String ammeterStringText = "";
//当前用户信息
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
//日志信息服务DTO
OperationLogInfoDTO logDto = new OperationLogInfoDTO();
logDto.setCreateBy(userDetails.getUsername());
logDto.setCreateDate(new Date((new java.util.Date()).getTime()));
try {
//临时转换成Long整型
Long tempContentUID = (long) Double.parseDouble(concentUID);
//查询电表列表
ammeterStringText = ammeterService.queryAmmeterDataByConcentratorId(tempContentUID); //tempContentUID
//设置日志
logDto.setInfoMsg("查询成功查询"+concentUID+"集中器下的电表!");
logDto.setInfoLevel(SemsConstants.LOG_INFO_LEVEL_NORMAL);
logInfoService.addLogInfo(logDto);
} catch (Exception e) {
logDto.setInfoMsg("查询成功查询"+concentUID+"集中器下的电表失败!");
logDto.setInfoLevel(SemsConstants.LOG_INFO_LEVEL_EMERGENCY);
logInfoService.addLogInfo(logDto);
}
response.setCharacterEncoding("utf-8");
//解决中文乱码问题
response.getWriter().write(ammeterStringText);
//输出给前台使用
}
后台代码不是这部分讲的重点,后台代码比较复杂,迁移到多层之间的调用关系。 response可以将XML写至客户端Flex。
(完,待续.....................)
它是Flex跟JAVA等后台沟通的桥梁的一种方式,这种方式在考勤以及智慧路灯都用得比较广泛,它能够很好的跟*.do,*.action方式的请求联系起来,可以将flex的参数传递给服务器端(JAVA部分),也可以从服务器端返回数据给Flex前端。当前Flex跟JAVA等服务器通信有好多种方式,比如remoteObject,RESTFULL等,在这里主要是HTTPService,下面我以例子讲解它的用法。
2.Flex HTTPSerivce两种方式
2.1标签方式(即静态方式) ,如下所示:
<mx:HTTPService id="ButtonOperate_Authority"
url="/sems/buttonItem.do?action=init" method= " POST "
result="button_operate_authority_resultHandler(event)"/>
它申明的地方在<fx: Declarations>< /fx: Declarations>之间。
然后在调用它的地方,使用 ButtonOperate_Authority.send()就可以将这个请求发送到服务器端,也可以将变量值传给服务器端,
比如ButtonOperate_Authority.send(AmmeterDTO).即将AmmeterDTO变量的值传送给服务器端。
2.2 通过类定义的方式(动态方式,比活灵活,但实现起来没标签那么简洁),如下所示:
var ammeter_query:HTTPService =new HTTPService();
ammeter_query.url = "/sems/ammeter.do";
ammeter_query.method = " POST" ;
ammeter_query.resultFormat="e4x";
//设置参数
var paramsHolder:URLVariables = new URLVariables();
paramsHolder.action="query";
paramsHolder.concentUID=concentUID;
//添加响应回调函数
ammeter_query.addEventListener(ResultEvent.RESULT, ammeter_query_resultHandler);
ammeter_query.addEventListener(FaultEvent.FAULT, ammeter_query_faultHandler);
//发送无参数请求给服务器
ammeter_query.send(paramsHolder);
这种方式可以传递多个变量值,类似**/*.do?action=query&concentUID=concentUID将两个变量传送给服务器端。而URLVariables类则用于封装这两个变量。
3.结果响应函数
public function ammeter_query_resultHandler(event:ResultEvent):void{
//得到电表XML字符串
var dataXML:XML = event.result as XML;
trace(dataXML.toString());
var ammeteritemNodeList:XMLList=dataXML.descendants("ammeteritem");
//获取它的后代所有节点
//遍历它的后代列表
for each (var node:XML in ammeteritemNodeList){
//trace("node.@uid:==========>"+node.@uid);
UID.text = node.@uid;
nodeName.text = node.@name;
mutualInductor.text =node.@ratio;
locationDesc.text = node.@address;
remark.text = node.@remark;
ammeterType.selectedIndex = node.@type;
}
}
注意到:
ammeter_query.resultFormat="e4x";这个赋值,它表示服务器返回的变量类型是XML类型的,所以我们看到它的响应函数用XML变量进行接收,否则不用的话,就会报错或得不到正确的结果。
4.错误响应函数
//查询出现异常的处理结果
function ammeter_query_faultHandler(event:FaultEvent):void
{
trace("ammeter_query_faultHandler:"+event.fault.toString())
}
我们可以看到它的错误类型和原因,如果是后台代码出现问题,我们还要去调试后台代码。下面写一小段后台代码供参考。如下。
5.后台片段代码
/**
* 执行查询电表方法,根据集中器ID,查询成功后往日志表填写正常日志信息,查询失败则写失败日志信息到日志表。
* @param response:当前请求的HttpServletResponse
* @throws Exception 执行异常
*/
@RequestMapping(params ="action=query", method = {RequestMethod.POST,RequestMethod.GET})
public void queryAllAmmeterDevices(HttpServletResponse response, String concentUID) throws Exception {
//根据Concentrator ID号查询,查询出XML字符串
String ammeterStringText = "";
//当前用户信息
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
//日志信息服务DTO
OperationLogInfoDTO logDto = new OperationLogInfoDTO();
logDto.setCreateBy(userDetails.getUsername());
logDto.setCreateDate(new Date((new java.util.Date()).getTime()));
try {
//临时转换成Long整型
Long tempContentUID = (long) Double.parseDouble(concentUID);
//查询电表列表
ammeterStringText = ammeterService.queryAmmeterDataByConcentratorId(tempContentUID); //tempContentUID
//设置日志
logDto.setInfoMsg("查询成功查询"+concentUID+"集中器下的电表!");
logDto.setInfoLevel(SemsConstants.LOG_INFO_LEVEL_NORMAL);
logInfoService.addLogInfo(logDto);
} catch (Exception e) {
logDto.setInfoMsg("查询成功查询"+concentUID+"集中器下的电表失败!");
logDto.setInfoLevel(SemsConstants.LOG_INFO_LEVEL_EMERGENCY);
logInfoService.addLogInfo(logDto);
}
response.setCharacterEncoding("utf-8");
//解决中文乱码问题
response.getWriter().write(ammeterStringText);
//输出给前台使用
}
后台代码不是这部分讲的重点,后台代码比较复杂,迁移到多层之间的调用关系。 response可以将XML写至客户端Flex。
(完,待续.....................)
相关文章推荐
- flex中httpservice与java后台交互的两种传值方式
- flex中httpservice与java后台交互的两种传值方式
- Flex中HTTPService与java后台通信
- flex中httpservice与java后台交互的两种传值方式
- Flex Httpservice和java后台通信传值出现中文乱码
- flex中httpservice与java后台交互的两种传值方式
- flex中httpservice与java后台交互的两种传值方式
- flex基础篇一,基于httpservice通信+java后台的项目创建
- RPC通信之HTTPService(Java-flex)
- Flex HTTPService如何给后台传递参数
- Flex HTTPService如何给后台传递参数(zt)
- Flex中HTTPService请求参数中存在中文,后台获取为乱码的解决方法
- Flex与Java通信之HttpService
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- Flex与后台交互的4种方法 URLLoader、HTTPService、WebService、RemoteObject使用示例
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- flex httpservice与java通讯的中文乱码解决。
- Flex+Struts2+JSON实现Flex和后台的HTTP Service请求
- Flex HTTPService如何给后台传递参数
- Flex与后台交互的4种方法 HTTPService、URLLoader、WebService详解