在Web应用程序中获取MANIFEST.MF的句柄

代码审查是我工作的一部分,您不知道我见过的废话。 就像有人指出的那样,有时候我写的也是废话🙂

但是,在所有情况下,这都是因为某些开发人员对事物的工作原理并不了解:大多数开发人员几年前(在大学或高级开发人员中)学到了一些东西,尽管技术不断发展,但他们不会定期挑战这些信息。 其他人只是在谷歌上搜索问题,然后将其摘要复制粘贴到他们的环境中。

这篇小文章基本上是一种操作方法,描述了在Web应用程序上下文中获取清单上的句柄的正确方法。 看起来很容易,但是有很多方法可以做到,据我所知,目前只有一种是正确的方法。

首先,一个简单的方法是这样的:

InputStreaminputStream=getClass().getClassLoader().getResourceAsStream("/META-INF/MANIFEST.MF");
Manifestmanifest=newManifest(inputStream);

为什么这样? 因为依赖于您的类加载策略,所以您将获取另一个清单,该清单与Web应用程序无关:例如,当使用默认的类加载策略(Parent-First)时,上述代码片段将附带获取EAR清单。

出于相同的原因,另一个错误代码如下:

URLurl=getClass().getProtectionDomain().getCodeSource().getLocation();
InputStreaminputStream=url.openStream();
Manifestmanifest=newManifest(inputStream);

最后,人们还可以尝试将战争作为一个文件,然后在其中进行阅读:忘记此路径,因为我们不知道WAR是被包装在EAR中还是以爆炸格式部署(或不部署)。

不,唯一的方法(在撰写本文时)是使用应用程序服务器提供的API:

ServletContextapplication=getServletConfig().getServletContext();
InputStreaminputStream=application.getResourceAsStream("/META-INF/MANIFEST.MF");
Manifestmanifest=newManifest(inputStream);

就是这样:直接使用兼容的应用程序服务器提供给我们的东西这里以Maven / Eclipse格式提供了显示版本的webapp示例的源。

翻译自: https://blog.frankel.ch/get-the-handle-on-the-manifest-mf-in-a-webapp/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值