从 war 文件中的 xml 文件中获取值而不提取

Get a value from xml file inside a war file without extracting

我想从我的 war 文件中存在的 jsp 文件中读取一行。 jsp 文件的路径总是相同的,所以我知道确切的查找位置。如何在不提取整个 war 文件的情况下从 war 文件中的 jsp 中提取行?我不想提取,因为它至少需要几分钟才能完成,我只想从该行获取版本值 (1.2.3.210)。这就是结构的样子 -

war file name --> final.war 
jsp location inside the war file --> folder1/folder2/version.jsp
line inside the jsp file --> <param><value>version=1.2.3.210</value></param>

一个.war文件只是一个zip文件,所以我们可以使用unzip做你想做的事。假设我有一个包含以下内容的文件 sample.war

Archive:  ../sample.war
  Length      Date    Time    Name
---------  ---------- -----   ----
      376  07-30-2007 16:26   hello.jsp
        0  07-30-2007 16:26   images/
     1441  07-30-2007 16:26   images/tomcat.gif
      636  07-30-2007 16:26   index.html
        0  07-30-2007 17:18   META-INF/
      106  07-30-2007 17:18   META-INF/MANIFEST.MF
        0  07-30-2007 16:26   WEB-INF/
        0  07-30-2007 16:26   WEB-INF/lib/
      813  07-30-2007 16:26   WEB-INF/web.xml
        0  07-30-2007 16:26   WEB-INF/classes/
        0  07-30-2007 16:26   WEB-INF/classes/mypackage/
     1480  07-30-2007 16:26   WEB-INF/classes/mypackage/Hello.class
---------                     -------
     4852                     12 files

我可以使用 unzip 将文件 index.html 提取到标准输出,如下所示:

unzip -p sample.war index.html

要从输出中获取特定行,您可以将其通过管道传输到 sed。例如,要提取包含 <title>:

的行
$ unzip -p sample.war index.html | sed -n '/<title>/p'
<title>Sample "Hello, World" Application</title>

这对我有用。我不必安装 jar,因为它已经在 CentOS

中可用
jar -xf final.war folder1/folder2/version.jsp