springboot 使用tomcat详解

1.使用内嵌tomcat启动

  • 创建tomcat对象
  • 设置端口
  • 设置Context
  • 设置servlet 和 路径

2.spring中单独注册servlet和地址的映射关系

    @Bean
    public ServletRegistrationBean getServletRegistrationBean() {
        ServletRegistrationBean bean = new ServletRegistrationBean(apiServlet);
        bean.addUrlMappings("/self");
        return bean;
    }
  • tomcat启动肯定要注册项目的地址和servlet的映射
  • 如果spring中注册了ServletRegistrationBean 那肯定也要把用户注册的servlet也添加到tomcat

3.分析源码,springboot既然使用了tomcat, 那么上面几个步骤肯定都是要有的

AbstractApplicationContext.java

 

ServletWebServerApplicationContext.java       

 

createWebServer() 

 

  •   this.getWebServerFactory(); 从spring容器中获取  ServletWebServerFactory类型的bean,我们这里注册的是  TomcatServletWebServerFactory 
  • factory.getWebServer(new ServletContextInitializer[]{this.getSelfInitializer()});会调用到tomcat的实现,记得这里的参数,很重要的
ServletContextInitializer是函数式接口

getSelfInitializer(); 定义函数式接口的实现

 就把上面定义的函数式接口的实现进行传递,当调用函数式接口的方法的时候,就会调用上面定义的实现方法  -- 这里要明白,不然你后面不知道是怎么调用到这里来的

this.webServer = factory.getWebServer(new ServletContextInitializer[]{this.getSelfInitializer()});

 

TomcatServletWebServerFactory.Java

this.prepareContext(tomcat.getHost(), initializers);

 

this.configureContext(context, initializersToUse);

 

TomcatStarter 注意 该类实现 ServletContainerInitializer ,这个是servlet-api的接口,tomcat启动会调用该实现类的onStartUp方法();

 

this.getTomcatWebServer(tomcat);启动tomcat的方法

 

 

 启动tomcat

 

启动之后,会调用到ServletContainerInitializer的实现类的onstartUp()方法中;上面说到了

最终会调用到ServletWebServerApplicationContext.Java 的selfInitialize的方法实现中

 

Iterator var2 = this.getServletContextInitializerBeans();该方法就会返回需要servlet初始化的bean对象集合 

我打断点查看返回的beans

 

 创建了

ServletContextInitializerBeans对象

 

 记得我们最开始注册的bean叭,就是SerlvetRegistrationBean,这里就把beanFactory中类型为这个bean的所有对象进行保存

 所以,当我们这里调用onStartUp()时,就会进入到SerlvetRegistrationBean的方法中;

为啥这里方法的实现只有这两个呢,是因为SerlvetRegistrationBean继承RegistrationBean, 所以调用会调用父类的onstartUp(),也就是RegistrationBean的onstartUp()方法;

附上:类图

 进入RegistrationBean的方法中

 

RegistrationBean

  • String description = this.getDescription();返回servlet的名称,我们创建ServletRegistrationBean的时候
            1.构造方法中会传入Servlet对象
            2.调用对象方法配置url
  • this.register(description, servletContext);就是进行注册了
    1.D registration = this.addRegistration(description, servletContext);

    2.this.configure(registration);

 结束,当然我们的DispathcerServlet也是这样注册的奥

附上:   DispatcherServletRegistrationBean注册的过程

自己思考在哪里注册的:

       肯定实在某个地方进行注册的,不可能无故出现叭;

        分析使用DispathcerServlet肯定是在springmvc中, 所以肯定是在spring.factories文件中配置了自动装配的类,在这个类中进行的注册

 spring.factories找到  DispatcherServletAutoConfiguration类

注册 DispatcherServletRegistrationBean,

那么你肯定又有疑问了, tomcat明明过滤的是SerlvetRegistrationBean类型,那DispatcherServletRegistrationBean可以吗?

-- 你是忘记继承了吗!只要DispatcherServletRegistrationBean继承SerlvetRegistrationBean不就可以了吗

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,你可以使用以下步骤配置Tomcat作为Web服务器: 1. 首先,在pom.xml文件中添加Tomcat依赖: ```xml <dependencies> <!-- 其他依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除默认的嵌入式Tomcat依赖 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Tomcat依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <!-- 根据实际情况指定Tomcat版本 --> <version>xxx</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> <!-- 根据实际情况指定Tomcat版本 --> <version>xxx</version> </dependency> </dependencies> ``` 2. 创建一个类,用于自定义Tomcat配置。例如,创建一个名为TomcatConfig的类,并添加@EnableWebMvc注解: ```java @Configuration @EnableWebMvc public class TomcatConfig { } ``` 3. 在TomcatConfig类中,使用@Bean注解创建一个TomcatServletWebServerFactory bean,并进行相关配置,如端口、上下文路径等。例如: ```java @Bean public TomcatServletWebServerFactory tomcatFactory() { TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(); factory.setPort(8080); // 更多配置 return factory; } ``` 4. 如果需要添加更多的Tomcat配置,可以在TomcatConfig类中继续添加其他方法,并使用@Bean注解创建相应的bean。 5. 完成上述步骤后,Spring Boot将使用自定义的Tomcat配置启动Web服务器。 这是一种在Spring Boot中配置Tomcat的方法,你可以根据自己的需求进行相应的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值