码头:servlet 与处理程序

Posted

技术标签:

【中文标题】码头:servlet 与处理程序【英文标题】:Jetty: servlets vs handlers 【发布时间】:2011-05-08 23:48:48 【问题描述】:

我正在尝试了解 Jetty。

请告诉我:

    什么时候最好使用 Servlet,什么时候使用 Handlers?

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

@Karan:感谢您的声誉!【参考方案2】:

我在玩它时发现了一个有趣的观察结果。我有一个基于码头的应用程序(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 集合中,一切都会正常工作。

【讨论】:

谢谢,很有趣。

以上是关于码头:servlet 与处理程序的主要内容,如果未能解决你的问题,请参考以下文章

在 servlet 中以编程方式调用过滤器(使用码头/火花创建)?

我应该如何从带有嵌入式码头的 web.xml 加载 servlet?

如何将 ActiveMQ AJAX servlet 与 CORS 一起使用?

tomcat上servlet程序的配置与处理servlet请求过程

tomcat上servlet程序的配置与处理servlet请求过程

使用 web.xml 配置嵌入式码头?