乐趣区

关于java:教你用-Java-写一个自己的-Tomcat-容器涨姿势了

当咱们开始接触到 SpringBoot 我的项目的时候,咱们特地诧异,为什么没有了 tomcat 服务器,web 我的项目还能跑起来。为什么只用了一个 main 办法就能讲一个 web 我的项目跑起来。学习了这篇文章你就能明确了。

1. 发现内置 Tomcat

关上一个 SpringBoot 我的项目,咱们发现,有 tomcat 的依赖

接下来让咱们把 tomcat 的依赖找到

首先找到 spring-boot-starter-web

点进去之后咱们看到他用的是 2.1.0 版本,咱们持续点击去

果然在外面找到 tomcat 的依赖,咱们持续点进去

这是咱们咱们就能看到 tomcat 的相干依赖了。

因而咱们是能够应用 Java 提供内置 Tomcat 容器框架,应用 Java 语言操作 Tomcat 容器。这样咱们也能创立一个 maven 我的项目,并且内置一个 tomcat 容器了。

2. 创立一个 maven 我的项目

3. 增加 tomcat 依赖

这里咱们应用 8.5 版本的 tomcat

<!--Java 语言操作 tomcat -->
<dependency>
 <groupId>org.apache.tomcat.embed</groupId>
 <artifactId>tomcat-embed-core</artifactId>
 <version>8.5.16</version>
</dependency>

4. 创立一个 servlet:IndexServlet

public class IndexServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 @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().print("IndexServletIndexServletIndexServletIndexServletIndexServletIndexServlet");
 }
}

咱们先看看传统的 Servlet 须要怎么配置,咱们须要在 WEB-INF 目录下的 web.xml 文件中,配置 sevlet 的映射

当咱们拜访这个 servlet 的时候,拜访地址应该是:ip:< 端口 >/<tomcat 上下文 >/index

然而,然而,然而 tomcat 和 web.xml 没了,怎么配置?简略,没有咱们就用 main 办法来创立一个 tomcat。

5. 创立一个 tomcat

5.1. 定义 servlet 配置参数

咱们先定义几个 servlet 的配置参数:servlet 的名字,servlet 的映射

5.2. 内置 Tomcat 罕用 API 介绍

org.apache.catalina.startup.Tomcat

创立 tomcat

Tomcat tomcatServer = new Tomcat();

设置 tomcat 端口

void setPort(int port);

设置上下文地址

void setPath(String path)

增加监听

void addLifecycleListener(LifecycleListener listener)

增加 sevlet

Wrapper addServlet(String contextPath,String servletName,Servlet servlet)

增加 sevlet 映射

void addServletMappingDecoded(String pattern, String name)

启动 tomcat

void start() throws LifecycleException

获取服务

Server getServer()

服务异步

tomcatServer.getServer().await()

将 Web 应用程序增加到 Tomcat 的 webapps 目录中,等效的默认 web.xml 将利用于该 Web 应用程序,并且与该应用程序打包的任何 WEB-INF/web.xmlMETA-INF/context.xml都将被失常解决。

Context addWebapp(String contextPath, String docBase) throws ServletException

web 利用资源增加到此 Web 应用程序

void addPreResources(WebResourceSet webResourceSet)

5.3. 创立 tomcat 并且增加 servlet

public class TestTomcat {
 private static int PORT = 8080;
 private static String CONTEX_PATH = "/demosevlet";
 private static String SERVLET_NAME = "index";
 private static String MAPPING = "index";

 public static void main(String[] args) throws LifecycleException, InterruptedException {System.out.println("开始启动 tomcat");
  Tomcat tomcatServer = new Tomcat();
  // 设置 tomcat 端口
  tomcatServer.setPort(PORT);
  // 此 tomcat 端口是否主动部署
  tomcatServer.getHost().setAutoDeploy(false);
  // 创立一个 web 应用程序
  StandardContext standardContex = new StandardContext();
  // 设置 web 应用程序的上下文地址
  standardContex.setPath(CONTEX_PATH);
  // 增加 web 应用程序的监听
  standardContex.addLifecycleListener(new FixContextListener());
  // 将 web 应用程序增加到服务器中
  tomcatServer.getHost().addChild(standardContex);
  // 配置 servelt 和映射
  tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAME, new IndexServlet());
  standardContex.addServletMappingDecoded("/"+MAPPING, SERVLET_NAME);
  // 启动 tomcat
  tomcatServer.start();
  System.out.println("启动 tomcat 结束");
  // 开启异步服务,接管申请
  tomcatServer.getServer().await();
 }
}

5.4. 启动 main 办法创立 tomcat

启动后果如下,咱们看到 tomcat 以 8080 端口启动。

并且在此目录下生成了 tomcat.8080 文件夹

5.5. 拜访 IndexServlet

申请地址:ip:< 端口 >/<tomcat 上下文 >/index

申请地址:127.0.0.1:8080/demosevlet/index

原文链接:https://blog.csdn.net/m0_3789…

版权申明:本文为 CSDN 博主「歪桃」的原创文章,遵循 CC 4.0 BY-SA 版权协定,转载请附上原文出处链接及本申明。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿(2021 最新版)

2. 别在再满屏的 if/ else 了,试试策略模式,真香!!

3. 卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅公布,光明模式太炸了!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版