关于jakarta ee:了解谁提供servlet-api.jar,是Web容器还是Java EE的一部分下载

Understanding who provides servlet-api.jar, is it web-container or part of Java EE download

我需要了解有关编译servlet所需的serlvet-api.jar的信息。

我正在构建一个简单的servlet,如下所示:

1
2
3
4
5
6
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {
    // Remaining code here
}

我知道我们需要servlet-api.jar文件来编译这个简单的servlet,如下所示:

1
javac -classpath /path/where/jar/is/servlet-api.jar

现在我的疑惑从这里开始:

  • 什么是servlet-api.jar?
  • 谁提供这个罐子?
  • 每个网络容器是否都提供此jar,例如Tomcat,Jboss,glassfish?每个供应商是否都为构建此简单Servlet所需的jar提供了"相同的名称"。
  • 当我们下载Java EE时,此jar是下载的一部分吗?还是我们将此文件作为Web容器的一部分?
  • 考虑这种情况:

    假设我们使用Tomcat编译/构建简单的servlet(即构建servlet所需的tomcat版本的jar)并创建一个.war文件。然后我们可以将战争部署到其他供应商容器中吗?


  • 这是什么?

    servlet-api jar是一个包含Servlet API规范的接口和类的库。 servlet-api jar仅包含Servlet规范的接口(API),因此您可以使用它来开发Web应用程序。

    在哪里可以得到它?

    在以下链接中提供:

    http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

    包含/捆绑的位置

    Servlet-api.jar是Java EE下载的一部分,因此您可以开发Web应用程序(如果Java EE不包含它,则不能编译FirstServlet类)。

    Servlet容器(例如Tomcat,JBoss,GlassFish等)也包含servlet-api.jar,否则它们将无法运行您的Web应用程序,此外,它们还包含作为接口一部分的接口的实现。 Servlet API。

    尽管名称并不总是相同的,并且它甚至可能不作为单独的jar存在,但Servlet API类可能捆绑在另一个jar中。

    但是,如果您只想为Servlet容器开发Web应用程序,或者想要创建/编写自己的Servlet API实现,则可以下载仅包含Servlet API的单独jar文件。看这里:

    http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

    可移植性

    如果您具有Servlet API,则无论它来自何处,都可以编译您的Web应用程序。编译Web应用程序后,可以选择将其打包到WAR文件(WAR = Web ARchive)中,该文件只是一个zip文件,其中包含您的静态文件,已编译的Java类和配置文件,例如web.xml等。能够在任何Servlet容器中运行已编译的Web应用程序(但请向前阅读)。

    因此,您对问题5的回答是:

    Servlet API有多种版本,而Java EE平台不仅仅具有Servlet API(例如Enterprise Java Bean)。但是可以肯定地说,如果仅使用Servlet API,则实现该Servlet API版本的所有Servlet容器都将能够运行您的Web应用程序。

    尽管不同Web应用程序的配置文件可能有所不同(这在Servlet API范围之外),所以您应始终检查目标Web应用程序的文档。


    What is servlet-api.jar?

    它是一个jar,提供编写Servlet所需的接口/类。

    Who provides this jar?

    任何servlet容器(例如Jetty或Tomcat)以及任何符合Java EE的应用程序服务器,例如JBoss / Wildfly,GlassFish,IBM WebSphere,Oracle WebLogic等。

    Does each web-container provide this jar e.g., Tomcat, Jboss, glassfish? And does each vendor provide the"same name" to the jar that is needed to build this simple Servlet.

    对于servlet api是的,因为它是一组接口,它允许对接口进行编程,而不是对类实现进行编程,因此我们避免对特定的应用程序服务器进行编程。

    包含实现的jar的名称中不得包含该名称的一部分。

    When we download Java EE , is this jar part of download? OR do we get this file as part of web container?

    在Oracle中提供的Java EE下载仅是GlassFish。这已经在前面讨论过了。

    Suppose we compile / build the simple servlet using Tomcat (i.e tomcat's version of jar needed to build the servlet) and create a .war file. Can we then deploy the war in some other vendor container?

    只要您不使用Tomcat特定的类,库或功能,那么是的,就不会有问题。否则,


    这是服务器容器供应商,需要提供此servlet-api,您可以在此目录树中找到它:C:\\\\ Program Files \\\\ Apache Software Foundation \\\\ Tomcat 6.0 \\\\ lib(取决于您的容器下载)地点)。当然,它是由其他容器提供的。


    基于POM文件,很容易检查很多事情。
    例如,Tomcat Catalina引用了tomcat-servlet-api(org.apache.tomcat的较新版本:servlet-api)

    也要注意,在调查依赖关系树时,它可能会引起一些混乱,因为Tomcat Embed根本不使用任何servlet-api jar,而只是在其内部指定Servlet API协定。