使用Web应用程序打包applet以访问本地文件系统的步骤

时间:2013-03-11 10:14:07

标签: java web-applications applet

我需要使用Applet支持文件夹上传。我已经实现了将尝试获取用户主目录的applet,并将尝试为该文件夹创建一个临时zip文件,然后它将命中我的上传servlet。实际上,通过从JavaScript调用applet方法uploadFolder之一来启动zip文件和上传的创建。当我在用户主目录中创建一个zip文件时,我得到一个java.security.AccessControlException:access denied(java.io.FilePermission C:\ Documents and Settings \ userhomedir \ temp_timestamp.zip write)。

以下是我已完成的步骤:

第1步:

  1. 创建了一个小程序,用于创建zip和文件,以及上传servlet和uploadFolder方法。
  2. 为该applet项目创建了一个已签名的jar。
  3. html代码是

    <Applet code="com.project.upload.FolderUploadApplet.class" name="uploadApp"
        archive="upload.jar"
        width="250" height="80" >
    </applet>
    
  4. JavaScript代码

    window.alert(uploadApp.uploadFolder(destionationPath));
    
  5. 第2步:

    在此之后我经历了一些论坛并决定与JNLP一起去JWS。在第1步中,我能够使用JavaScript调用applet方法但是当我使用JNLP时,我无法通过JavaScript调用我的applet方法。请找到以下代码段:

    HTML

    <Applet code="com.altair.cm.upload.FolderUploadApplet.class" id="xyz" archive="scmfu.jar">
        <param name="jnlp_href" value="folderupload.jnlp">  
    </applet>
    

    的JavaScript

       var app = document.getElementById("xyz");
       window.alert(app.uploadFolder(destionationPath));
    

    folderupload.jnlp

        <?xml version="1.0" encoding="UTF-8"?>
            <jnlp spec="1.0+" codebase="" href="">
            <information>
                <title>Folder Upload</title>
                <vendor>Team</vendor>
            </information>
            <security>
              <all-permissions/>
            </security>
            <resources>
                <!-- Application Resources -->
                <j2se version="1.6+"
                      href="http://java.sun.com/products/autodl/j2se"
                      <!-- secure java vm argument -->
                      java-vm-args="-Xmx1024M"/>
                <jar href="scmfu.jar"
                    main="true" />
                    <!-- secure properties -->
                <property name="sun.java2d.noddraw"
                    value="true"/>
                <property name="jnlp.myProperty"
                    value="a user-defined property"/>
            </resources>
            <applet-desc 
                 name="uploadApp"
                 main-class="com.altair.cm.upload.FolderUploadApplet.class"
                 width="600"
                 height="200">             
             </applet-desc>
             <update check="background"/>
            </jnlp>
        Applet Code :
        public class FolderUploadApplet extends JApplet {
    
        public String uploadFolder(String destinationPath){
             String fileName = UploadUtil.getInstance().processZipAndUpload(destinationPath,file.getPath());
             return fileName;
        }
    }
    

    任何人都可以建议我,更好的方式来访问本地文件系统并纠正我,如果我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果JS调用了一个受信任的applet,它通常会变成沙盒子。要解决这个问题,请查看将呼叫包裹在PrivilegedAction