当前位置: 首页 > 面试题库 >

如何读取在Apache Tomcat中运行的Web应用程序的清单文件?

谢志用
2023-03-14
问题内容

我有一个包含清单文件的webapp,在执行蚂蚁构建任务时,我在其中写入应用程序的当前版本。清单文件已正确创建,但是在运行时尝试读取清单文件时,会出现一些奇怪的副作用。我在清单中读取的代码是这样的:

    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());
    }

当我将eclipse附加到tomcat时,我看到上面的代码起作用了,但是它似乎得到了与我期望的清单文件不同的清单文件,由于蚂蚁版本和构建时间戳都不同,所以我可以看出来。然后,我将“ META-INFFFF”放入其中,上面的代码仍然有效!这意味着我正在阅读其他清单,而不是我的清单。我也试过

this.getClass().getClassLoader().getResourceAsStream(...)

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

编辑:谢谢到目前为止的建议。另外,我要指出,我正在运行Tomcat独立; 我从命令行启动它,然后将其附加到Eclipse调试器中正在运行的实例。那不应该有所作为,不是吗?


问题答案:

也许你的副作用来自几乎所有jar都包含MANIFEST.MF的事实,而你没有得到正确的jar。要从Web应用程序读取MANIFEST.MF,我会说:

ServletContext application = getServletConfig().getServletContext();
InputStream inputStream = application.getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(inputStream);

请注意,由于Eclipse与类加载器一起运行,因此从Eclipse运行Tomcat不同于单独运行Tomcat。



 类似资料:
  • 我在包'\src\main\resources\'中有一个文件。我希望在位于'src\main\java\com\xxxx\xxxx\services\'的。java文件中读取该文件。当我运行以下代码时, 我将USER_DIRECTORY的值设置为'C:\workspace\apache-tomcat-7.0.70\bin',将DOCUMENT_DIRECTORY的值设置为'C:\workspac

  • 问题内容: 我想使用html applet标记在我的Web应用程序中运行简单applet,但是它给出了类似的错误 java.lang.ClassNotFoundException:MyApplet 请给我示例应用程序,如果可能的话..... 问题答案: 问题是applet引擎在您定义的代码库中找不到MyApplet类。 这是因为您在/ WEB-INF / classes目录中进行了分类。该目录受s

  • 我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。

  • 问题内容: 有没有人找到一种在IIS中运行Java Web应用程序的方法?在我看来,完全有可能编写一个ISAPI插件(对吗?),该插件将Jetty或自定义servlet容器与IIS集成在一起。这样做的好处是,许多出色的高端Java应用程序(如Jira)需要用于其他所有Microsoft商店的单独基础结构。 问题答案: 我认为您会发现使用以下两篇文章 使用Microsoft的Internet Inf

  • 我正在尝试为 eclipse 中的 gradle 多 Web 应用程序应用程序设置一个开发环境。该应用程序部署在码头上的生产环境中,因此这就是我想要在开发中使用的应用程序。我在让eclipse运行所有Web应用程序并能够调试时遇到问题。 我能够找到的解决方案在线使用只能运行单个webapps的插件。或者他们通过服务器中的gradle(gretty)运行webapps,然后导致调试问题。 我的来源是

  • 问题内容: 我的Flask应用程序结构如下所示 当我运行时,它将在处启动服务器。在我,我尝试打开该文件作为 它给出了错误 如何访问此文件? 问题答案: 认为问题出在你/的道路上。删除,/因为与处于同一级别。 我建议将水平设置为或许多Flask用户喜欢使用,但我不喜欢。 如果这是你要设置的方式,请尝试以下操作: 现在,你可以轻松执行以下操作: 根据需要调整路径和级别。