环境:myeclipse8.5+flex4+blazeds
描述:flex4中httpservice与服务器端交互的值传递问题
方式一:通过<s:request/>标签进行交互,在该标签内部以要传递的参数名作为该标签内的子标签,值作为内容进行传递,服务端接受数据采用request.getParmeter("参数名")获取数据.
示例代码:
flex中的代码:
<!--定义HttpService发送请求--> <s:HTTPService id="service" url="http://localhost:8080/testhttpservice/testHttpServiceServlet" useProxy="false" fault="service_faultHandler(event)" result="service_resultHandler(event)"> <!--第一种传值方式--> <s:request > <!--参数名称作标签,中间填充参数值--> <username>{txtusername.text}</username> <password>{txtpassword.text}</password> </s:request> </s:HTTPService>
//获取flex传递的参数 username password String username=request.getParameter("username"); //get方式处理乱码 //username=new String(username.getBytes("ISO-8859-1"),"utf-8"); String password=request.getParameter("password"); //password=new String(password.getBytes("ISO-8859-1"),"utf-8");
方式二:第二种传值方式通过send()方法传值send方法中传递参数 ,服务端接受数据采用request.getParmeter("参数名")获取数据.
示例代码:
//第二种传值方式 通过send()方法传值 send方法中传递参数 //定义一object对象 var val:Object=new Object(); //分别将文本框username,password的值传递到后台 //object对象.参数名=值 传值操作 val.username=txtusername.text; val.password=txtpassword.text; service.send(val);
贴出完整的代码:
服务器端:
package com.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.servletexception; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** *//** * 功能描述:flex httpservice与java交互参数传递探讨<br> * @author sxyx2008<br> * @date 2010-07-19 * */ @SuppressWarnings("serial") public class TestHttpServiceServlet extends HttpServlet { @Override protected void service(HttpServletRequest request,HttpServletResponse response) throws servletexception,IOException { //处理post方式乱码 request.setCharacterEncoding("utf-8"); //设置浏览器输出字符编码 response.setCharacterEncoding("utf-8"); PrintWriter writer=response.getWriter(); //获取flex传递的参数 username password String username=request.getParameter("username"); //get方式处理乱码 //username=new String(username.getBytes("ISO-8859-1"),"utf-8"); //构建一个list存放一些数据用来模拟用户是否存在这一功能 List<String> list=new ArrayList<String>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("曹操"); list.add("孙权"); list.add("刘备"); //检验用户 if(list.contains(username)){ writer.print("存在:"+username+"客户端传递的密码是:"+password); }else{ writer.print("找不到:"+username+"客户端传递的密码是:"+password); } } }
flex代码:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; //调用失败 protected function service_faultHandler(event:FaultEvent):void { Alert.show("失败了:"+event.message,"提示"); } //调用成功 protected function service_resultHandler(event:ResultEvent):void { Alert.show("成功了:"+event.result as String,"提示"); } //调用 protected function button1_clickHandler(event:MouseEvent):void { //第一种传值方式 //service.send(); //第二种传值方式 通过send()方法传值 send方法中传递参数 //定义一object对象 var val:Object=new Object(); //分别将文本框username,password的值传递到后台 //object对象.参数名=值 传值操作 val.username=txtusername.text; val.password=txtpassword.text; service.send(val); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <!--定义HttpService发送请求--> <s:HTTPService id="service" url="http://localhost:8080/testhttpservice/testHttpServiceServlet" useProxy="false" fault="service_faultHandler(event)" result="service_resultHandler(event)"> <!--第一种传值方式--> <s:request > <!--参数名称作标签,中间填充参数值--> <username>{txtusername.text}</username> <password>{txtpassword.text}</password> </s:request> </s:HTTPService> </fx:Declarations> <s:TextInput x="332" y="196" id="txtusername"/> <s:TextInput x="332" y="256" id="txtpassword" displayAsPassword="true"/> <s:Button x="357" y="311" label="发送" click="button1_clickHandler(event)"/> <s:Label x="290" y="206" text="用户名:"/> <s:Label x="297" y="266" text="密码:"/> </s:Application>