http://zetcode.com/web/embeddedtomcat/
在本教程中,我们将展示如何使用嵌入式Tomcat服务器。
Tomcat可以在嵌入式模式下运行;
- 这意味着不需要构建一个WAR文件并将其部署到独立的Tomcat服务器中
- spring boot 正是使用了嵌入式的Tomcat
本教程中的示例是用Maven构建的。
创建一个返回hello world的程序
maven依赖
4.0.0
com.zetcode
EmbeddedTomcatEx
1.0-SNAPSHOT
jar
UTF-8
1.8
1.8
9.0.0.M6
javax.servlet
javax.servlet-api
3.1.0
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
org.apache.tomcat.embed
tomcat-embed-logging-juli
${tomcat.version}
org.codehaus.mojo
appassembler-maven-plugin
1.1.1
target
com.zetcode.embedded.EmbeddedTomcatEx
webapp
package
assemble
这个 pom.xml
包含对嵌入式Tomcat的依赖和构建应用程序的编译插件的依赖。
它不包含JSP的maven依赖,因为我们只需要一个返回“hello world”字符串的servlet
。
代码示例 EmbeddedTomcatEx.java
package com.zetcode.embedded;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
public class EmbeddedTomcatEx {
public static void main(String[] args) throws LifecycleException,
InterruptedException, ServletException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);
Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());
Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Writer w = resp.getWriter();
w.write("Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});
ctx.addServletMapping("/*", "Embedded");
tomcat.start();
tomcat.getServer().await();
}
}
EmbeddedTomcatEx是一个Java控制台应用程序,其中main中启动了一个嵌入式Tomcat服务器。
Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);
Tomcat在端口8082
上启动。
Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());
每个应用程序都映射到一个上下文。使用addContext()方法,我们创建了一个不支持JSP文件且没有web.xml文件的应用程序。我们使用根上下文路径和当前工作目录作为document base
。
Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Writer w = resp.getWriter();
w.write("hello world!Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});
使用addServlet()方法添加一个名为Embedded
的新的servlet
。servlet只是用一些ASCII文本进行响应。
ctx.addServletMapping("/*", "Embedded");
添加一个对Embedded
访问映射。"/*"指访问本机8082
端口中的任何url都会调用Embedded
。
tomcat.start();
tomcat.getServer().await();
启动Tomcat服务器。
测试
这里在终端用curl
进行测试,也可以用浏览器测试
$ curl localhost:8082/
终端将会输出hello world
字符串
hello world!Embedded Tomcat servlet.