当前位置: 代码网 > it编程>编程语言>Java > SpringBoot的内嵌和外置tomcat的实现方式

SpringBoot的内嵌和外置tomcat的实现方式

2025年11月30日 Java 我要评论
1.内嵌如何定制和修改servlet容器的相关配置修改修改和server有关的配置:server.port=8081server.context-path=/txserver.tomcat.uri-e

1.内嵌

如何定制和修改servlet容器的相关配置

修改修改和server有关的配置:

server.port=8081
server.context-path=/tx
server.tomcat.uri-encoding=utf-8

配置了这个之后,重启应用:

访问地址变为:http://localhost:8081/tx

所有url都需要加上 /tx 前缀

注册servlet三大组件

由于springboot默认是以jar包的方式启动嵌入式的servlet容器来启动springbootweb应用,没有web.xml文件。

三大组件分别是:

servlet服务器, filter(过滤器)和 listener(监听器)

首先配置配置类

package com.qcby.config;

import com.qcby.component.myservlet;
import com.qcby.component.myfilter;
import com.qcby.component.mylistener;
import org.springframework.boot.web.servlet.filterregistrationbean;
import org.springframework.boot.web.servlet.servletlistenerregistrationbean;
import org.springframework.boot.web.servlet.servletregistrationbean;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;

import java.util.arrays;

@configuration
//@configuration:标记这是一个spring配置类,spring会扫描其中的 @bean 方法
//相当于传统的xml配置文件,但使用java代码配置
public class webcomponentconfig {

    // 1. 注册servlet
    @bean
    public servletregistrationbean myservlet(){
        servletregistrationbean registrationbean =
                new servletregistrationbean(new myservlet(), "/myservlet");
        return registrationbean;
    }

    // 2. 注册filter
    @bean
    public filterregistrationbean myfilter(){
        filterregistrationbean registrationbean = new filterregistrationbean();
        registrationbean.setfilter(new myfilter());
        registrationbean.seturlpatterns(arrays.aslist("/hello", "/myservlet"));
        return registrationbean;
    }

    // 3. 注册listener
    @bean
    public servletlistenerregistrationbean mylistener(){
        servletlistenerregistrationbean registrationbean =
                new servletlistenerregistrationbean(new mylistener());
        return registrationbean;
    }
}

servlet注册详解

spring调用 myservlet() 方法

创建 myservlet 实例

创建 servletregistrationbean,将servlet映射到 /myservlet 路径

返回注册bean,spring将其加入容器

效果:访问 http://localhost:8080/myservlet 会调用 myservlet

filter注册详解

setfilter(new myfilter()):设置过滤器实例

seturlpatterns(arrays.aslist("/hello", "/myservlet")):指定拦截路径

/hello:拦截该路径

/myservlet:拦截该路径

效果:访问 /hello 或 /myservlet 时,会先经过 myfilter

listener注册详解

不需要配置url模式,自动监听应用生命周期事件

运行之后,访问localhost:8080/myservlet​​​​​​ (记得把之前的配置文件注释掉)然后查看控制台输出:

2.外置

嵌入式servlet容器:应用打成可执行的jar

优点:简单、便携;

缺点:默认不支持jsp、优化定制比较复杂.;

外置的servlet容器:外面安装tomcat---应用war包的方式打包;

创建一个新项目:cloud native app initializer

创建好之后下载压缩包,解压到idea目录里边

pom.xml

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
    xsi:schemalocation="http://maven.apache.org/pom/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelversion>4.0.0</modelversion>
    <groupid>com.qcby</groupid>
    <artifactid>tomcatdemo</artifactid>
    <version>0.0.1-snapshot</version>
    <packaging>war</packaging>
    <name>tomcatdemo</name>
    <parent>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-parent</artifactid>
        <version>1.5.9.release</version>
    </parent>

    <dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
        </dependency>

        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-tomcat</artifactid>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-maven-plugin</artifactid>
            </plugin>
        </plugins>
    </build>

</project>

点击ok

我们这边的webapp和web.xml文件就创建好了

然后我们就可以和之前的ssm项目一样配置tomcat了:

如图

servletinitializer的流程:

外置tomcat启动→发现 servletinitializer (继承自 springbootservletinitializer)→调用 configure() 方法→启动 spring boot 主类 (application.class)→spring boot 应用正常运行

package com.qcby.tomcatdemo;

import org.springframework.boot.builder.springapplicationbuilder;
import org.springframework.boot.web.support.springbootservletinitializer;

public class servletinitializer extends springbootservletinitializer {

    @override
    protected springapplicationbuilder configure(springapplicationbuilder application) {
        return application.sources(tomcatdemoapplication.class);
    }

}

配置好之后启动:

原理

jar包:执行springboot主类的main方法,启动ioc容器,创建嵌入式的servlet容器;

war包:启动服务器,服务器启动springboot应用【springbootservletinitializer】,启动ioc容器;

到此这篇关于springboot的内嵌和外置tomcat的实现方式的文章就介绍到这了,更多相关springboot内嵌和外置tomcat内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com