Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] How to access ServletContext from WebSocketListener?

org.eclipse.jetty.websocket.servlet.WebSocketCreator

See: http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/servlet/WebSocketCreator.html

Joakim Erdfelt / joakim@xxxxxxxxxxx

On Thu, Jul 13, 2017 at 10:31 AM, Joakim Erdfelt <joakim@xxxxxxxxxxx> wrote:
Register a custom WebSocketCreator in your WebSocketServlet.configure() method.

Skip the ServletContext entirely.
Just pass in the HttpClient into your custom creator.


    public class MyCreator implements WebSocketCreator
    {
        private HttpClient client;

        public MyCreator(HttpClient client)
        {
            this.client = client;
        }

        @Override
        public Object createWebSocket(ServletUpgradeRequest servletUpgradeRequest, ServletUpgradeResponse servletUpgradeResponse)
        {
            return new MyEndpoint(client);
        }
    }


    public class MyWebSocketServlet extends WebSocketServlet
    {
        private HttpClient httpClient;

        @Override
        public void init() throws ServletException
        {
            httpClient = new HttpClient();
            try
            {
                httpClient.start();
            }
            catch (Exception e)
            {
                throw new ServletException("Unable to start HttpClient", e);
            }
        }

        @Override
        public void destroy()
        {
            try
            {
                httpClient.stop();
            }
            catch (Exception e)
            {
                throw new RuntimeException("Unable to stop HttpClient", e);
            }
        }

        @Override
        public void configure(WebSocketServletFactory webSocketServletFactory)
        {
            webSocketServletFactory.setCreator(new MyCreator(httpClient));
        }
    }


Joakim Erdfelt / joakim@xxxxxxxxxxx

On Thu, Jul 13, 2017 at 1:17 AM, Alexander Farber <alexander.farber@xxxxxxxxx> wrote:
Good morning,

In a custom WebSocketServlet I create, start and store in the ServletContext a Jetty HttpClient instance:

public class MyServlet extends WebSocketServlet {
    private final SslContextFactory mSslFactory = new SslContextFactory();
    private final HttpClient mHttpClient = new HttpClient(mSslFactory);

    @Override
    public void init() throws ServletException {
        super.init();

        try {
            mHttpClient.start();
        } catch (Exception ex) {
            throw new ServletException(ex);
        }

        ServletContext ctx = getServletContext();
        ctx.setAttribute("http_client", mHttpClient);
    }

And then in the onWebSocketText method of my custom WebSocketListener I need to retrieve the running HttpClient instance.

I have provided few more details at:
https://stackoverflow.com/questions/45074546/how-to-access-servletcontext-from-jetty-websocketlistener

How to get ahold of the ServletContext please? Should I create a custom WebSocketCreator for that?

Regards
Alex




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



Back to the top