Search in sources :

Example 41 with HttpServerExchange

use of io.undertow.server.HttpServerExchange in project undertow by undertow-io.

the class DeploymentManagerImpl method undeploy.

@Override
public void undeploy() {
    try {
        deployment.createThreadSetupAction(new ThreadSetupHandler.Action<Void, Object>() {

            @Override
            public Void call(HttpServerExchange exchange, Object ignore) throws ServletException {
                for (ServletContextListener listener : deployment.getDeploymentInfo().getDeploymentCompleteListeners()) {
                    try {
                        listener.contextDestroyed(new ServletContextEvent(deployment.getServletContext()));
                    } catch (Throwable t) {
                        UndertowServletLogger.REQUEST_LOGGER.failedToDestroy(listener, t);
                    }
                }
                deployment.destroy();
                deployment = null;
                state = State.UNDEPLOYED;
                return null;
            }
        }).call(null, null);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : HttpServerExchange(io.undertow.server.HttpServerExchange) ServletContextListener(javax.servlet.ServletContextListener) ServletContextEvent(javax.servlet.ServletContextEvent) ServletException(javax.servlet.ServletException)

Example 42 with HttpServerExchange

use of io.undertow.server.HttpServerExchange in project undertow by undertow-io.

the class DeploymentManagerImpl method deploy.

@Override
public void deploy() {
    final DeploymentInfo deploymentInfo = originalDeployment.clone();
    if (deploymentInfo.getServletStackTraces() == ServletStackTraces.ALL) {
        UndertowServletLogger.REQUEST_LOGGER.servletStackTracesAll(deploymentInfo.getDeploymentName());
    }
    deploymentInfo.validate();
    final DeploymentImpl deployment = new DeploymentImpl(this, deploymentInfo, servletContainer);
    this.deployment = deployment;
    final ServletContextImpl servletContext = new ServletContextImpl(servletContainer, deployment);
    deployment.setServletContext(servletContext);
    handleExtensions(deploymentInfo, servletContext);
    final List<ThreadSetupHandler> setup = new ArrayList<>();
    setup.add(ServletRequestContextThreadSetupAction.INSTANCE);
    setup.add(new ContextClassLoaderSetupAction(deploymentInfo.getClassLoader()));
    setup.addAll(deploymentInfo.getThreadSetupActions());
    deployment.setThreadSetupActions(setup);
    deployment.getServletPaths().setWelcomePages(deploymentInfo.getWelcomePages());
    if (deploymentInfo.getDefaultEncoding() != null) {
        deployment.setDefaultCharset(Charset.forName(deploymentInfo.getDefaultEncoding()));
    }
    if (deploymentInfo.getDefaultRequestEncoding() != null) {
        deployment.setDefaultRequestCharset(Charset.forName(deploymentInfo.getDefaultRequestEncoding()));
    } else if (deploymentInfo.getDefaultEncoding() != null) {
        deployment.setDefaultRequestCharset(Charset.forName(deploymentInfo.getDefaultEncoding()));
    }
    if (deploymentInfo.getDefaultResponseEncoding() != null) {
        deployment.setDefaultResponseCharset(Charset.forName(deploymentInfo.getDefaultResponseEncoding()));
    } else if (deploymentInfo.getDefaultEncoding() != null) {
        deployment.setDefaultResponseCharset(Charset.forName(deploymentInfo.getDefaultEncoding()));
    }
    handleDeploymentSessionConfig(deploymentInfo, servletContext);
    deployment.setSessionManager(deploymentInfo.getSessionManagerFactory().createSessionManager(deployment));
    deployment.getSessionManager().setDefaultSessionTimeout(deploymentInfo.getDefaultSessionTimeout());
    try {
        deployment.createThreadSetupAction(new ThreadSetupHandler.Action<Void, Object>() {

            @Override
            public Void call(HttpServerExchange exchange, Object ignore) throws Exception {
                final ApplicationListeners listeners = createListeners();
                deployment.setApplicationListeners(listeners);
                // now create the servlets and filters that we know about. We can still get more later
                createServletsAndFilters(deployment, deploymentInfo);
                // first initialize the temp dir
                initializeTempDir(servletContext, deploymentInfo);
                // then run the SCI's
                for (final ServletContainerInitializerInfo sci : deploymentInfo.getServletContainerInitializers()) {
                    final InstanceHandle<? extends ServletContainerInitializer> instance = sci.getInstanceFactory().createInstance();
                    try {
                        instance.getInstance().onStartup(sci.getHandlesTypes(), servletContext);
                    } finally {
                        instance.release();
                    }
                }
                listeners.start();
                deployment.getSessionManager().registerSessionListener(new SessionListenerBridge(deployment, listeners, servletContext));
                for (SessionListener listener : deploymentInfo.getSessionListeners()) {
                    deployment.getSessionManager().registerSessionListener(listener);
                }
                initializeErrorPages(deployment, deploymentInfo);
                initializeMimeMappings(deployment, deploymentInfo);
                listeners.contextInitialized();
                // run
                HttpHandler wrappedHandlers = ServletDispatchingHandler.INSTANCE;
                wrappedHandlers = wrapHandlers(wrappedHandlers, deploymentInfo.getInnerHandlerChainWrappers());
                wrappedHandlers = new RedirectDirHandler(wrappedHandlers, deployment.getServletPaths());
                if (!deploymentInfo.isSecurityDisabled()) {
                    HttpHandler securityHandler = setupSecurityHandlers(wrappedHandlers);
                    wrappedHandlers = new PredicateHandler(DispatcherTypePredicate.REQUEST, securityHandler, wrappedHandlers);
                }
                HttpHandler outerHandlers = wrapHandlers(wrappedHandlers, deploymentInfo.getOuterHandlerChainWrappers());
                outerHandlers = new SendErrorPageHandler(outerHandlers);
                wrappedHandlers = new PredicateHandler(DispatcherTypePredicate.REQUEST, outerHandlers, wrappedHandlers);
                wrappedHandlers = handleDevelopmentModePersistentSessions(wrappedHandlers, deploymentInfo, deployment.getSessionManager(), servletContext);
                MetricsCollector metrics = deploymentInfo.getMetricsCollector();
                if (metrics != null) {
                    wrappedHandlers = new MetricsChainHandler(wrappedHandlers, metrics, deployment);
                }
                if (deploymentInfo.getCrawlerSessionManagerConfig() != null) {
                    wrappedHandlers = new CrawlerSessionManagerHandler(deploymentInfo.getCrawlerSessionManagerConfig(), wrappedHandlers);
                }
                final ServletInitialHandler servletInitialHandler = SecurityActions.createServletInitialHandler(deployment.getServletPaths(), wrappedHandlers, deployment, servletContext);
                HttpHandler initialHandler = wrapHandlers(servletInitialHandler, deployment.getDeploymentInfo().getInitialHandlerChainWrappers());
                initialHandler = new HttpContinueReadHandler(initialHandler);
                if (deploymentInfo.getUrlEncoding() != null) {
                    initialHandler = Handlers.urlDecodingHandler(deploymentInfo.getUrlEncoding(), initialHandler);
                }
                deployment.setInitialHandler(initialHandler);
                deployment.setServletHandler(servletInitialHandler);
                // make sure we have a fresh set of servlet paths
                deployment.getServletPaths().invalidate();
                servletContext.initDone();
                return null;
            }
        }).call(null, null);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    // any problems with the paths won't get detected until the data is initialize
    // so we force initialization here
    deployment.getServletPaths().initData();
    for (ServletContextListener listener : deploymentInfo.getDeploymentCompleteListeners()) {
        listener.contextInitialized(new ServletContextEvent(servletContext));
    }
    state = State.DEPLOYED;
}
Also used : SendErrorPageHandler(io.undertow.servlet.handlers.SendErrorPageHandler) ServletContextListener(javax.servlet.ServletContextListener) RedirectDirHandler(io.undertow.servlet.handlers.RedirectDirHandler) ArrayList(java.util.ArrayList) PredicateHandler(io.undertow.server.handlers.PredicateHandler) HttpServerExchange(io.undertow.server.HttpServerExchange) ThreadSetupHandler(io.undertow.servlet.api.ThreadSetupHandler) HttpContinueReadHandler(io.undertow.server.handlers.HttpContinueReadHandler) DeploymentInfo(io.undertow.servlet.api.DeploymentInfo) MetricsCollector(io.undertow.servlet.api.MetricsCollector) HttpHandler(io.undertow.server.HttpHandler) ServletInitialHandler(io.undertow.servlet.handlers.ServletInitialHandler) ServletContainerInitializerInfo(io.undertow.servlet.api.ServletContainerInitializerInfo) ServletContextImpl(io.undertow.servlet.spec.ServletContextImpl) ServletException(javax.servlet.ServletException) CrawlerSessionManagerHandler(io.undertow.servlet.handlers.CrawlerSessionManagerHandler) SessionListener(io.undertow.server.session.SessionListener) ServletContextEvent(javax.servlet.ServletContextEvent)

Example 43 with HttpServerExchange

use of io.undertow.server.HttpServerExchange in project undertow by undertow-io.

the class ReverseProxyServer method main.

public static void main(final String[] args) {
    try {
        final Undertow server1 = Undertow.builder().addHttpListener(8081, "localhost").setHandler(new HttpHandler() {

            @Override
            public void handleRequest(HttpServerExchange exchange) throws Exception {
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.getResponseSender().send("Server1");
            }
        }).build();
        server1.start();
        final Undertow server2 = Undertow.builder().addHttpListener(8082, "localhost").setHandler(new HttpHandler() {

            @Override
            public void handleRequest(HttpServerExchange exchange) throws Exception {
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.getResponseSender().send("Server2");
            }
        }).build();
        server2.start();
        final Undertow server3 = Undertow.builder().addHttpListener(8083, "localhost").setHandler(new HttpHandler() {

            @Override
            public void handleRequest(HttpServerExchange exchange) throws Exception {
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.getResponseSender().send("Server3");
            }
        }).build();
        server3.start();
        LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient().addHost(new URI("http://localhost:8081")).addHost(new URI("http://localhost:8082")).addHost(new URI("http://localhost:8083")).setConnectionsPerThread(20);
        Undertow reverseProxy = Undertow.builder().addHttpListener(8080, "localhost").setIoThreads(4).setHandler(ProxyHandler.builder().setProxyClient(loadBalancer).setMaxRequestTime(30000).build()).build();
        reverseProxy.start();
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}
Also used : HttpServerExchange(io.undertow.server.HttpServerExchange) HttpHandler(io.undertow.server.HttpHandler) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) Undertow(io.undertow.Undertow) LoadBalancingProxyClient(io.undertow.server.handlers.proxy.LoadBalancingProxyClient)

Example 44 with HttpServerExchange

use of io.undertow.server.HttpServerExchange in project undertow by undertow-io.

the class WebSocketServlet method doGet.

@Override
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
    final ServletWebSocketHttpExchange facade = new ServletWebSocketHttpExchange(req, resp, peerConnections);
    Handshake handshaker = null;
    for (Handshake method : handshakes) {
        if (method.matches(facade)) {
            handshaker = method;
            break;
        }
    }
    if (handshaker == null) {
        UndertowLogger.REQUEST_LOGGER.debug("Could not find hand shaker for web socket request");
        resp.sendError(StatusCodes.BAD_REQUEST);
        return;
    }
    final Handshake selected = handshaker;
    facade.upgradeChannel(new HttpUpgradeListener() {

        @Override
        public void handleUpgrade(StreamConnection streamConnection, HttpServerExchange exchange) {
            WebSocketChannel channel = selected.createChannel(facade, streamConnection, facade.getBufferPool());
            peerConnections.add(channel);
            callback.onConnect(facade, channel);
        }
    });
    handshaker.handshake(facade);
}
Also used : HttpServerExchange(io.undertow.server.HttpServerExchange) WebSocketChannel(io.undertow.websockets.core.WebSocketChannel) HttpUpgradeListener(io.undertow.server.HttpUpgradeListener) StreamConnection(org.xnio.StreamConnection) Hybi07Handshake(io.undertow.websockets.core.protocol.version07.Hybi07Handshake) Hybi13Handshake(io.undertow.websockets.core.protocol.version13.Hybi13Handshake) Handshake(io.undertow.websockets.core.protocol.Handshake) Hybi08Handshake(io.undertow.websockets.core.protocol.version08.Hybi08Handshake)

Example 45 with HttpServerExchange

use of io.undertow.server.HttpServerExchange in project undertow by undertow-io.

the class HelloWorldServer method main.

public static void main(final String[] args) {
    Undertow server = Undertow.builder().addHttpListener(8080, "localhost").setHandler(new HttpHandler() {

        @Override
        public void handleRequest(final HttpServerExchange exchange) throws Exception {
            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
            exchange.getResponseSender().send("Hello World");
        }
    }).build();
    server.start();
}
Also used : HttpServerExchange(io.undertow.server.HttpServerExchange) HttpHandler(io.undertow.server.HttpHandler) Undertow(io.undertow.Undertow)

Aggregations

HttpServerExchange (io.undertow.server.HttpServerExchange)270 HttpHandler (io.undertow.server.HttpHandler)126 Test (org.junit.Test)109 IOException (java.io.IOException)87 UnitTest (io.undertow.testutils.category.UnitTest)45 BeforeClass (org.junit.BeforeClass)43 TestHttpClient (io.undertow.testutils.TestHttpClient)42 HttpGet (org.apache.http.client.methods.HttpGet)40 HttpResponse (org.apache.http.HttpResponse)37 HttpString (io.undertow.util.HttpString)36 Header (org.apache.http.Header)24 Undertow (io.undertow.Undertow)19 ByteBuffer (java.nio.ByteBuffer)19 Map (java.util.Map)16 SessionConfig (io.undertow.server.session.SessionConfig)15 Sender (io.undertow.io.Sender)14 ExchangeCompletionListener (io.undertow.server.ExchangeCompletionListener)14 HeaderMap (io.undertow.util.HeaderMap)13 HeaderValues (io.undertow.util.HeaderValues)12 URI (java.net.URI)12