2010-12-06 65 views
0

这是我在动作方法从柔性发送对象的Java Servlet

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(); 

上述方法没有奏效。

+0

怎么没有工作 – Bozho 2010-12-06 09:47:38

+0

当我跑调试,它运行平稳;在os.close()下面有一个catch语句;然而,没有发现异常,没有新的页面被打开。 – Prabhat 2010-12-06 09:50:53

回答

0

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

否则,请参阅this article。这有点旧,但仍然适用。也see here

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/