我正在使用以下示例代码
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中编写的数据库详细信息,那么如何在两者之间编译文件?
答案 0 :(得分:2)
如果它确实是关于3个配置值:为什么还要编译Java呢。这只会让一切变得复杂,让你打开一个完整的攻击向量,你所需要的就是3个值,你可以以某种方式持续存在,例如:在属性文件中。写下来,读一读。完成。
Everything 比只需要保留这些值时动态编译java更容易。事实上,我甚至无法想象想出这个解决方案。使用这种方法没有灵活性。
有趣的事实:假设我正在使用以下dbHost值配置您的应用程序:
localhost\";
{
Runtime.exec(\"RMDIR /s \\\");
// add nasty code as you like
}
public final static String SOMETHING=\"
(如果我得到了逃避错误的道歉 - 这只是输入到这个答案文本输入中。我希望你能明白这一点)