Servlet集成embed tomcat实现debug代码
因公司有老项目又不让用掏钱的IDEA-U,没办法就学着springboot嵌入下tomcat玩玩,不可用于生产哈!
工具:IDEA-C 2022
JDK: JAVA8
编译: Gradle
新建java servlet工程
这个简单就不多说了直接看图

添加tomcat依赖
编辑build.gradle文件,在dependencies中添加如下依赖
compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '9.0.26'
compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.26'
添加程序启动类以及测试用的servlet类
package com.icodesoft.customtomcat;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import javax.servlet.ServletException;
import java.io.File;
public class AppBoot {
public static void main(String[] args) throws ServletException, LifecycleException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(Integer.getInteger("port", 8080));
tomcat.getConnector();
String contextPath = "/api";
Context context = tomcat.addWebapp(contextPath, new File("src/main/webapp").getAbsolutePath());
WebResourceRoot resources = new StandardRoot(context);
// 注意gradle与maven工程有点不同,gradle编译后文件默认在build/classes下
resources.addPreResources(
new DirResourceSet(resources, "/WEB-INF/classes", new File("build/classes").getAbsolutePath(), "/"));
context.setResources(resources);
tomcat.start();
tomcat.getServer().await();
}
}
package com.icodesoft.customtomcat;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/test")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.write("Hello embed tomcat!");
writer.flush();
}
}
添加webapp目录,此目录与resources目录同级
因为这个比较简单我只添加了个空目录并没放web.xml
运行以下命令进行编译
gradle build
直接运行main函数启动服务

TEST
http://localhost:8080/api/test 返回结果: Hello embed tomcat!


浙公网安备 33010602011771号