模拟Springboot二:内置tomcat
既然要将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目录了)
模拟Springboot二:内置tomcat的更多相关文章
- springboot禁用内置Tomcat的不安全请求方法
起因:安全组针对接口测试提出的要求,需要关闭不安全的请求方法,例如put.delete等方法,防止服务端资源被恶意篡改. 用过springMvc都知道可以使用@PostMapping.@GetMapp ...
- springboot让内置tomcat失效
一.POM(去除内嵌tomcat后,需要添加servlet依赖) <dependency> <groupId>org.springframework.boot</grou ...
- 如何优雅的使用springboot项目内置tomcat
问题:以前,我们在使用SSM框架的时候,都是通过外置的tomcat进行部署,如果想访问文件,直接拖到项目的根目录下面即可.假如我们需要放一个apk文件,然后让别人下载,只需将apk放到项目根目录下面, ...
- Spring Boot 添加jersey-mvc-freemarker依赖后内置tomcat启动不了解决方案
我在我的Spring Boot 项目的pom.xml中添加了jersey-mvc-freemarker依赖后,内置tomcat启动不了. 报错信息如下: org.springframework.con ...
- Spring Boot2.0之 原理—创建内置Tomcat容器
前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoo ...
- springboot学习笔记:6.内置tomcat启动和外部tomcat部署总结
springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XX ...
- springboot内置tomcat验证授权回调页面域名
springboot内置tomcat验证公众号授权回调页面域名 解决方法: 网上下载一个tomcat,在server.xml文件中修改端口为springboot内置tomcat的端口号,复制验证文件到 ...
- SpringBoot内置tomcat启动原理
前言 不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springb ...
- SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径
Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class Sta ...
随机推荐
- Java-Maven-Runoob:Maven 自动化构建
ylbtech-Java-Maven-Runoob:Maven 自动化构建 1.返回顶部 1. 自动化构建定义了这样一种场景: 在一个项目成功构建完成后,其相关的依赖工程即开始构建,这样可以保证其依赖 ...
- 阿里云openapi接口使用,PHP,视频直播
1.下载sdk放入项目文件夹中 核心就是aliyun-php-sdk-core,它的配置文件会自动加载相应的类 2.引入文件 include_once LIB_PATH . 'ORG/aliyun-o ...
- java面试(6)
1 六大原则 详情参考:设计模式六大原则(转载). 2 UML类之间关系有几种?聚合和组合区别? 类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(A ...
- Angular2快速入门-1.创建第一个app
一.环境搭建 Angular2 运行在nodejs 环境下,需要我们先创建好nodejs环境,具体操作 1.下载安装Nodejs,参考网址,https://nodejs.org/en/ 选择64位 ...
- Hibernate4.3.5入门HelloWorld
本文给出一个简单的Hibernate4.3.5入门实例,配置方式采用XML文件方式(这种方式已经不是主流了,目前越来越多采用Annotation方式映射POJO实体) 代码结构如下图所示:主要用到hi ...
- leetcode893
class Solution { public: int numSpecialEquivGroups(vector<string>& A) { set<string> ...
- leetcode343
public class Solution { public int IntegerBreak(int n) { ) { ; } ) { ; } var max = int.MinValue; ; i ...
- 查看自己U盘格式
转自:https://zhidao.baidu.com/question/220844418.html 选中U盘后,鼠标右键单击,选项菜单中点击属性,出的的属性窗口中的“常规”项里边就有U盘的基本信息 ...
- jQuery.prop() 与attr()
1.attr()是jQuery 1.0版本就有的函数,prop()是jQuery 1.6版本新增的函数.毫无疑问,在1.6之前,你只能使用attr()函数:1.6及以后版本,你可以根据实际需要选择对应 ...
- 【原】Coursera—Andrew Ng机器学习—Week 2 习题—Linear Regression with Multiple Variables 多变量线性回归
Gradient Descent for Multiple Variables [1]多变量线性模型 代价函数 Answer:AB [2]Feature Scaling 特征缩放 Answer:D ...