litesoft
@ 922
litesoft / trunk / DeviceDesktopTest / src / org / litesoft / ddt / EmbeddedJetty.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
package org.litesoft.ddt; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHandler; import javax.servlet.Servlet; import java.sql.Timestamp; public final class EmbeddedJetty extends Server { public EmbeddedJetty(int port, Class<? extends Servlet> pServletClass, String pPathSpec, String... pAdditionalMimeTypes) { super(port); ServletHandler zServletHandler = new ServletHandler(); zServletHandler.addServletWithMapping(pServletClass, pPathSpec); ContextHandler zContextHandler = new ServletContextHandler(); zContextHandler.setMimeTypes(getMimeTypes(pAdditionalMimeTypes)); zContextHandler.setHandler(zServletHandler); setHandler(zContextHandler); setStopTimeout(1000); setStopAtShutdown(true); } public int run() throws Exception { ServerKiller zKiller = new ServerKiller(); Shutdown.Instance.set(zKiller); start(); while (!isRunning()) { if (isStopped()) { throw new Error("Stopped on start!"); } if (isFailed()) { throw new Error("Failed on start!"); } Thread.sleep(50); } report("running", ""); join(); int zExitCode = zKiller.mExitCode; report("exiting", " with: " + zExitCode); return zExitCode; } private void report(String pWhat, String pTail) { System.out.println("EmbeddedJetty Server " + pWhat + " @ '" + new Timestamp(System.currentTimeMillis()) + "'" + pTail); } protected MimeTypes getMimeTypes(String... pAdditionalMimeTypes) { // Handle files encoded in UTF-8 MimeTypes zMimeTypes = new MimeTypes(); if (pAdditionalMimeTypes != null) { for (int i = 1; i < pAdditionalMimeTypes.length; i += 2) { String zExtension = pAdditionalMimeTypes[i - 1]; String zType = pAdditionalMimeTypes[i]; zMimeTypes.addMimeMapping(zExtension, zType); } } return zMimeTypes; } private class ServerKiller implements Shutdown { private volatile int mExitCode; @Override public void request(int pExitCode) { if (pExitCode != 0) { mExitCode = pExitCode; } new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(100); stop(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } } } |