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

Cur*_*ind 16 java servlets java-ee tomcat7

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

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

import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {
    // Remaining code here
}
Run Code Online (Sandbox Code Playgroud)

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

javac -classpath /path/where/jar/is/servlet-api.jar
Run Code Online (Sandbox Code Playgroud)

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

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

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

icz*_*cza 14

它是什么?

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应用程序(FirstServlet如果Java EE不包含它,则无法编译您的类).

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)中,该文件只是一个包含静态文件,编译的java类和配置文件web.xml等的zip文件.您将能够运行您编译的Web应用程序在任何Servlet容器中(但是可以阅读).

所以回答你的问题#5是:

Servlet API有多个版本,Java EE平台还有更多版本,而不仅仅是Servlet API(例如Enterprise Java Beans).但是可以肯定地说,如果您只使用Servlet API,那么实现该版本Servlet API的所有Servlet容器都将能够运行您的Web应用程序.

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