【问题标题】:How do I know what version of servlet-api.jar I have?我怎么知道我有什么版本的 servlet-api.jar?
【发布时间】:2010-10-12 10:05:25
【问题描述】:

我从 java2s.com 下载了 servlet-api.jar 的副本。我怎么知道它是什么版本?网站上没有参考。

编辑

啊。道歉。当我双击我得到的 jar 中的 MANIFEST.MF 文件时,我应该已经列出了写字板输出的内容:

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

如您所见,它没有告诉我版本因此问题。

【问题讨论】:

  • 你想用这个 JAR 文件做什么?每当有人抓取一个最初源自(大型)实现并且实际上不应该/不能单独使用的 单独 文件时,它总是让我感到害怕。
  • 我正在使用 Tomcat 6 并正在迁移到 Glassfish 3。我在 Glassfish 层次结构中搜索了 jar,但它不存在。我还有其他问题要先解决,但想知道是否需要拉入迁移时在 Tomcat 中引用的 jar。
  • 你为什么想知道这个?您是否在命令控制台中使用javac 进行编译?好吧,在 Glassfish 中,Servlet API 位于 javaee.jar 中。顺便说一句,从 Java 1.6 开始,您可以在类路径中使用通配符 *,这样您就可以只使用 /path/to/appserver/lib/* 而不是单独定义每个 JAR,这很高兴。也不要混合 API 实现。确保您的 WEB-INF/lib没有特定于 servletcontainer 的库。
  • 现在你为什么要这样做更有意义了。毕竟,这完全是无知和在黑暗中刺伤。我在您的other question 中发布了答案。希望它会在您的脑海中打开一个灯泡:)
  • 感谢您的意见,但说我一无所知是不礼貌的。我称之为学习。具体到这个问题,我在只处理过 Tomcat 之前从未见过 sun-web.xml,因为自动生成的文件引用了 DOCTYPE 中的 servlet 版本,我只是想把它弄好。请不要从不同的问题中推断出东西。

标签: java servlets jar


【解决方案1】:

使用下面的代码 sn-p :

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

【讨论】:

  • 这有什么问题?
  • 同样的问题在这里。我发现这是最简单的方法
  • 我的问题是由于反对票。就个人而言,我同意没有理由摆弄清单条目。
  • 谢谢拉维,我也觉得这是最简单的
【解决方案2】:

你可以从 META-INF 中获取它,你可以使用 win rar 或类似的归档工具来探索 jar 文件的内容。

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

我个人更喜欢从 maven repo 下载 jar。

【讨论】:

    【解决方案3】:

    您可以通过使用从 jar 文件的 META-INF 目录中提取 MANIFEST.MF

    jar xf servlet-api.jar META-INF/MANIFEST.MF
    

    tomcat 自带的 2.4 版本的 manifest 如下所示

    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' =yields=> Specification-Version: 2.5(注意(给 OP):servlet-api*.jar 通常不会与服务器本身分开“下载”;所以应该“只知道”tomcat 6.0 实现了 servlet-api 2.5;jar 本身可以被称为任何东西(就像 glassfish 的情况一样))
    • (对不起,我刚刚意识到这是一个古老的问题;不知道为什么我发现它是一个最近提出的问题(标记为 java)。另外,只是为了添加一些真正有建设性的东西,这是类似于serverfault.com/questions/384172/…)
    【解决方案4】:

    它基本上在/META-INF/MANIFEST.MF 下的 JAR 清单文件中:

    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
    

    【讨论】:

      【解决方案5】:

      对于追随者,如果它在 jnlp 发行版中,可能会有一个随附的“version.xml”文件告诉您每个 jar 分别是什么版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2014-04-12
        • 2010-10-12
        • 2011-09-12
        • 1970-01-01
        相关资源
        最近更新 更多