::Z::Thinking::

::Simple::
文章 - 124,收藏 - , 评论 - 49, trackbacks - 0
How-to: Embed Tomcat in a Standalone Java Application
三月 20, 2005

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.InetAddressnull,
        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



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=441849


[点击此处收藏本文]  发表于2005年06月23日 5:25 PM




正在读取评论……