从Javascript调用Applet方法
我有一个小程序可以上传特定文件夹中的一些文件并删除它们,但当我从javascript代码调用小程序函数时,出现了一些问题,当我从init调用该函数时,它工作正常 我的小程序代码:从Javascript调用Applet方法,java,javascript,security,applet,Java,Javascript,Security,Applet,我有一个小程序可以上传特定文件夹中的一些文件并删除它们,但当我从javascript代码调用小程序函数时,出现了一些问题,当我从init调用该函数时,它工作正常 我的小程序代码: public class Uploader extends Applet { String serverPath; String clientPath; private JSObject win; @Override public void init() { serverPa
public class Uploader extends Applet {
String serverPath;
String clientPath;
private JSObject win;
@Override
public void init() {
serverPath = getParameter("serverPath");
clientPath = getParameter("clientPath");
try {
win = JSObject.getWindow(this);
} catch (JSException e) {
log.warning("Can't access JSObject object");
}
upload(topic,clientPath);
}
public void upload(String topic,String clientPath) {
log.log(Level.SEVERE, "upload functiond");
DefaultHttpClient client = new DefaultHttpClient();
MultipartEntity form = new MultipartEntity();
log.log(Level.SEVERE, "upload functiond2");
try {
File directory = new File(clientPath);
log.log(Level.SEVERE, "upload functiond2.2");
File[] files = directory.listFiles();
log.log(Level.SEVERE, "upload functiond2.5");
int i = 0;
for (File file : files) {
log.log(Level.SEVERE, "upload functiond2.6");
i++;
form.addPart("file" + String.valueOf(i), new FileBody(file));
System.out.println("adding file " + String.valueOf(i) + " " + file);
log.log(Level.SEVERE, "adding file " + String.valueOf(i) + " " + file);
}
log.log(Level.SEVERE, "upload functiond3");
form.addPart("topic", new StringBody(topic, Charset.forName("UTF-8")));
form.addPart("action", new StringBody(action, Charset.forName("UTF-8")));
form.addPart("path", new StringBody(serverPath, Charset.forName("UTF-8")));
HttpPost post = new HttpPost(serverPath);
....
这是我的javascript代码:
document.applet.upload(title,"c:\scan");
当我从javascript调用时,只打印日志:
log.log(Level.SEVERE, "upload functiond2.2");
请注意,当我从applet的init方法调用时,它工作正常
我将我的代码包装成一个PriviligedAction,但只向前走了一步并坚持下去
log.log(Level.SEVERE, "upload functiond2.5");
Java和JS的交互使安全性变得复杂。JRE不能信任JS,因此它决定了包括代码在内的整个“操作链”是不可信的。有一种方法可以解决它
代码需要包装在一个文件中,并使用doPrivileged。。。查看AccessController文档的顶部。以上方法可以查看示例用法。当我添加PrivilagedAction时,它会转到log.logLevel.SEVERE,upload function2.5;你能再帮我一次吗?我建议你发个帖子。我特别感兴趣的是……所暗示的捕获过程中会发生什么。。。。确保它包括一个e.printStackTrace;或者类似的方法,并在Java控制台中获取输出,以便在此处复制/粘贴。顺便说一句,这些日志消息中的大多数都应该是级别。INFOyes,这是一个空指针异常,我无法看到,在我的小程序类之前添加注释@SuppressWarningsserial后,异常出现在控制台。谢谢。忽略异常输出会有危险;很高兴你把它整理好了@安德烈·汤普森我的问题被你标记为重复,我来这里是为了感谢你;我也为我工作。