了解谁提供了servlet-api.jar,它是web容器还是Java EE下载的一部分

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

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

import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends HttpServlet { // Remaining code here } 

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

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

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

  1. 什么是servlet-api.jar?
  2. 谁提供这个jar子?
  3. 每个web容器都提供这个jar,例如Tomcat,Jboss,glassfish吗? 并且每个供应商是否为构建这个简单Servlet所需的jar提供了“相同的名称”。
  4. 当我们下载Java EE时,这个jar是下载的一部分吗? 或者我们是否将此文件作为Web容器的一部分?
  5. 考虑这种情况:

    假设我们使用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 Beans)。 但可以肯定地说,如果您只使用Servlet API,那么实现该版本Servlet API的所有Servlet容器都将能够运行您的Web应用程序。

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

什么是servlet-api.jar?

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

谁提供这个jar子?

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

每个web容器都提供这个jar,例如Tomcat,Jboss,glassfish吗? 并且每个供应商是否为构建这个简单Servlet所需的jar提供了“相同的名称”。

对于servlet api是的,因为它是一组接口,它允许编程到接口而不是类实现,因此我们避免编程到特定的应用程序服务器。 包含实现的jar的名称不得具有此名称的一部分。

当我们下载Java EE时,这个jar是下载的一部分吗? 或者我们是否将此文件作为Web容器的一部分?

Oracle中提供的Java EE下载只是GlassFish。 这在以前有所涉及。

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

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

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