https://tomcat.apache.org/


 1 嵌入式Tomcat介绍

从Tomcat5.0开始提供和支持Embeded版本,即最简化Tomcat Server。Tomcat和Embedded Tomcat版本是同步发布的。


2 引入依赖 

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>8.5.64</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>8.5.64</version>
</dependency>

3 代码示例

final int PORT = 8888;
final String CONTEXT_PATH = "/boot";

//创建tomcat对象
Tomcat tomcat = new Tomcat();
//设置端口
tomcat.setPort(PORT);
//设置主机名
tomcat.setHostname("localhost");
//设置工作目录
tomcat.setBaseDir(".");

Context context = tomcat.addWebapp(CONTEXT_PATH, System.getProperty("user.dir") + "/src/main");

// 生成目录: {工作目录}/work/Tomcat/{主机名}/{应用}

//注册servlet
HelloServlet helloServlet = new HelloServlet();
Wrapper hello = tomcat.addServlet(CONTEXT_PATH, "helloServlet", helloServlet);
//添加servlet映射
hello.addMapping("/hello");
//启动
tomcat.start();
//服务器等待 避免main线程执行结束后关闭
tomcat.getServer().await();
// 访问 http://localhost:8888/boot/hello
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello tomcat");
    }
}


4 启动SpringMVC

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>8.5.64</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>8.5.64</version>
</dependency>
/**
 * Spring配置类 不扫描controller组件
 */
@ComponentScan(value = "cn.baker.boot", excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)
})
@Configuration
public class SpringConfig {
    //父容器
}
/**
 * SpringMVC配置列 只扫描Controller组件
 */
@ComponentScan(value = "cn.baker.boot.controller", includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)
}, useDefaultFilters = false)
public class SpringMVCConfig {
    //子容器
}
@RestController
public class HelloController {
    // 访问 http://localhost:8888/boot/hello
    @GetMapping("/hello")
    public String hello(){
        return "hello world.";
    }
}
public static void main(String[] args) throws Exception {
    final int PORT = 8888;
    final String CONTEXT_PATH = "/boot";

    //创建tomcat对象
    Tomcat tomcat = new Tomcat();
    //设置端口
    tomcat.setPort(PORT);
    //设置主机名
    tomcat.setHostname("localhost");
    //设置工作目录
    tomcat.setBaseDir(".");

    Context context = tomcat.addWebapp(CONTEXT_PATH, System.getProperty("user.dir") + "/src/main");

    // 生成目录: {工作目录}/work/Tomcat/{主机名}/{应用}

    //注册servlet
    DispatcherServlet dispatcherServlet = new DispatcherServlet();
    Wrapper hello = tomcat.addServlet(CONTEXT_PATH, "dispatcherServlet", dispatcherServlet);
    //添加servlet映射
    hello.addMapping("/");
    //启动
    tomcat.start();
    //服务器等待 避免main线程执行结束后关闭
    tomcat.getServer().await();
}

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐