????????????环境: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");

????????String?password=request.getParameter("password");

????????//password=new?String(password.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
>

????????
<
????????????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
>