How-to: Embed Tomcat in a Standalone Java Application
In response to my post Is there a JSP powered Script Engine that runs outside servlet container at JavaLobby, Kess Kuip writes:
Why not embed Tomcat as a whole in your application? It is not that fat!
The source code in the Kess's EmbeddedTomcat.java attachment is here:
EmbeddedTomcat.java
package org.kku.tomcat;
import org.apache.catalina.*; import org.apache.catalina.connector.*; import org.apache.catalina.realm.*; import org.apache.catalina.startup.*; import org.apache.catalina.users.*;
public class EmbeddedTomcat { // Instance variables: private String name; private int portNumber; private Embedded embedded; private Engine baseEngine; private Host baseHost; private Connector httpConnector;
/** Creates a new instance of EmbeddedTomcat */ public EmbeddedTomcat( String name, int portNumber) { this.name = name; this.portNumber = portNumber;
init(); }
private void init() { MemoryRealm realm; Context context; String baseEngineName; String hostName;
embedded = new Embedded();
// set default logger and realm /* FileLogger fileLog = new FileLogger(); fileLog.setDirectory("."); fileLog.setPrefix(name); fileLog.setSuffix(".log"); fileLog.setTimestamp(true); embedded.setLogger(fileLog); */ realm = new MemoryRealm(); embedded.setRealm(realm);
// create an Engine baseEngine = embedded.createEngine();
// set Engine properties baseEngineName = name + "Engine"; hostName = name + "Host";
baseEngine.setName(baseEngineName); baseEngine.setDefaultHost(hostName);
baseHost = embedded.createHost(hostName, "webapps"); baseEngine.addChild(baseHost);
// RootContext context = addContext("", "ROOT");
// ManagerContext context = addContext("/manager", "manager"); context.setPrivileged(true);
// add new Engine to set of Engine for embedded server embedded.addEngine(baseEngine);
// create Connector httpConnector = embedded.createConnector((java.net.InetAddress) null, portNumber, false);
// add new Connector to set of Connectors for embedded server, associated // with Engine embedded.addConnector(httpConnector); }
public void start() { // start server try { embedded.start(); } catch (org.apache.catalina.LifecycleException ex) { ex.printStackTrace();
//fileLog.log("Startup failed"); //fileLog.log(ex.getMessage()); } }
public Context addContext( String path, String docBase) { Context c;
c = embedded.createContext(path, docBase); baseHost.addChild(c);
return c; }
public static void main(String[] args) { new EmbeddedTomcat("test", 8080).start(); } } |
Referenes