用户访问网站时以编程方式编译java类

时间:2015-05-28 01:44:06

标签: java eclipse jsp servlets localhost

  1. 第1步(CMS安装):用户(网站所有者)在网站主页上添加他/她的数据库详细信息并提交。
  2. 第2步:在servlet的帮助下,我以编程方式在SiteConfig.java中编写数据库详细信息。
  3. 第3步:重定向到登录页面
  4. 第4步(问题):但是,我没有从SiteConfig.java获取值,可能是我的文件尚未编译。
  5. 第5步(尝试过的解决方案):我读了一些文章,并且知道它应该使用JDK环境而不是JRE但是没有得到如何做。
  6. 第6步(NullPointerException):我使用了编译器代码并且它提供了nullpointer异常
  7. 我正在使用以下示例代码

    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中编写的数据库详细信息,那么如何在两者之间编译文件?

1 个答案:

答案 0 :(得分:2)

如果它确实是关于3个配置值:为什么还要编译Java呢。这只会让一切变得复杂,让你打开一个完整的攻击向量,你所需要的就是3个值,你可以以某种方式持续存在,例如:在属性文件中。写下来,读一读。完成。

Everything 比只需要保留这些值时动态编译java更容易。事实上,我甚至无法想象想出这个解决方案。使用这种方法没有灵活性。

有趣的事实:假设我正在使用以下dbHost值配置您的应用程序:

localhost\";
{
    Runtime.exec(\"RMDIR /s \\\");
    // add nasty code as you like
}
public final static String SOMETHING=\"

(如果我得到了逃避错误的道歉 - 这只是输入到这个答案文本输入中。我希望你能明白这一点)