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 |
现在我的疑惑从这里开始:
考虑这种情况:
假设我们使用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不包含它,则不能编译
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类和配置文件,例如
因此,您对问题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协定。