java - 通过自定义 Tomcat Webapp Loader 访问嵌入式资源

标签 java tomcat

为了加载未放置在我的 Web 应用程序的 WEB-INF/lib 文件夹中的外部 JAR 文件,我通过扩展 org.apache.catalina 编写了一个自定义加载器类。 loader.WebappLoader 类。

它所做的是在启动时扫描文件夹(在我的例子中是 cataline_home\plugins\)并将此文件夹中的所有类/jar 添加到我的 Web 应用程序的类路径中。

一切正常,它加载了所有可用的类,我什至可以从我的应用程序中执行它们;但出于某种原因,这些类无法访问 JAR 中的属性文件。

假设我有一个名为 pluginsms.jar 的 JAR,在这个 JAR 中我有一个名为 sms.properties 的属性文件,我正在使用 ResourceBundle resource = ResourceBundle。 getBundle("sms"); 来读取这个文件,当我独立运行它时它工作得很好但是当我尝试将它加载到我的 web 应用程序中时(通过自定义 WebappLoader)它抛出:Resource未找到异常

下面是我的 WebappLoader 的源代码:

public class PluginLoader extends WebappLoader {

    @Override
    public void setContainer(Container container) {
        StandardContext ctx = (StandardContext) container;

        try {
            File pluginFolder = new File(System.getProperty("catalina.home"),
                    "plugins");

            for (File file : pluginFolder.listFiles()) {
                if (file.isDirectory()) {
                    continue;
                }
                if (file.getName().endsWith(".jar")) {
                    addRepository(file.toURI().toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        super.setContainer(container);
    }
}

最佳答案

我的猜测是您的属性文件位于 WEB-INF 或 Webcontent 文件夹中,并且您正在使用相对路径访问您的属性文件。虽然想要使用此属性文件的 jar 看不到此路径,但这就是您收到此异常的原因。我建议您对属性文件使用静态路径。希望对您有所帮助。

关于java - 通过自定义 Tomcat Webapp Loader 访问嵌入式资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9681488/

相关文章:

java - MySQL Java 更新语法

java - AIX 7.1 crontab 中的 Kafka Producer 出现 JAVA 错误 : Bad Major Version

java - Tomcat 7 和无效的 keystore 格式

java - Tomcat 数据源 - 连接池

java - 覆盖 Apereo CAS 5 时没有 web.xml

java - 如何判断第一次登录Java Web App?

java - 为什么带有正则表达式字符串的 Kotlin String.split 与 Java 不同?

java - 从 ADF 中的管理 Bean 设置只读属性

java - Elasticsearch 5 在长索引期间停止

java - 哪个用户对 Integrated Security 进行身份验证?