了解谁提供了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
现在我的怀疑从这里开始:
- 什么是servlet-api.jar?
- 谁提供这个jar子?
- 每个web容器都提供这个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 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中找到它(它取决于您的容器下载位置)。 当然,它是由其他容器提供的。