既然要将tomcat内置到项目中,并且能够成功的启动项目就要知道 tomcat  做了哪些事情 ,那么就必须先搞明白

一个 普通的web项目是如何被我们本地配置的tomcat启动并运行的

 (1)、 先告诉tomcat 要运行哪些项目 (也就是在使用eclipse、idea启动项目前对tomcat的配置工作、或linux上将编译后的war包拷贝到webapp下)

       从而在 后面在启动tomcat时,tomcat就会加载编译后的.class项目

 

  (2)、 tomcat在加载编译后的项目时也会加载 web.xml或上篇博客的WebApplication文件 ,而在这个文件中

        做的事情就是 加载spring进而加载springMVC

        加载SpringMVC: 将springMVC的DispatcherServlet注册到ServletContext容器

 那么只需要在项目内部集成tomcat时,运行main方法启动tomcat之前将编译后的项目和tomcat相关联,然后tomcat就能自动加载WebApplication类了

1、添加tomcat maven 依赖 (通过代码来创建tomcat实例)

        <dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>8.5.</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.</version>
</dependency>

2、创建SpringMain(作用:运行main启动tomcat)、StartTomcat(作用:创建Tom实例,然后让tomcat加载编译后的项

(1)StartTomcat做的事情  创建线程类, springboot启动tomcat的源码也是这样的,这里只是写了必要的步骤    

public class StartTomcat implements Runnable {
@Override
public void run() {
//创建tomcat实例
Tomcat tom = new Tomcat();
//设置端口
tom.setPort();
try{
//获取项目编译后的claess 路径
String path = StartTomcat.class.getResource("/").getPath(); //获取webapp 文件
String filePath = new File("src/main/webapp").getAbsolutePath(); //然后将webapp下的项目添加至tomcat的context容器(context对应一个运行的项目)
Context context =tom.addWebapp("/项目名",filePath); //参数1:一般是项目名 对应请求url中的项目名
       //webResourceRoot 用于加载 项目的class文件 
       WebResourceRoot webResource = new StandardRoot(context); webResource.addPreResources(new DirResourceSet(webResource,"/WEB-INF/classes",path,"/")); tom.start(); }catch (Exception e) { e.printStackTrace(); } //阻塞 ,等待前端连接 tom.getServer().await(); } }

        A、 创建tomcat实例

     B、 获取项目编译后的claess 路径

     C、获取webapp 目录下的项目

     D、然后将webapp下的项目添加至tomcat的context容器

     E、启动tomcat

     F、将tomcat的Server实例await 监听请求的到来

(2) SpringMain     

public class SpringMain {

    public static void main(String[] args) {
//启动
new StartTomcat().run();
}
}

这里也可以自定义一个注解 ,启动标注了此注解了的main方法时 ,做new StartTomcat().run(); 的事情就可以了

(3)、运行main方法  ,就能启动tom服务了

  

下一篇 : springboot是如何访问 resources目录下的static、template等 静态资源的 (因为没了ssm项目中的webapp目录了)

    

 

  

 

最新文章

  1. 整合SSM时报错:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
  2. paper 131:【图像算法】图像特征:GLCM【转载】
  3. 最新IP地址数据库 二分逼近&amp;二分查找 高效解析800万大数据之区域分布
  4. 理解与应用css中的display属性
  5. iOS实现简书的账号识别方式(正则表达式)
  6. JavaScript操作DOM对象
  7. SGU 113
  8. UILabel的简单用法和实际操作
  9. server&mdash;&mdash;小记
  10. mysqlsla 分析mysql慢查询日志
  11. jquery点击其他地方隐藏div层的实现程序
  12. Android图片异步加载之Android-Universal-Image-Loader(转)
  13. java反射使用及性能比较
  14. js判断奇偶数实现隐藏显示功能 与css立体按钮
  15. CentOS 7 下安装mosquitto
  16. java mysql数据库链接与资源关闭
  17. 从头到尾使用Geth的说明-2-cli可用命令-有2个地方标红,之后查查源码后看看能不能解决
  18. zend framwork黑箱测试
  19. Delphi疑难问题整理!!!
  20. (笔记)Mysql实例:建库建表并插入数据1

热门文章

  1. 校赛热身赛 Problem D. Unsolved Mystery
  2. 如何在 C#中添加 dll 文件
  3. python&#39;s eighth day for me
  4. JS,JQUERY 常用笔记
  5. VMWARE 虚拟机新增硬盘,格式化分区,并挂载
  6. oracle:RETURNING 子句
  7. xml和configparser模块
  8. 【原创】7. MYSQL++中的查询结果获取(各种Result类型)
  9. ISAP网络流算法
  10. Build Path