springboot2 部署在外部tomcat(过滤器Filter坑)

部署在外部tomcat

需要改一些配置

打成 war 包

<packaging>war</packaging>

移除嵌入tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--打war包开启-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

添加servlet api 包

不加此依赖,找不到 HttpSession 等类

<!--   不加此依赖,找不到 HttpSession 等类     -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

增加构建配置

要指定使用 3.0 以上版本,否则启动时因为没有 web.xml 报错

<build>
    <plugins>
        <!-- 把原来的 spring-boot-maven-plugin 注释掉/删掉-->

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <!-- 否则报错webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update) -->
            <version>3.0.0</version>
        </plugin>

    </plugins>
    <!-- 打包的包名 -->
    <finalName>test</finalName>
</build>

idea 配置 tomcat

由于没有嵌入式 tomcat ,所以启动时,需要配置 tomcat

不需要额外配置,就是正常配置tomcat,如下:

静态文件

静态文件一般在 static 等目录中,不需要改动 和 配置

如果不能访问,可能是过滤器、拦截器导致的

过滤器 Filter 坑

在 java8 中,过滤器 Filter 不需要实现 init() 和 destroy() 方法,在这里是不行的,必须实现这两个方法,而且不能调用 接口中的方法,否则不生效

一般如下:

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void destroy() {
}

部署到tomcat

打包后,将 war 包 放到 tomcat webapps 目录下即可

其他注意事项

如果需要读取配置文件,一般需要改动

springboot jar 启动,配置文件在 jar中,或者在 jar同级目录中

tomcat war 启动,配置文件在 WEB-INF\classes 中,一般需要下面方式读取:

String path = this.getClass().getResource("/").getPath();

File dbFile = new File(path, Constant.DB_FILE_NAME);

参考:
https://blog.csdn.net/qq_44851613/article/details/116807810


原文出处:/show_1IX6g0jnUCa5.html