我一直在阅读和查看有关servlet、servlet容器和JVM的Web框架的示例。我现在想知道,使用servlet容器而不是像netty这样的容器有什么意义呢?
我不是100%正确地理解它,但是你可以部署一个由Java支持的网站的一种方法是编写servlet,或者更好的是编写一些使用servlet但将其抽象化的东西,这样你就可以选择你喜欢的servlet容器。
但是有像Spark和ktor这样的框架似乎不需要servlet容器,并且可以在像netty这样的东西上运行,但据我所知,如果你想在servlet容器上运行它们,你可以在servlet容器上运行它们。这让我很困惑如果我已经有了一个可以运行的Web应用程序,并将其自身绑定到一个端口以工作,并且有一个工作引擎来处理网络IO,我为什么要这样做呢?为了能够使用servlet过滤器和其他标准化的东西?如果我在nginx后面有一个netty支持的应用程序,会有问题吗?
我想我知道servlet和servlet容器是什么,但我不明白它们提供了什么(只是一些标准化?))
2条答案
按热度按时间fivyi3re1#
Servlet的存在是由于历史背景。在过去,Java EE Web服务器是运行Web服务(如WebLogic、JBOSS等)的流行方式。我们过去所做的是创建一个遵循servlet规范的Java服务,然后这些Java EE Web服务器中的任何一个都可以运行它。我个人更喜欢不依赖Servlet规范的现代方法,因为现代方法提供了更好的性能。
eufgjt7s2#
当您的项目使用基于Java Servlet的Web框架和/或项目生成WAR文件时,需要servlet容器。这仅仅是因为servlet容器对于解析
web.xml
和/或注册和运行@WebServlet/@WebFilter/@WebListener
注解类和/或将WAR文件部署到活动环境是必不可少的。基于Java Servlet的Web框架的例子有:
但是,如果您不使用任何基于Java Servlet的Web框架(即你不使用
jakarta.servlet.*
依赖的任何地方,也不是可传递的)和该项目不产生一个WAR文件,但一个JAR文件,那么你可以简单地使用一个嵌入式服务器,可执行从main()
方法,如Netty沿着基于Java的框架响应HTTP请求。这些基本上被称为Java微服务框架,它们经常与基于JavaScript的Web框架(如React和Angular)结合使用。这些Java微服务框架的例子有: