25

我试图了解码头。

请告诉我:

  1. 什么时候使用 Servlet 更好,什么时候使用 Handler?

  2. 我可以将连接器与 Servlet 一起用于“每个请求的线程模型”吗?

4

2 回答 2

32

在 Jetty 中,处理程序处理来自连接器的请求。具体来说ServletHandler,其中一个处理程序允许 Jetty(主要)支持 servlet。Servlet 是一个可移植的 Java EE 概念,因此如果您在 Jetty 中使用 servlet,您可以以更可移植的方式设计您的应用程序。另一方面,它们可能会带来一些开销,因此您可能希望直接实现一个处理程序来处理来自连接器的请求。

如果您在 Jetty 中使用 servlet,您可以依赖 servlet 安全模型、会话支持等。如果您的应用程序不需要这些,您最好实现一个非常简单的处理程序。

于 2011-06-21T20:16:47.450 回答
1

我在玩它时发现了一个有趣的观察结果。我有一个基于码头的应用程序(dropwizard.io),在这里我计划在实际之后添加处理程序(它有特殊的用例)

server.start()

如果服务器已经启动,使用org.eclipse.jetty.servlet.ServletContextHandler.insertHandler(HandlerWrapper handler)它只会抛出。illegalStateException: STARTED因为:

public void setHandler(Handler handler) {
        if (isStarted())
            throw new IllegalStateException(STARTED);
        //..

但如果org.eclipse.jetty.servlet.ServletContextHandler.addServlet(ServletHolder servlet,String pathSpec)它会将您添加servlet到现有的 servlet 集合中,一切都会正常工作。

于 2018-02-05T19:34:04.540 回答