Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JSP中的对象下载/导出到远程存储的文件中?_Java_Jsp_Serialization_Objectoutputstream - Fatal编程技术网

Java 如何将JSP中的对象下载/导出到远程存储的文件中?

Java 如何将JSP中的对象下载/导出到远程存储的文件中?,java,jsp,serialization,objectoutputstream,Java,Jsp,Serialization,Objectoutputstream,我正在使用JSP,我有一个复杂的可序列化对象,我希望将其下载到客户端计算机的平面文件格式中。如何做到这一点 我可以使用ObjectOutputStream将对象本地保存到JSP服务器,但我需要将对象远程存储到JSP服务器,而不是本地(例如,存储到客户端) 一旦对象本地存储在客户端计算机上,我就希望能够将其上传回JSP服务器并打开/读取到对象中,这是如何做到的 亲切问候, Tim我认为,JSP服务器不可能自动将写入网络位置。这是一个安全限制,如果没有对应用程序的手动请求,可能无法实现。您可能需要使

我正在使用JSP,我有一个复杂的可序列化对象,我希望将其下载到客户端计算机的平面文件格式中。如何做到这一点

我可以使用ObjectOutputStream将对象本地保存到JSP服务器,但我需要将对象远程存储到JSP服务器,而不是本地(例如,存储到客户端)

一旦对象本地存储在客户端计算机上,我就希望能够将其上传回JSP服务器并打开/读取到对象中,这是如何做到的

亲切问候,


Tim

我认为,JSP服务器不可能自动将写入网络位置。这是一个安全限制,如果没有对应用程序的手动请求,可能无法实现。您可能需要使用以下策略:

  • 在客户机上创建一个共享位置(假设它在网络上),并将该位置装载到服务器上,然后编写JSP代码以将文件保存在该位置

  • 将文件保存在JSP服务器位置,然后可以编写FTP传输脚本将文件传输到客户端机器;使用作业调度器(需要建立FTP通信)

  • 对应用程序进行编码,使其可以使用应用程序网站下载(如下载音乐文件)。然后在客户端,您可以运行一个程序,该程序将连接到应用程序服务器,并以编程方式将文件保存在客户端计算机上


  • 您的问题是通过http发送二进制对象

    您可以在JSP代码中使用以下代码段

    response.setContentType("binary/octet-stream");
    response.setHeader("Content-Transfer-Encoding", "binary");
    response.setHeader("Content-Disposition","attachment; filename=myjavaobject.obj");
    
    ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
    oos.writeObject(yourJavaObject); //Assuming yourJavaObject is the java object you want to send.
    out.flush();
    out.close();
    

    不要忘记确保
    yourJavaObject
    是可序列化的

    这条线看起来模棱两可。。我可以使用ObjectOutputStream将对象本地保存到JSP服务器,但我需要将对象远程存储到JSP服务器,而不是本地存储。请多解释一下,;你的意思是在本地计算机上下载还是在应用服务器上保存?嗨@gyan,我的意思是将对象下载到本地计算机上。例如,我需要将对象序列化并保存在客户端计算机上,而不是JSP服务器上。希望有帮助:)谢谢@gyan的回复和建议策略。我心里有一个不同的策略,只是不确定它是否可能/如何编码。是否有可能将对象推送到ObjectOutputStream对象中,然后将该对象推送到FileOutputStream对象中,从而触发文件下载?这可以在策略#1中起作用,其中FileOutputStream将文件写入一个位置(最终是一个共享客户端目录)。否则,如果没有客户端权限(这就是为什么通过浏览器下载时总是要求获得保存权限),则无法将文件保存到磁盘上。想象一下,您的程序可能会在客户端的机器上悄悄地保存病毒:)(如果可以直接从web应用程序保存)嗯,但它不会像您通常从网站下载文件那样触发文件下载,例如,单击链接并被问到保存文件的位置吗?但您需要客户端应用程序(战略#3)这样做,然后间接地,你将授予客户端应用程序保存文件的权限。想象一下,这就像下载管理器软件点击URL并自动为你保存文件一样。整个想法是需要有人触发下载。谢谢@Santosh,这正是我要找的,只是这会导致一个额外的问题e、 由于我使用的是使用getWriter()的JSP,因此我无法调用getOutputStream(),因为您无法同时调用这两个函数,因为这会导致两个请求。我如何解决这个问题?谢谢,Tim