vlambda博客
学习文章列表

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!

第一时间获取技术干货!



当我们开始接触到SpringBoot项目的时候,我们特别惊讶,为什么没有了tomcat服务器,web项目还能跑起来。


为什么只用了一个main方法就能讲一个web项目跑起来。学习了这篇文章你就能明白了。


 

1

发现内置Tomcat


打开一个SpringBoot项目,我们发现,有tomcat的依赖



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


首先找到spring-boot-starter-web


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


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


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


果然在里面找到tomcat的依赖,我们继续点进去


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


这是我们我们就能看到tomcat的相关依赖了。


如何用 Java 写一个自己的 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的映射


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!



但是,但是,但是tomcat和web.xml没了,怎么配置?简单,没有我们就用main方法来创建一个tomcat。



5

创建一个tomcat


定义servlet配置参数


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


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


内置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.xml和META-INF/context.xml都将被正常处理。


Context addWebapp(String contextPath, String docBase) throws ServletException


web应用资源添加到此Web应用程序


void addPreResources(WebResourceSet webResourceSet)


创建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();
 }
}


启动main方法创建tomcat


启动结果如下,我们看到tomcat以8080端口启动。


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


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


如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!


访问IndexServlet





原文链接:https://blog.csdn.net/m0_37892044/article/details/107963187


PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。 


- 完 -

IT码徒
专注Java技术栈分享,多线程,JVM,io流,Spring,微服务,数据库等以及开源项目,视频教程,软件工具,代码,文档。
0篇原创内容
Official Account