Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Equivalent of HandlerList for Servlets

Since you haven't details what your ServletHandler are actually trying to do ("stage 1, stage 2, stage 3" means nothing), this reply is generic.

A ServletContextHandler belongs to a single context Path.

It manages the ServletContext for all Servlets and Filters and Listeners belonging to that ServletContext.

Each Servlet has a url-pattern it can belong to
Each Filter has a url-pattern it can participate in.

If you have multiple ServletHandlers, and expect them to respond on the same url-pattern, then you have a problem.

You should only have 1 "endpoint" to a HTTP resource.
You *can* have that single "endpoint" respond differently depending on request details (such as method, Content-Type, existence of request body content, Accept headers, Cache headers, etc...)
But that difference isn't handled by multiple servlets, it's handled by a single servlet, with logic to produce different responses accordingly.

If you have multiple ServletHandlers because some handlers respond on different url-patterns, then great!  You just use different url-patterns when you add them to the ServletContextHandler.

If you have multiple ServletHandlers because each handler does some subset of actions, then you are abusing ServletHandlers.
Use Filters for subsets and Servlets for "endpoint" logic.

Joakim Erdfelt / joakim@xxxxxxxxxxx


On Fri, Dec 13, 2019 at 4:37 AM Karel Goderis <karel.goderis@xxxxxx> wrote:
Yes, 

I am using a ServletConextHandler, however the question is : can you do the equivalent of HandlerList but with Servlets. AFAIK it is impossible to register different Servlets using the same Context path

Tx
K

On 13 Dec 2019, at 11:33, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:

Use a ServletContextHandler.

Don't use ServletHandlers, those are internal structures not meant for direct usage.

Use ServletContextHandler.addServlet() and ServletContextHandler.addFilter()
You can add the Servlet as a Class reference, or as a Servlet instances (via a ServletHolder).

Joakim Erdfelt / joakim@xxxxxxxxxxx


On Fri, Dec 13, 2019 at 2:36 AM Karel Goderis <karel.goderis@xxxxxx> wrote:
Hi,

I have the practical need of splitting up a protocol implementation in 3 “parts”, because the protocol does a kind of “staged” setup whereby a connection goes through these steps in order. I also need the benefits of Contexts to maintain some state. Ideally, I would like to have the equivalent of a HandlerList but for Servlets being added to a ServletContextHandler. How could this be achieved?

Wrt to this question, I am confused about the ServletHolder.setServletHandler(). What is its purpose? Does it replace the handle() methods of the Servlet.class that is fed to the ServletHolder? Obviously, I tried to use setServletHandler() with a HandlerList, but that does not work. It is a bit lacking in the documentation and examples of how to used embedded Jetty.

My first attempt was something along the lines of

        HandlerList setupHandlers = new HandlerList();
        setupHandlers.addHandler(new StageOneHandler());
        setupHandlers.addHandler(new StageTwoHandler());
        setupHandlers.addHandler(new StageThreeHandler());

        ServletHandler setupHandler = new ServletHandler();
        setupHandler.setHandler(setupHandlers);

        ServletHolder setupHolder = new ServletHolder(DefaultServlet.class);
        pairSetupHolder.setServletHandler(setupHandler);

But I clearly missed something from an architecture point of view

The (IMO) ugly workaround is to put the 3 stages in a regular Servlet, and do an if-then based on some bytes of the protocol payload, but I prefer the more beautiful solution ;-) Any help is welcome

Thanks
Karel
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users

_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/jetty-users

Back to the top