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

标签 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 异常

我正在使用以下示例代码

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/

相关文章:

java - 数独游戏序列化问题

java - 构建 Java 包(javac 到所有文件)

jquery - 用于 Eclipse 和 jQuery 代码辅助的 Aptana 插件

java - 如何在 JSP/Servlet 中重用数据库连接?

java - 如何使用 ant4eclipse 复制 eclipse 项目的所有引用的 jar?

eclipse - ubuntu 中树形 View Eclipse 的字体大小

java - 可移植 Eclipse : impossible to add software

java - 使用 H2 数据库的 Spring Boot 和 MVC 应用程序

java - Jnlp 文件未在 Internet Explorer 浏览器中下载

java - 连接spark master java的安全异常