Jetty:servlet与处理程序的区别

25

我正在尝试理解Jetty。

请告诉我:

  1. 何时最好使用Servlets和何时使用Handlers?

  2. 是否可以将Connectors与Servlets一起使用,以实现“每个请求一个线程模型”?

2个回答

34
在Jetty中,处理程序(Handlers)处理通过连接器(Connectors)发送的请求。其中一个处理程序,特别是ServletHandler,允许Jetty(大多数情况下)支持servlets。Servlet是一种可移植的Java EE概念,因此如果在Jetty中使用servlets,可以更加便携地设计应用程序。另一方面,它们可能会带来一些开销,因此您可能需要直接实现一个处理程序来处理通过Connector发送的请求。
如果您在Jetty中使用servlets,则可以依赖于servlet安全模型、会话支持等功能。如果这对您的应用程序不必要,则最好实现一个非常简单的处理程序。

1
@Karan:感谢你的声望! - Olaf

1

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

谢谢,非常有趣。 - Edward83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接