All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nakedobjects.plugins.htmlviewer.client.JettyWebServerAbstract Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.plugins.htmlviewer.client;

import java.util.ArrayList;
import java.util.EventListener;
import java.util.List;

import org.apache.log4j.Logger;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ContextHandler;
import org.mortbay.jetty.handler.HandlerList;
import org.mortbay.jetty.handler.ResourceHandler;
import org.mortbay.jetty.servlet.ServletHandler;
import org.mortbay.jetty.servlet.ServletHolder;
import org.mortbay.jetty.servlet.ServletMapping;
import org.mortbay.jetty.servlet.SessionHandler;
import org.nakedobjects.plugins.htmlviewer.servlet.ResourceServlet;


public abstract class JettyWebServerAbstract {
    
    private final static Logger LOG = Logger.getLogger(JettyWebServerAbstract.class);

    /////////////////////////////////////////////////////////
    // Constructor
    /////////////////////////////////////////////////////////

    public JettyWebServerAbstract() {
    }

    
    /////////////////////////////////////////////////////////
    // init
    /////////////////////////////////////////////////////////

    public ContextHandler init(final int port, final String resourceBase) {
        return init(port, null, resourceBase);
    }

    private ContextHandler init(final int port, final EventListener servletInitializer, final String resourceBase) {
        final Server server = new Server(port);

        final ContextHandler context = new ContextHandler("/");
        context.setClassLoader(Thread.currentThread().getContextClassLoader());

        if (servletInitializer != null) {
            context.addEventListener(servletInitializer);
        }
        server.addHandler(context);

        final HandlerList handlerList = new HandlerList();

        final List resourceBases = new ArrayList();
        addResourceBases(resourceBases);

        if (resourceBase != null) {
            resourceBases.add(resourceBase);
        }
        for(String rb: resourceBases) {
            final ResourceHandler resourceHandler = new ResourceHandler();
            resourceHandler.setResourceBase(rb);
            resourceHandler.setWelcomeFiles(getWelcomeFiles());
            handlerList.addHandler(resourceHandler);
        }

        final SessionHandler sessionHandler = new SessionHandler();
        handlerList.addHandler(sessionHandler);

        final ServletHandler servletHandler = new ServletHandler();
        sessionHandler.setHandler(servletHandler);

        addServletMappings(servletHandler);
        
        ServletHolder imageServletHolder = new ServletHolder(ResourceServlet.class);
        servletHandler.addServlet(imageServletHolder);
        
        ServletMapping imageServletMapping = new ServletMapping();
        imageServletMapping.setServletName(imageServletHolder.getName());
        imageServletMapping.setPathSpecs(new String[]{"*.gif", "*.png", "*.css"});
        servletHandler.addServletMapping(imageServletMapping);
        
        context.setHandler(handlerList);


        LOG.info("Starting web server: open a web browser and use URL http://localhost:8080/logon.app to connect");
        try {
            server.start();
            // server.join();
        } catch (final RuntimeException e) {
            throw e;
        } catch (final Exception e) {
            throw new JettyWebServerException("Web server failed to start", e);
        }
        
        return context;
    }


    private void addResourceBases(final List resourceBases) {
        doAddResourceBases(resourceBases);
    }


    protected abstract void doAddResourceBases(final List resourceBases);


    private String[] getWelcomeFiles() {
        return doGetWelcomeFiles();
    }


    protected abstract String[] doGetWelcomeFiles();


    private void addServletMappings(final ServletHandler servletHandler) {
        doAddServletMappings(servletHandler);
    }


    protected abstract void doAddServletMappings(final ServletHandler servletHandler);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy