【问题标题】:Tomcat7 deploying app with custom filesTomcat7 使用自定义文件部署应用程序
【发布时间】:2015-01-09 17:37:53
【问题描述】:

这是我的 netBeans 项目的内容:

要使用名为“ErrorSet”的文件夹,我使用这一行:

File file = new File("ErrorSet/error_list.xml");

这个文件有必要导入,因为它包含自定义错误代码,重点:

当您想在 netbeans 项目中导入某些内容时,使用文件的默认“根”是项目名称文件夹,如 [projectName]/ErrorSet/error_list.xml ...

从 tocmat7 中的 dist 文件夹部署 [projectName].war 时,我需要将 ErrorSet 文件夹放在哪里,以便我可以正确使用新文件? File("ErrorSet/error_list.xml") 父目录在 tomcat7 之后变成了什么?

【问题讨论】:

    标签: java apache tomcat netbeans deployment


    【解决方案1】:

    请记住,Web PagesSource packages 是不同的东西。

    要将Source packages 中的类与自定义文件一起使用,您必须将文件放在Package 中并像这样使用getClass().gerResource()

    如果ErrorSet 文件夹是另一个包中的文件夹,请使用:

    File file = new File(getClass().getResource("ErrorSet/error_list.xml").toURI());
    

    如果error_list.xml 与类在同一个包中,只需使用getResource("error_list.xml")

    【讨论】:

    • 这很脆弱,在某些环境下是不可能的。你根本不应该在这里使用java.io.File
    【解决方案2】:

    不要使用java.io.File

    改为使用可以从ClassLoader 获取的流,如下所示:

    InputStream in = null;
    
    try {
      in = request.getServletContext().getResourceAsStream("/WEB-INF/ErrorSet/error_list.xml");
    
      if(null != in) {
        // read the XML
      }
    } finally {
      if(null != in) try { in.close(); }
                     catch (IOException ioe) { /* log this */ }
    }
    

    现在,将您的文件放入部署中的/WEB-INF/ErrorSet/error_list.xml

    无论文件是在文件系统上还是打包在未分解的 WAR 文件中,这都将起作用。它也可以在安装了 SecurityManager 且不允许 Web 应用程序读取文件的环境中工作,因为 servlet 容器可能确实具有读取这些文件的权限。

    【讨论】:

    • 注意到这一点,非常感谢您的回复,将在以后的应用程序中使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多