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

我正在尝试了解 Jetty。

请告诉我:

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

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

【问题讨论】:

    标签: servlets jetty embedded-jetty


    【解决方案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 集合中,一切都会正常工作。

    【讨论】:

    • 谢谢,很有趣。
    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多