package org.shujito.ucs;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.rewrite.handler.RewriteHandler;
import org.eclipse.jetty.rewrite.handler.Rule;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;
import org.glassfish.jersey.servlet.ServletContainer;
public class Application
{
public static final String TAG = Application.class.getSimpleName();
public static void main(String[] args) throws Exception
{
// create jetty server
Server server = new Server(0xDAFE);
// rewriter
RewriteHandler rewriteHandler = new RewriteHandler();
rewriteHandler.addRule(new Rule() {
@Override
public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
{
if (target.startsWith("/api"))
return null;
File resource = new File("public" + target);
if (resource.exists())
return null;
return "/";
}
});
// file server
final ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[] { "index.html" });
resourceHandler.setResourceBase("public");
// make a context for servlets
ServletContextHandler serverContextHandler = new ServletContextHandler(server, "/api", ServletContextHandler.SESSIONS);
// api errors
serverContextHandler.setErrorHandler(new ApiErrorHandler());
// make a holder for servlets
ServletHolder servletHolder = serverContextHandler.addServlet(ServletContainer.class, "/*");
servletHolder.setInitOrder(0);
servletHolder.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.shujito.ucs.controllers");
// put handlers on a list so all can be used
HandlerList handlerList = new HandlerList();
handlerList.setHandlers(new Handler[] {
rewriteHandler,
resourceHandler,
serverContextHandler,
new DefaultHandler()
});
// use them on the server
server.setHandler(handlerList);
// have the server do what it does best
server.start();
server.join();
}
}