Fork me on GitHub

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!

posted @ 2022-06-14 18:07  逍遥メ风  阅读(106)  评论(0)    收藏  举报