下面为嵌入使用Tomcat的示例代码:
import java.net.URL;
import org.apache.catalina.Context;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.deploy.FilterDef;
import org.apache.catalina.deploy.FilterMap;
import org.apache.catalina.startup.Tomcat;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
import com.beust.jcommander.JCommander;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceFilter;
public class WebServer {
private final FrontendSettings webServerSettings;
private final GuiceListener guiceListener;
private final Tomcat tomcat;
@Inject
public WebServer(
FrontendSettings webServerSettings,
GuiceListener guiceListener) {
this.webServerSettings = webServerSettings;
this.guiceListener = guiceListener;
this.tomcat = new Tomcat();
}
private FilterDef createFilterDef(String filterName, String filterClass) {
FilterDef filterDef = new FilterDef();
filterDef.setFilterName(filterName);
filterDef.setFilterClass(filterClass);
return filterDef;
}
private FilterMap createFilterMap(String filterName, String urlPattern) {
FilterMap filterMap = new FilterMap();
filterMap.setFilterName(filterName);
filterMap.addURLPattern(urlPattern);
return filterMap;
}
public void run() throws Exception {
String appBase = ".";
tomcat.setPort(webServerSettings.getPort());
tomcat.setBaseDir("webapp");
tomcat.getHost().setAppBase(appBase);
String contextPath = "/";
// Add AprLifecycleListener to give native speed boost
// sudo apt-get install libtcnative-1
StandardServer server = (StandardServer)tomcat.getServer();
AprLifecycleListener listener = new AprLifecycleListener();
server.addLifecycleListener(listener);
Context context = tomcat.addWebapp(contextPath, appBase);
context.addFilterDef(createFilterDef("guice", GuiceFilter.class.getName()));
FilterDef struts2FilterDef = createFilterDef("struts2",
StrutsPrepareAndExecuteFilter.class.getName());
struts2FilterDef.addInitParameter("struts.devMode",
Boolean.toString(webServerSettings.isDevModeEnabled()));
context.addFilterDef(struts2FilterDef);
context.addFilterMap(createFilterMap("guice", "/*"));
context.addFilterMap(createFilterMap("struts2", "/*"));
tomcat.start();
tomcat.getServer().await();
}
public static void main(String[] args) throws Exception {
FrontendSettings webServerSettings = new FrontendSettings();
new JCommander(webServerSettings, args);
Guice.createInjector(new FrontendModule(webServerSettings));
Injector injector = Guice.createInjector();
WebServer server = injector.getInstance(WebServer.class);
server.run();
}
}