刚学习Flex,在开始学习Flex的Remote通信时,似乎没有遇到后台java与前台flex通信
时的编码问题,前俩天在维护一个系统时终于碰到了: 开始客户端使用的是get方式传递中文
参数,在配置了Tomcat服务器的conf文件下server.xml中服务器的编码为utf-8后,仍不行,
后来在把get方式换成post方式时,程序调试成功,代码如下:
//u为url字符串,/doLoad为一个servlet的url pattern var u:String ="http://localhost:8080/TestProject/doLoad”; var request:URLRequest = new URLRequest(u); request.method = URLRequestMethod.POST; var vars: URLVariables = new URLVariables (); vars["file"] = filePath; //把参数键,值对放到vars对象中. filePath含有中文 request.data = vars; //myFile是自己定义的一个FileReference,Flex的一个负责上传或者下载的类 myFile.upload(request,param,false); myFile.addEventListener(ProgressEvent.PROGRESS,onProcess); myFile.addEventListener(Event.COMPLETE,onComplete);
而后发现用Get方式传递,其实只需要对参数进行Url的格式转换便正确,代码如下
var u:String="http://localhost:8080/TestProject/doLoad?file= "+encodeURIComponent(filePath); var request:URLRequest = new URLRequest(u); request.method = URLRequestMethod.GET; myFile.upload(request,param,false); myFile.addEventListener(ProgressEvent.PROGRESS,onProcess); myFile.addEventListener(Event.COMPLETE,onComplete);
因为Tomcat已经配置编码为utf-8,所以在servlet端对get的参数的获取就不需要进行解码
了, 如果没有配置服务器编码则需要解码:
filename = request.getParameter("file"); //如果没有对tomcat的默认字符编码配置则需要如下url解码信息 filename= java.net.URLDecoder.decode(filename,"UTF-8");
这也是flex的HttpServices通信(Get和Post方式)的差异吧。