src/test/java/mtitek/tomcat/embed/samples/MyTomcatTest.java:
package mtitek.tomcat.embed.samples;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.impl.base.exporter.zip.ZipExporterImpl;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class MyTomcatTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void test() throws IOException, LifecycleException {
final File newFolder = temporaryFolder.newFolder("MyTomcatTest");
final String baseDir = newFolder.getAbsolutePath();
// creating a Tomcat instance
final Tomcat tomcat = new Tomcat();
// configure tomcat
{
// random unassigned HTTP port
tomcat.setPort(0);
tomcat.setBaseDir(baseDir);
}
// start tomcat
{
tomcat.start();
}
// deploy web app
deployWebApp(tomcat, baseDir);
// stop/destroy tomcat
{
tomcat.stop();
tomcat.destroy();
}
}
private static void deployWebApp(final Tomcat tomcat, final String tomcatBaseDir) throws IOException {
final String webAppName = "simple";
final String archiveName = webAppName + ".war";
// adding resources to WebArchive
{
final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, archiveName);
webArchive.addAsWebResource("index.html");
webArchive.setWebXML("web.xml");
deployWebApp(tomcat, tomcatBaseDir, webArchive, webAppName);
}
// test web app
{
testWebApp(tomcat, "http://localhost:" + tomcat.getConnector().getLocalPort() + '/' + webAppName);
}
}
private static void deployWebApp(final Tomcat tomcat, final String tomcatBaseDir, final WebArchive webArchive,
final String webAppName) throws IOException {
final Host host = tomcat.getHost();
final File rootBase = new File(tomcatBaseDir, host.getAppBase());
Files.createDirectories(rootBase.toPath());
final File docBase = new File(rootBase, webArchive.getName());
final String docBaseAbsolutePath = docBase.getAbsolutePath();
new ZipExporterImpl(webArchive).exportTo(docBase, true);
final String contextPath = '/' + webAppName;
tomcat.addWebapp(host, contextPath, docBaseAbsolutePath);
}
private static void testWebApp(final Tomcat tomcat, final String resource) throws IOException {
final HttpGet request = new HttpGet(resource);
try (final CloseableHttpClient client = HttpClientBuilder.create().build();
final CloseableHttpResponse response = client.execute(request)) {
final HttpEntity entity = response.getEntity();
System.out.println(IOUtils.toString(entity.getContent(), "UTF-8"));
// close the content stream.
EntityUtils.consumeQuietly(entity);
}
}
}
Notes:
► Adding resources to a WebArchive:
addAsWebResource
final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, archiveName);
webArchive.addAsWebResource("index.html");
webArchive.setWebXML("web.xml");
► Adding resources to a WebArchive:
importDirectory
final WebArchive webArchive = ShrinkWrap.create(WebArchive.class, archiveName);
webArchive.merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class).importDirectory(archivePath).as(GenericArchive.class), "/", Filters.includeAll());