手写嵌入式Tomcat(带详细注解)

446 阅读1分钟

导读

本文分为两部分 1. 实现思路分析部分 2. 实现代码部分

运行代码需导入tomcat7maven插件,代码基于TomcatAPI实现

一. 实现思路分析

使用Tomcat的API实现, 步骤如下

  1. 新建一个Tomcat对象
  2. 设置Tomccat的端口号
  3. 设置Context目录
  4. 添加Servlet容器
  5. 调用Tomcat对象start()
  6. 强制Tomcat等待

二.实现代码

MyTomcatServer 代码如下

public class MyTomcatServer {

    public static void main(String[] args) throws Exception {
        // 把目录的绝对路径获取到
        String classpath = System.getProperty("user.dir");
        System.out.println(classpath);
        Tomcat tomcat = new Tomcat();
        // 设置Tomcat的端口
        Connector connector = tomcat.getConnector();
        connector.setPort(9091);
        // 设置Host
        Host host = tomcat.getHost();
        host.setName("localhost");
        host.setAppBase("webapps");
        // 加载class
        Context context = tomcat.addContext(host, "/",classpath);
        if (context instanceof StandardContext){
            StandardContext standardContext = (StandardContext) context;
            // 加载自己的web.xml配置文件
            standardContext.setDefaultContextXml("D:/workAPP/apache-tomcat-8.5.39-windows-x64/apache-tomcat-8.5.39/conf/web.xml");
            // 设置Servlet
            Wrapper wrapper = tomcat.addServlet("/", "MyServlet", new MyServlet());
            // 设置访问路径
            wrapper.addMapping("/lilei");
        }

        // Tomcat启动
        tomcat.start();
        // 强制Tomcat server等待, 避免main线程执行结束后关闭
        tomcat.getServer().await();
    }
}

Servlet代码如下:

public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("ok!!");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-type","text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.write("<h1>ok!!! <b>李磊加油!!</h1>");
        writer.close();
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

三. 结束

感谢读者朋友的阅读! 前路愿与大家一同探索!!!