是否可以在Tomcat库中执行嵌入式Java servlet代码(如使用库Jetty)?

假设我在Jetty库中有以下嵌入式Java servlet示例 – 是否可以使用Tomcat API库执行等效操作?

import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; public class HelloHandler extends AbstractHandler { public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); baseRequest.setHandled(true); response.getWriter().println("

Hello World

"); } public static void main(String[] args) throws Exception { Server server = new Server(8080); server.setHandler(new HelloHandler()); server.start(); server.join(); } }

Tomcat7嵌入式等效项看起来像这样:

 public class TinyTomcat7Embedded { public static void main(String[] args) { Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); File baseDir = new File("tomcat"); tomcat.setBaseDir(baseDir.getAbsolutePath()); File applicationDir = new File(baseDir + "/webapps", "/ROOT"); if (!applicationDir.exists()) { applicationDir.mkdirs(); } try { Context appContext = tomcat.addWebapp("/", "ROOT"); // A Jetty AbstractHandler is an HttpServlet here: Tomcat.addServlet(appContext, "helloWorldServlet", new HttpServlet() { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("

Hello World

"); } }); appContext.addServletMapping("/helloworld", "helloWorldServlet"); tomcat.start(); System.out.println("Tomcat server: http://" + tomcat.getHost().getName() + ":" + 8080 + "/"); tomcat.getServer().await(); } catch (ServletException e) { e.printStackTrace(); } catch (LifecycleException e) { e.printStackTrace(); } } }

将这些依赖项添加到pom.xml:

    org.eclipse.jdt.core.compiler ecj 3.7.1    org.apache.tomcat.embed tomcat-embed-core 7.0.26   org.apache.tomcat.embed tomcat-embed-logging-juli 7.0.26   org.apache.tomcat.embed tomcat-embed-logging-log4j 7.0.26   org.apache.tomcat.embed tomcat-embed-jasper 7.0.26