如何确定我有哪个版本的servlet-api.jar?

11

我从java2s.com下载了servlet-api.jar的副本。我怎样才能知道它是什么版本?该网站上没有相关信息。

编辑

啊,抱歉。我应该列出当我双击我获得的jar文件中的MANIFEST.MF文件时,WordPad输出的内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_06-b05 (Sun Microsystems Inc.)

你可以看到它并没有告诉我版本号,因此我才会问这个问题。


你想对这个JAR文件做什么?每当有人获取一个最初源自(大型)实现的单独文件,并且实际上不应该/不能单独使用时,我总是感到害怕。 - BalusC
我之前使用的是Tomcat 6,现在我正在迁移到Glassfish 3。我在Glassfish的层级结构中搜索了jar文件,但没有找到。我有其他问题要先解决,但我想知道当我迁移时是否需要引入我在Tomcat中引用的jar文件。 - volvox
你为什么想知道这个? 你是在使用命令控制台中的“javac”进行编译吗? 在Glassfish中,Servlet API位于“javaee.jar”中。顺便说一句,自Java 1.6以来,您可以在classpath中使用通配符“*”,因此您只需执行“/path/to/appserver/lib/*”而不需要单独定义每个JAR。 还要注意不要混合API实现。 确保您的“WEB-INF/lib”没有与servletcontainer特定的库重复。 - BalusC
现在更明白为什么你会这样做了。毕竟,这只是无知和胡乱尝试。我在你的另一个问题中发布了一个答案。希望它能在你的脑海中点亮一盏灯泡 :) - BalusC
@BalusC,虽然我理解您提供的指导,但是有一个简单明了的需求让我来到这个页面:我有一堆servlet-api.jar文件,不知道哪个是哪个。其中一个在Apache Tomcat 8文件夹中,另一个在我的Vaadin项目文件夹中。我知道Tomcat 8支持Servlet API 3.1,但是很想知道它们当前正在使用什么版本。同样的,对于Vaadin也是如此。复制.jar文件,将.jar重命名为.zip,解压到文件夹中并读取清单文件是确定文件内容的快速方法。 - Basil Bourque
显示剩余3条评论
5个回答

13

使用以下代码片段:

<%= session.getServletContext().getMajorVersion() %>.
<%= session.getServletContext().getMinorVersion() %>

那有什么问题呢? - Tires
同样的问题在这里。我发现这是最简单的方法。 - Ravi.Kumar
我的问题是由于负面下降投票。个人而言,我同意没有理由去操纵清单条目。 - Tires
谢谢Ravi,我也觉得这是最简单的。 - Saumil

11

您可以从 META-INF 获取它,您可以使用 WinRAR 或类似的压缩工具探索 jar 文件的内容。

Name: javax/servlet/
Specification-Title: Java API for Servlets
Specification-Version: 2.4  

就我个人而言,我更喜欢从Maven仓库下载jar包。


7
您可以使用以下方法从jar文件的META-INF目录中提取MANIFEST.MF:
jar xf servlet-api.jar META-INF/MANIFEST.MF

例如,随Tomcat一起提供的版本2.4的清单如下所示

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2_06-b03 (Sun Microsystems Inc.)

Name: javax/servlet/
Specification-Title: Java API for Servlets
Specification-Version: 2.4
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Implementation-Version: 2.4.public_draft
Implementation-Vendor: Apache Software Foundation

或者在shell中:$ unzip -q -c /opt/tomcat/apache-tomcat-6.0.32/lib/servlet-api.jar META-INF/MANIFEST.MF | grep '^Specification-Version' =产生=> Specification-Version: 2.5(注意(给OP):servlet-api * .jar通常不会与服务器本身分开“下载”; 因此,人们应该“知道”tomcat 6.0实现了servlet-api 2.5; jar本身可以被称为任何东西(就像glassfish的情况一样)) - michael
把以下关于编程的内容从英语翻译成中文。仅返回已翻译的文本:(抱歉,我刚意识到这是一个古老的问题;不知道为什么我会发现它是一个最近提出的问题(标记为java)。另外,为了添加一些实际有用的东西,这有点类似于http://serverfault.com/questions/384172/keeping-application-library-versions-in-synch-with-server的重复) - michael

0

它基本上在您的JAR的MANIFEST文件中,位于/META-INF/MANIFEST.MF下:

Name: javax/servlet/
Specification-Title: Java API for Servlets
Specification-Version: 3.0
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Implementation-Version: 3.0.FR
Implementation-Vendor: Apache Software Foundation

0

对于跟随者来说,如果它在jnlp分发中,则可能有一个相应的“version.xml”文件,告诉您每个jar的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接