模拟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.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
            <version>8.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.5</version>
        </dependency>

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

(1)StartTomcat做的事情  创建线程类:    

public class StartTomcat implements Runnable {
    @Override
    public void run() {
        //创建tomcat实例
        Tomcat tom = new Tomcat();
        //设置端口
        tom.setPort(8081);
        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目录了)

    

 

  

 

原文地址:https://www.cnblogs.com/bbdong/p/10214211.html

时间: 2024-11-07 14:33:48

模拟Springboot二:内置tomcat的相关文章

SpringBoot 取消内置Tomcat启动,改用外接Tomcat

1,修改pom.xml 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <!-- 去除内嵌tomcat --> 5 <exclusions> 6 <exclusion> 7 <groupId>org.springframe

如何优雅的使用springboot项目内置tomcat

问题:以前,我们在使用SSM框架的时候,都是通过外置的tomcat进行部署,如果想访问文件,直接拖到项目的根目录下面即可.假如我们需要放一个apk文件,然后让别人下载,只需将apk放到项目根目录下面,浏览器通过http://ip:port/projectName/xx.apk即可下载.现在使用spring boot进行项目开发,由于springboot 内嵌了tomcat,为了方便部署,因此我们大多数情况下只需将项目打成jar包运行.这样就存在一个问题,我们该如何将这个apk放到服务器上,别人通

Spring Boot 添加jersey-mvc-freemarker依赖后内置tomcat启动不了解决方案

我在我的Spring Boot 项目的pom.xml中添加了jersey-mvc-freemarker依赖后,内置tomcat启动不了. 报错信息如下: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletCon

Spring Boot2.0之 原理—创建内置Tomcat容器

前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoot中内置tomcat服务器 Java操作创建tomcat 我们点击pom中的 持续点击到 继续点击会发现: 这个依赖 为我所需~ 注意:Springboot2.0之后 Tomcat8.0以上版本 引入到自己的pom中(类似的还有其他的依赖包): <project xmlns="http://m

SpringBoot 常用配置 静态资源访问配置/内置tomcat虚拟文件映射路径

Springboot 再模板引擎中引入Js等文件,出现服务器拒绝访问的错误,需要配置过滤器 静态资源访问配置 @Configuration @EnableWebMvc public class StaticResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHand

SpringBoot内置tomcat启动原理

前言 ? ? ? ? ?不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?? 内置tomcat ? ? ? ? ?开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty. <dependency> <groupId>org.springframework.boot</groupId> <arti

springboot-为内置tomcat设置虚拟目录

需求 项目使用springboot开发,以jar包方式部署.项目中文件上传均保存到D判断下的upload目录下. 在浏览器中输入http://localhost:8080/upload/logo_1.jpg能访问到D盘upload目录下的logo_1.png图片 解决方法 由于使用jar包方式,无法使用为tomcat配置虚拟目录的方式,需为springboot内置tomcat设置虚拟目录. 实现 import org.springframework.context.annotation.Conf

idea中springboot内置tomcat控制台中文乱码解决

在使用idea的时候,在springboot中使用内置的tomcat控制台中中文乱码,这个问题困扰我好长时间了,今天终于解决了 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <ex

myeclipse内置tomcat 打开web应用程序

前言: 会用下载好的tomcat8 部署网页程序. 在任意一个浏览器 如 uc   输入http://localhost:8080/项目名  文件名 即可. 注意的是 项目文件需要放到tomcat文件下webapps 目录里. 问题:myeclipse内置了tomcat7.0. 新建一个web project程序. run myeclipse server是as tomcat 7.0后. 用myeclipse内置浏览器 无法打开http://localhost:8080/项目. 服务器是star