java 为什么在框架中使用servlet容器而不是netty

irtuqstp  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(203)

我一直在阅读和查看有关servlet、servlet容器和JVM的Web框架的示例。我现在想知道,使用servlet容器而不是像netty这样的容器有什么意义呢?
我不是100%正确地理解它,但是你可以部署一个由Java支持的网站的一种方法是编写servlet,或者更好的是编写一些使用servlet但将其抽象化的东西,这样你就可以选择你喜欢的servlet容器。
但是有像Spark和ktor这样的框架似乎不需要servlet容器,并且可以在像netty这样的东西上运行,但据我所知,如果你想在servlet容器上运行它们,你可以在servlet容器上运行它们。这让我很困惑如果我已经有了一个可以运行的Web应用程序,并将其自身绑定到一个端口以工作,并且有一个工作引擎来处理网络IO,我为什么要这样做呢?为了能够使用servlet过滤器和其他标准化的东西?如果我在nginx后面有一个netty支持的应用程序,会有问题吗?
我想我知道servlet和servlet容器是什么,但我不明白它们提供了什么(只是一些标准化?))

fivyi3re

fivyi3re1#

Servlet的存在是由于历史背景。在过去,Java EE Web服务器是运行Web服务(如WebLogic、JBOSS等)的流行方式。我们过去所做的是创建一个遵循servlet规范的Java服务,然后这些Java EE Web服务器中的任何一个都可以运行它。我个人更喜欢不依赖Servlet规范的现代方法,因为现代方法提供了更好的性能。

eufgjt7s

eufgjt7s2#

当您的项目使用基于Java Servlet的Web框架和/或项目生成WAR文件时,需要servlet容器。这仅仅是因为servlet容器对于解析web.xml和/或注册和运行@WebServlet/@WebFilter/@WebListener注解类和/或将WAR文件部署到活动环境是必不可少的。
基于Java Servlet的Web框架的例子有:

  • 雅加达面孔
  • Spring MVC
  • Struts
  • 瓦丁

但是,如果您不使用任何基于Java Servlet的Web框架(即你不使用jakarta.servlet.*依赖的任何地方,也不是可传递的)该项目不产生一个WAR文件,但一个JAR文件,那么你可以简单地使用一个嵌入式服务器,可执行从main()方法,如Netty沿着基于Java的框架响应HTTP请求。这些基本上被称为Java微服务框架,它们经常与基于JavaScript的Web框架(如React和Angular)结合使用。
这些Java微服务框架的例子有:

  • 雅加达REST
  • quarkus
  • 垂直x
  • 微型宇航员

相关问题