如何找到glassfish服务器的servlet API版本?

在编写servlet的过程中,我发现了一种方法

Since: Servlet 3.1 

我想如果我有NetBeans的自动提示使用它是因为我有Servlet版本。 但我找不到确认的地方。 我正在使用glassfish4.1作为容器。 如果我去mypathtoglassfish4.1\glassfish\modules那里我可以看到javax.servlet-api.jar并在清单中说:

 Implementation-Version: 3.1.0 

这是检查的正确方法吗? 我特别感兴趣的是能够告诉我的同事“去那个jar子检查那个属性”所以我确信我的代码将在他们的服务器上运行。

作为替代方案,我找到了一个网页Oracle GlassFish Server 3.1应用程序开发指南 ,其中说:“GlassFish Server支持Java Servlet规范3.0版。” 但显然对于Glassfish 3.1,我找不到每种玻璃鱼版本中的一种(甚至不是我的-4.1)

看看Java EE版本 。 Servlet(以及JSP,JSF,EJB,JPA等)版本与Java EE版本密切相关。

  • Java EE 8 = Servlet 4.0
  • Java EE 7 = Servlet 3.1
  • Java EE 6 = Servlet 3.0
  • Java EE 5 = Servlet 2.5
  • J2EE 1.4 = Servlet 2.4
  • J2EE 1.3 = Servlet 2.3
  • J2EE 1.2 = Servlet 2.2

查看服务器主页/文档如何呈现自己。 对于GlassFish ,目前(4.1):

世界上第一个Java EE 7应用服务器

所以,它是Servlet 3.1。

但是,有一个很大但是 ,这是一回事。 第二件事是,webapp的web.xml版本也起了作用。 不是每个人都知道。

如果您的webapp的web.xml声明符合Servlet 3.1,如下所示,

     

那么你的webapp也将真正运行在Servlet 3.1模式中。

但是,如果它声明符合Servlet 3.0,如下所示甚至更旧,

     

然后你的webapp将在Servlet 3.0兼容性模式下运行,即使部署到Servlet 3.1兼容容器! 上面会影响ServletContext#getMajorVersion()getMinorVersion() ,所以他们实际上对容器一无所知,只关注webapp本身。

如果您的webapp的web.xml包含 ,无论DTD和版本如何,那么它将以Servlet 2.3兼容性模式运行,即使声明了更新的XSD!

      

首先,看看比较GlassFish开源版本2.x和3.0.x. 您也可以在servlet中添加

 HttpSession session = request.getSession(); int majorVersion = session.getServletContext().getMajorVersion(); int minorVersion = session.getServletContext().getMinorVersion();