了解谁提供了servlet-api.jar,它是web容器还是JavaEE下载的一部分
我需要了解serlvet-api.jar,它是编译servlet所必需的 我正在构建一个简单的servlet,如下所示:了解谁提供了servlet-api.jar,它是web容器还是JavaEE下载的一部分,java,jakarta-ee,servlets,tomcat7,Java,Jakarta Ee,Servlets,Tomcat7,我需要了解serlvet-api.jar,它是编译servlet所必需的 我正在构建一个简单的servlet,如下所示: import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends HttpServlet { // Remaining code here } javac -classpath /path/where/jar/is/servlet-api.jar 我知道我
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
// Remaining code here
}
javac -classpath /path/where/jar/is/servlet-api.jar
我知道我们需要servlet-api.jar文件来编译这个简单的servlet,如下所示:
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
// Remaining code here
}
javac -classpath /path/where/jar/is/servlet-api.jar
现在我的怀疑从这里开始:
这是什么? ServletAPI jar是一个库,其中包含ServletAPI规范的接口和类。ServletAPI jar只包含servlet规范的接口(api),因此您可以使用它来开发web应用程序 在哪里可以买到它? 可通过以下链接获取: 包含/捆绑的位置 Servlet-api.jar是JavaEE下载的一部分,因此您可以开发web应用程序(如果JavaEE不包含您的
FirstServlet
类,则无法编译该类)
Servlet容器(如Tomcat、JBoss、GlassFish等)还包含Servlet-api.jar,否则它们将无法运行web应用程序,而且它们还包含作为Servlet api一部分的接口的实现
尽管名称并不总是相同的,甚至可能不作为单独的jar存在,但ServletAPI类可能捆绑在另一个jar中
但是,如果您只想为Servlet容器开发web应用程序,或者如果您想创建/编写自己的Servlet API实现,则可以下载一个单独的jar文件,该文件只包含Servlet API。看看这里:
可移植性
如果您有ServletAPI,那么您可以编译web应用程序,无论它来自何处。编译web应用程序后,您可以选择将其打包到WAR文件(WAR=web ARchive)中,该文件只是一个zip文件,包含静态文件、编译的java类和配置文件,如web.xml
等,您将能够在任何Servlet容器中运行编译的web应用程序(但向前读取)
因此,对你的问题5的回答是:
ServletAPI有多个版本,JavaEE平台不仅仅是ServletAPI(例如企业JavaBeans)。但是可以肯定地说,如果您只使用ServletAPI,那么实现该版本ServletAPI的所有Servlet容器都将能够运行您的web应用程序
但是,不同web应用程序的配置文件可能不同(这超出了Servlet API的范围),因此,您应该始终检查目标web应用程序的文档。需要提供此servlet api的是服务器容器供应商。您可以在以下目录树C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib中找到它(这取决于您的容器下载位置)。当然,它是由其他容器提供的 什么是servlet-api.jar 它是一个jar,提供编写servlet所需的接口/类 谁提供这个罐子 任何servlet容器,如Jetty或Tomcat,以及任何符合JavaEE的应用服务器,如JBoss/Wildfly、GlassFish、IBMWebSphere、OracleWebLogic等 是否每个web容器都提供这个jar,例如Tomcat、Jboss、glassfish?每个供应商是否为构建这个简单Servlet所需的jar提供了“相同的名称” ServletAPI是这样的,因为它是一组接口,因此我们可以避免编程到特定的应用服务器。包含实现的jar的名称不能有此名称的公共部分 当我们下载JavaEE时,这个jar是下载的一部分吗?或者我们是否将此文件作为web容器的一部分获取 Oracle提供的JavaEE下载只是GlassFish。这已在前面介绍过 假设我们使用Tomcat编译/构建简单的servlet(即构建servlet所需的Tomcat版本的jar),并创建一个.war文件。然后我们可以在其他供应商容器中部署war吗
只要您不使用Tomcat特定的类、库或特性,那么是的,就不会有问题。否则,就不会了。基于POM文件可以轻松检查很多内容。 例如,有对tomcat servlet api(更新版本的)的引用
另外请注意,在调查依赖关系树时,它可能会引起一些混乱,因为它根本不使用任何ServletAPI jar,而只是在自身内部指定ServletAPI契约 谢谢你的回复。如果可能,你能为第5点提供帮助吗?谢谢#5的答案取决于具体情况,不是肯定的。你的答案很好,但你可以添加一个细节:
servlet api.jar
只包含api。容器中的JAR包含API和实现类。在容器外运行测试时,您必须注意:您可能需要存根或模拟实现类(例如,从Oracle Glassfish获得一个完整的jar)。感谢您的回复。非常感谢您提供的详细信息,非常感谢。