教你用Java的方式创建一个自己的Tomcat容器

开发 后端
当我们开始接触到SpringBoot项目的时候,我们特别惊讶,为什么没有了tomcat服务器,web项目还能跑起来。为什么只用了一个main方法就能讲一个web项目跑起来。学习了这篇文章你就能明白了。

 当我们开始接触到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> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

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");  
 }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

我们先看看传统的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(); 
  • 1.

设置tomcat端口 

void setPort(int port); 
  • 1.

设置上下文地址 

void setPath(String path) 
  • 1.

添加监听 

void addLifecycleListener(LifecycleListener listener) 
  • 1.

添加sevlet 

Wrapper addServlet(String contextPath,String servletName,Servlet servlet) 
  • 1.

添加sevlet映射 

void addServletMappingDecoded(String pattern, String name) 
  • 1.

启动tomcat 

void start() throws LifecycleException 
  • 1.

获取服务 

Server getServer() 
  • 1.

服务异步 

tomcatServer.getServer().await() 
  • 1.

将Web应用程序添加到Tomcat的webapps目录中,等效的默认web.xml将应用于该Web应用程序,并且与该应用程序打包的任何WEB-INF/web.xml和META-INF/context.xml都将被正常处理。 

Context addWebapp(String contextPath, String docBase) throws ServletException 
  • 1.

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

void addPreResources(WebResourceSet webResourceSet) 
  • 1.

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

5.4.启动main方法创建tomcat

启动结果如下,我们看到tomcat以8080端口启动。另外,关注Java知音公众号,回复“后端面试”,送你一份面试题宝典!

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

5.5.访问IndexServlet

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

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

 

 

责任编辑:庞桂玉 来源: Java知音
相关推荐

2015-04-22 11:29:45

PythonPython创建瀑布图

2020-10-15 15:01:54

Python 开发编程语言

2020-11-20 10:50:01

Docker容器

2020-05-09 09:59:52

Python数据土星

2021-05-13 20:20:40

Java架构代码

2020-09-15 14:05:21

Python代码预测模型

2022-06-28 12:35:21

DockerPython

2019-12-09 15:00:48

TomcatServlet容器

2022-02-25 09:41:05

python搜索引擎

2021-08-24 10:02:21

JavaScript网页搜索 前端

2021-07-12 09:03:50

Python任务管理器cmd命令

2019-08-26 19:03:58

2022-01-06 18:20:20

Scarlet AndroidWebSocket

2024-11-05 16:40:24

JavaScript搜索引擎

2019-01-24 09:00:00

PythonAutoML机器学习

2021-05-18 14:42:55

PythonMySQL

2018-12-17 09:10:52

机器学习TensorFlow容器

2021-07-12 14:35:26

代码架构云原生

2021-04-25 08:58:00

Go拍照云盘

2018-12-10 10:00:06

Python神经网络编程语言
点赞
收藏

51CTO技术栈公众号