将对象从flex发送到java servlet

时间:2010-12-06 09:26:39

标签: java flex actionscript-3 servlets flex3

这是我在actionscript中的方法

var urlVars : URLVariables = new URLVariables();
                urlVars.myname = byteArr;
                var urlReq : URLRequest = new URLRequest('MyServlet');
                urlReq.data = urlVars;
                urlReq.method = 'post';
                navigateToURL(urlReq, '_blank');

如何在servlet上接收字节数组?

上面的byteArr也来自java方面,

byte[] byteArr = aMethodWhichReturnsaPDFByteArray();
        HttpServletResponse response = FlexContext.getHttpResponse();
        ServletOutputStream os = null;
        try {
            response.reset();
            response.setContentType("application/pdf");
            response.setContentLength(byteArr.length);
            response.setHeader("Content-disposition",
                    "inline; filename=\"Report.pdf\"");
            os = response.getOutputStream();
            os.write(byteArr);
            os.flush();
os.close();

上述方法无效。

3 个答案:

答案 0 :(得分:1)

您可以使用BlazeDS。我没有在服务器上进行反序列化的示例,但这里有一个用于序列化的示例。在servlet中执行以下操作:

response.setHeader("Content-Type", "application/x-amf");
ServletOutputStream out = response.getOutputStream();

ActionMessage requestMessage = new ActionMessage(MessageIOConstants.AMF3);

MessageBody amfMessage = new MessageBody();
amfMessage.setData(list);
requestMessage.addBody(amfMessage);

AmfMessageSerializer amfMessageSerializer = new AmfMessageSerializer();
amfMessageSerializer.initialize(SerializationContext.getSerializationContext(), out, new AmfTrace());
amfMessageSerializer.writeMessage(requestMessage);

out.close();

在客户端上执行以下操作:

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener(Event.COMPLETE, function(event:Event):void {
  var ba:ByteArray = (event.currentTarget.data as ByteArray);          
  var packet:AMFPacket = AMFDecoder.decodeResponse(ba) as AMFPacket;
});
loader.load(urlReq);

您的用例与此类似,只需在客户端上序列化并在服务器上反序列化。

您可以在以下位置找到此示例的所有源代码:
http://flexapps.svn.sourceforge.net/viewvc/flexapps/census2-tests/

答案 1 :(得分:0)

如果你坚持以这种方式发送参数,你最好用字符串表示法编码字节数组。例如Base64。在java端使用commons-codec对其进行解码。

否则,请参阅this article。它有点旧,但仍然适用。另外see here

答案 2 :(得分:0)

Commons File Upload库拯救!只需将请求对象传递给ServletFileUpload对象即可。可在此处找到详细示例

http://commons.apache.org/fileupload/using.html