水煮Tomcat(六) – 手搓个栗子

113 阅读1分钟

前言

Tomcat部署方式有多种,其中一个是嵌入式部署;官方提供了嵌入式部署的接口,【org.apache.catalina.startup.Tomcat】,这里简单实现一个嵌入式的例子。更多的例子可以参考官方的测试用例【github.com/apache/tomc…

例子

新建一个java项目,引入maven依赖

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
        </dependency>
    </dependencies>

新建Servlet

新建一个servlet,需要继承HttpServlet

/**
 * 继承HttpServlet
 */
public class TestSevlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter out = resp.getWriter();
        // 输出一个网页
        out.println("<!DOCTYPE html><html><head>");
        out.println("<meta charset="UTF-8" />");
        out.println("<title></title>");
        out.println("</head><body>");
        // 编辑网页内容
        out.println("<h1>hello tomcat.</h1>");
        out.println("</body></html>");
    }
}

设置入口

设置启动入口,其中有两种端口设置方法;其中第二种方法,需要先设置端口,再执行tomcat.getConnector(),否则设置端口不会生效;
基本的步骤:

  1. 新建Tomcat实例;
  2. 设置端口;
  3. 加载应用,也就是Context;
  4. 设置应用路径;
  5. 添加servlet,必须实现HttpServlet;
  6. 设置servlet路径;
public class StartApp {

    public static void main(String[] args) throws LifecycleException {

        Tomcat tomcat = new Tomcat();
        // 设置端口方法一
//        Connector connector = tomcat.getConnector();
//        connector.setPort(8092);
        // 设置端口方法二
        // Set the port for the default connector. The default connector will only be created if getConnector is called.
        // 设置默认连接器的端口,默认连接器的创建方式是tomcat.getConnector(),如果不调用这个方法,则设置端口也是没有什么作用的
        tomcat.setPort(9012);
        tomcat.getConnector();
        // context是应用的载体,必须添加
        Context context = tomcat.addContext("",null);
        // 设置应用路径
        context.setPath("/app");
        // 添加servlet,并定义别名,别名会在第二种路径设置方式中用到
        Wrapper wrapper = Tomcat.addServlet(context, "testServlet123", new TestSevlet());
        // 设置servlet路径,方式1
//        wrapper.addMapping("/test");
        // 设置servlet路径,方式2
        context.addServletMappingDecoded("/test","testServlet123");
        // 启动
        tomcat.start();
    }
}

效果

在浏览器中输入地址:http://localhost:9012/app/test
image.png