Java 将所有请求路由到单个servlet可以吗?

Java 将所有请求路由到单个servlet可以吗?,java,servlets,Java,Servlets,我对使用JavaServlets还不熟悉。从目前为止我所看到的情况来看,有很多方法可以完成url的初始路由,例如使用@WebServleturl模式以及使用web.xml 在我看来,web.xml确实是路由器。或者,我可以通配符所有路由到单个servlet,在某种程度上将其用作前端路由器,并使用类似于request.getPathInfo()的东西在Java中进行模式匹配,然后从中调用其他servlet。这意味着每个被调用的servlet都是一个新线程,对吗 我的问题是,这样做的含义是什么,例如

我对使用JavaServlets还不熟悉。从目前为止我所看到的情况来看,有很多方法可以完成url的初始路由,例如使用
@WebServlet
url模式以及使用web.xml

在我看来,web.xml确实是路由器。或者,我可以通配符所有路由到单个servlet,在某种程度上将其用作前端路由器,并使用类似于
request.getPathInfo()的东西在Java中进行模式匹配,然后从中调用其他servlet。这意味着每个被调用的servlet都是一个新线程,对吗


我的问题是,这样做的含义是什么,例如,如果这样做了,是否意味着servlet每次都会重新启动和初始化?这就是servlet的设计使用方式吗?将所有请求路由到一个servlet,然后将该servlet用作路由器,这样可以吗?

您可以使用servlet将请求发送到其他对象以处理它们,请参见Front Controller模式(如Kayaman所述)或Spring的DispatcherServlet,它不将请求路由到其他servlet,而是路由到控制器。其想法是servlet很笨重,很难测试,并且需要一个servlet容器来实例化它们,因此最好将servlet限制为单个调度器,并让控制器完成大部分工作。使用Spring,控制器可以由容器管理,因此它们可以比servlet更容易地注入其他组件

servlet在启动时初始化,同一个实例处理所有请求(或者从技术上讲,servlet容器可能被允许实例化多个实例,但您不应该指望它),您应该假设只有一个servlet实例。看


servlet不应该包含任何可变状态,因为多个线程将同时调用同一实例上的方法。以前有一个选项可以生成单线程servlet(),但它对吞吐量影响太大,因此被弃用。每个HTTP请求都从servlet容器的线程池中分配了自己的线程,并且在发送响应之前,该线程一直与请求保持在一起,线程不是特定于特定servlet的。

您可以使用servlet将请求发送给其他对象以处理它们,请参见前端控制器模式(如Kayaman所述),或者Spring的DispatcherServlet,它不将请求路由到其他Servlet,而是路由到控制器。其想法是servlet很笨重,很难测试,并且需要一个servlet容器来实例化它们,因此最好将servlet限制为单个调度器,并让控制器完成大部分工作。使用Spring,控制器可以由容器管理,因此它们可以比servlet更容易地注入其他组件

servlet在启动时初始化,同一个实例处理所有请求(或者从技术上讲,servlet容器可能被允许实例化多个实例,但您不应该指望它),您应该假设只有一个servlet实例。看


servlet不应该包含任何可变状态,因为多个线程将同时调用同一实例上的方法。以前有一个选项可以生成单线程servlet(),但它对吞吐量影响太大,因此被弃用。每个HTTP请求都从servlet容器的线程池中分配了自己的线程,并且在发送响应之前,该线程一直与请求保持在一起,线程并不特定于特定的servlet。

有一种称为
前端控制器的设计模式,它正是这样做的。所有请求都被路由到单个servlet(例如
Spring
中的
DispatcherServlet
),然后将请求定向到处理实际业务逻辑的非servlet类


前端控制器通常执行有助于编写非servlet类的附加操作。

有一种称为
前端控制器的设计模式,它正是这样做的。所有请求都被路由到单个servlet(例如
Spring
中的
DispatcherServlet
),然后将请求定向到处理实际业务逻辑的非servlet类


前端控制器通常会执行其他有助于编写非servlet类的操作。

您的许多次要问题都不清楚,但没有任何东西阻止您使用单个servlet进行路由,而且有许多框架正是这样做的。我投票决定结束,因为这个问题主要是基于观点,你的很多次要问题都很不清楚,但没有任何东西阻止你使用单个servlet进行路由,有许多框架正是这样做的。我投票决定结束,因为这个问题主要是基于观点的。,