可以安排一些 html/javascript 以便它可以整齐地包装一个单独的纯 java 块
不,Java 之于 Javascript 就像汽车之于地毯一样。无论浏览器对 Javascript 的支持程度如何,都不能保证它们包含 Java 运行时。他们可能会,但支持 Java 的机会与支持 Flash 的机会大致相同(Flash 获胜)。它只是一个插件。
除非您将整个 Java 编译器和解释器包装在 javascript 中(将它们编译为 javascript),否则您不能完全在客户端执行此操作。即使那样,它也会很慢。你可以做什么:
选项1:
- 让用户写一段Java代码
- 将块发送到服务器
- 添加一堆Java代码,并存储到一个文件中。即:includes,类头,方法头,两个右大括号
- 调用服务器上的 java 编译器。这要求您在服务器上安装 JDK。
- 编译类后,将其打包到一个 jar 文件中,其中包含一堆其他的静态类和一个清单文件。
- 使用此 JAR 文件的 URL 响应客户端。
- 客户端创建一个新的
applet
或object
引用此 JAR 的标记,然后服务器将其提供给客户端。
- 如果用户在他的机器上有一个 JRE 并允许 Java 插件和小程序本身运行,那么你就完成了。
这是最简单的方法,但它不是最理想的(尤其是客户端必须确认的所有安全警告)。你可以这样做:
选项 2:
- 将完全静态的小程序提供给客户端
- 不要用已编译的类打包多个类
- 不要在运行时创建新的小程序元素,而是将 URL 传递给现有的小程序
- 然后小程序只加载编译后的类,然后用新的实现重新开始模拟。
还:
- jar 会占用大量空间(特别是如果您不加载类),因此如果上传的源代码没有明显保存,您可能希望在服务时自动删除 jar。
选项 3:
您可以将 Java 编译为 Javascript,但仅支持非常有限的 Java 子集。
一个这样的编译器是Google Web Toolkit的一个组成部分,旨在用 Java 编写整个网站。用户不需要在他的机器上安装 Java 运行时环境,但需要将自己限制为可有效编译为 Javascript 的 Java 子集(如果我没记错的话,你需要刮掉 java.util 的一半) .
底线:您可以让用户编写Java,然后让他观察结果,但是Java编译的繁重工作应该由服务器完成。如果用户没有 Java 插件,那么他就不能编写任何 Java 代码并期望它运行。此外,您最好知道如何用 Java 编写代码,包括类加载和 Javasript -> applet 通信。