相关疑难解决方法(0)

如何读取在apache tomcat中运行的webapp的清单文件?

我有一个包含清单文件的webapp,我在其中编写了一个ant构建任务期间我的应用程序的当前版本.清单文件是正确创建的,但是当我尝试在运行时读取它时,我会得到一些奇怪的副作用.我在清单中阅读的代码是这样的:

    InputStream manifestStream = Thread.currentThread()
                                 .getContextClassLoader()
                                 .getResourceAsStream("META-INFFFF/MANIFEST.MF");
    try {
        Manifest manifest = new Manifest(manifestStream);
        Attributes attributes = manifest.getMainAttributes();
        String impVersion = attributes.getValue("Implementation-Version");
        mVersionString = impVersion;
    }
    catch(IOException ex) {
        logger.warn("Error while reading version: " + ex.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

当我将eclipse附加到tomcat时,我看到上面的代码有效,但它似乎得到了一个不同于我预期的清单文件,我可以告诉它,因为ant版本和构建时间戳都是不同的.然后,我在那里放了"META-INFFFF",上面的代码仍然有效!这意味着我正在阅读其他一些清单,而不是我的清单.我也试过了

this.getClass().getClassLoader().getResourceAsStream(...)
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.从tomcat中运行的webapp内部读取清单文件的正确方法是什么?

编辑:感谢您的建议到目前为止.另外,我应该注意到我正在运行tomcat独立; 我从命令行启动它,然后附加到Eclipse调试器中正在运行的实例.这不应该有所作为,不是吗?

java tomcat jar manifest

46
推荐指数
3
解决办法
7万
查看次数

使用特殊的自动启动servlet在启动时初始化并共享应用程序数据

我需要获得一些配置并连接到某处的外部资源/对象/系统并将其存储在应用程序范围内.

我可以看到两种设置应用程序的方法:

  • 覆盖init()现有的servlet和所需的代码,并将所有构造的对象保留在同一个servlet中.
  • 拥有某种初始化servlet并使用它init()来完成工作.然后存储创建的对象ServletContext以与其他servlet共享.

以上哪种方法更好?有没有更好的方法在servlet之间共享对象?直接从彼此调用它们......?

servlets initialization data-sharing

32
推荐指数
1
解决办法
1万
查看次数

标签 统计

data-sharing ×1

initialization ×1

jar ×1

java ×1

manifest ×1

servlets ×1

tomcat ×1