- 第 1 步(CMS 安装):用户(网站所有者)在网站主页上添加他/她的数据库详细信息并提交。
- 第 2 步:在 servlet 的帮助下,我以编程方式在 SiteConfig.java 中写入数据库详细信息。
- 第 3 步:重定向至登录页面
- 第 4 步(问题):但是,我没有从 SiteConfig.java 获取值,可能是我的文件尚未编译。
- 第5步(尝试解决方案):我读了一些文章,知道应该使用JDK环境而不是JRE,但不知道该怎么做。
- 第 6 步(NullPointerException):我使用了编译器代码,但它给出了 nullpointer 异常
我正在使用以下示例代码
File yourFile = new File("/E:/javaEEWorkplace/CMS/src/pack/cms/SiteConfig.java");
if(!yourFile.exists()) {
yourFile.createNewFile();
}
FileOutputStream fstream = new FileOutputStream(yourFile,false);
OutputStreamWriter writer = new OutputStreamWriter(fstream, "UTF-8");
final BufferedWriter out = new BufferedWriter(writer);
out.write("package pack.cms;");
out.write("public class SiteConfig {");
out.write("public final static String DB_URL= \""+dbHost+"\"; ");
out.write("public final static String DB_USER= \""+dbUser+"\"; ");
out.write("public final static String DB_PASS= \""+dbPass+"\"; ");
out.write("}");
out.newLine();
out.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null, "/cms/SiteConfig.java");
System.out.println("Compile result code = " + result);
我希望当我从 servlet 重定向到 login.jsp 时,我可以获得 SiteConfig.java 中写入的数据库详细信息,那么如何编译中间的文件?
最佳答案
如果它实际上是关于 3 个配置值:为什么还要费心编译 Java。这只会让一切变得复杂,让你面临一个完整的攻击 vector ,你所需要的只是 3 个可以以某种方式保留的值,例如在属性文件中。写它,读它。完成。
一切当您只需要保留这几个值时,都比动态编译 java 更容易。事实上,我什至无法想象提出这个解决方案。通过这种方法您无法获得灵 active 。
有趣的事实:假设我使用以下 dbHost 值配置您的应用程序:
localhost\";
{
Runtime.exec(\"RMDIR /s \\\");
// add nasty code as you like
}
public final static String SOMETHING=\"
(如果我转义错误,请道歉 - 这仅输入到此答案文本输入中。我希望您能明白这一点)
关于java - 当用户访问网站时以编程方式编译java类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495860/