当前位置: 首页 > 面试题库 >

Servlet容器中的Java Web应用程序与独立容器中的Java Web应用程序

申高卓
2023-03-14
问题内容

与在内置的Web服务器上运行独立的Java应用程序并在反向代理后面运行相比,构建一个小型的Java
Web应用程序以在Servlet容器(如Tomcat)中运行的优势是什么?

我已经使用Java大约一年了。我注意到启动Tomcat需要时间,并且由于类加载器问题,并非总是可以进行热重新部署。Servlet
API在我看来有些令人费解,尤其是从配置和RESTful设计的角度来看(实际上并没有完全支持它)。

另一方面,我注意到我的IDE可以以闪电般的速度编译和运行独立的应用程序。配置Apache进行反向代理很容易,嵌入式Jetty似乎可以应付我的一切。当我可以使用Restlet,Wicket等时,我不需要Servlet。能够更好地了解我的应用程序的工作原理(因为它没有与庞大的应用程序服务器集成),因此感觉很强大。堆栈走线较短。下载大小较小。最终用户配置更加容易。我猜测性能可能会更好,因为涉及的软件层较少。

但是,我想起了这句话,听起来通常听起来太好了,难以置信。所以我的问题是,为什么我不想让我的Web应用程序独立?Servlet容器为我们和/或我们真正需要但不知道的最终用户提供了什么?


问题答案:

这里有2个独立的问题:

  1. 我应该使用嵌入式服务器还是将其部署到容器中?

我认为您不应以一种或其他方式看到巨大的差异。还有更多的代码可以通过编程方式启动Jetty服务器,并且通过编程更容易进行配置。即使IDE对Web应用程序配置和部署的支持越来越好,但它仍然比独立应用程序差(这在定义上有点,因为有很多支持的东西)。

另一方面,应用程序服务器为您带来一些不错的好处,例如内置管理,内置作为服务运行的功能等。

您甚至可以使用混合方法:使用嵌入式服务器在本地进行开发,然后在生产中部署到容器中。但这有点奇怪:如果遇到制作适当的WAR文件的麻烦,IDE确实应该能够充分处理部署到容器中的问题。

顺便说一句,您对热重新部署有疑问很奇怪;除非您遇到一些奇怪的极端情况,否则Tomcat不应有任何问题。

  1. 我应该使用Servlet API吗?

这与#1是正交的。您可以很好地嵌入Jetty并实现Servlet。您还可以通过ServerServlet
http://www.restlet.org/documentation/1.0/faq#02在Tomcat中使用Restlet
API 。

我个人认为Servlet
API非常简单明了,您会获得并发和状态管理之类的好东西。我不太清楚不支持RESTful设计的含义,但是如果Restlets更好地满足您的需求,请使用…



 类似资料:
  • 关于从Spring Boot应用程序构建war并在独立的servlet容器中运行它的一般问题。我所看到的文档似乎与堆栈溢出的示例不一致。 这里的答案显示了我几个月前读到的这样做的方式。我在这里读到了这个,但是指南似乎已经改变了,失去了实际的示例应用程序。 这里的“configure”方法引用了主要的Spring Bootapplication.class。

  • 在独立AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty服务器是作为捆绑包安装在Felix OSGi容器中的? AEM启动时,哪一个将首先启动? 对于基于战争的安装,这将如何改变? 根据这个答案,两者都是可能的。但我想知道AEM采用哪种方法。

  • 问题内容: 我尝试在具有/tmp/.X11-unix装载的容器docker中运行一些Qt应用程序。我在这里看到 这可能很困难。 因此,当我在容器docker中运行kdevelop时,它不起作用(我有一个空窗口)。但是如果我运行qtcreator很好。 我认为差异来自Qt版本(kdevelop在Qt4和qtcreator在Qt5中开发)。我所有其他的qt5应用程序都可以正常工作,但在qt4中却没有一

  • 现在假设我们想要使用 Spark API 写一个独立的应用程序。我们将通过使用 Scala(用 SBT),Java(用 Maven) 和 Python 写一个简单的应用程序来学习。 我们用 Scala 创建一个非常简单的 Spark 应用程序。如此简单,事实上它的名字叫 SimpleApp.scala: /* SimpleApp.scala */ import org.apache.spark.S

  • 我正在开发一个使用Hibernate的简单JSF应用程序。我将所有必需的库导入WEB-INF/lib文件夹,并将它们指向类路径。但是当我尝试编译它时,我遇到了错误: 这是我创建SessionFactory并使用它的代码: 我在这里使用它: 那我做错了什么?我该怎么解决这个问题?

  • 问题内容: 我正在考虑开发由两部分组成的桌面应用程序: 用户界面(例如Java应用) 后端Node.js服务器 2个部分通过插座连接。不要问为什么我知道这很奇怪。 我将希望能够为客户提供带有安装程序的应用程序。我不希望用户必须自己安装Node.js。 有没有一种方法可以独立安装Node.js服务器,即无需在系统上全局安装Node.js。 对于任何(Windows,Linux,Mac OS X …)