加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex HTTPService初探(Flex跟JAVA等后台沟通的桥梁)

发布时间:2020-12-15 05:06:12 所属栏目:百科 来源:网络整理
导读:1.Flex HTTPService概念?? ? ?它是Flex跟JAVA等后台沟通的桥梁的一种方式,这种方式在考勤以及智慧路灯都用得比较广泛,它能够很好的跟*.do,*.action方式的请求联系起来,可以将flex的参数传递给服务器端(JAVA部分),也可以从服务器端返回数据给Flex前端。
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。
(完,待续.....................)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读