• springboot+内置改为外置tomcat



     目录:

    1.pom.xml 

    2.改造启动类

    3.过滤器修正

    4.tomcat7版本修正


    1.pom.xml

    1). 改打包方式 war

        <groupId>com.nsoft</groupId>
        <artifactId>gkzp</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging><!--mvn package 打包方式,  jar为jar包   war 为war包(由于采用web3.0 规范,是没有web.xml 的,需另行配置(别忘了servlet))-->
        <name>gzy-gkzp</name>
        <description>广职院-公开招聘系统网站</description>

     2). springboot项目利用的是自己内置的tomcat,这边就是不依赖内置的tomcat,将其编译的作用域设置为provided

     <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-tomcat</artifactId><!--tomcat依赖 内置tomcat-->
           <scope>provided</scope>
     </dependency>
     <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-jasper</artifactId>
          <version>9.0.21</version>
          <scope>provided</scope><!--SpringBoot内置tomcat默认不支持JSP。故在用内置tomcat时为了支持JSP需引入此依赖。  外置tomcat有此jar,故不需要再引入此依赖,此时加上provided参数即可,否则jar冲突-->
    </dependency>

    3). 去除内嵌tomcat (经验证,这个不去除也不会受影响)

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId><!--springboot Web 依赖-->
                <exclusions>
                    <exclusion> <!--由于我下面引入了log4j2日志框架来管理日志输出,所以要去掉spring默认自带的日志依赖spring-boot-starter-logging,否则导致冲突即配置log4j2时不生效-->
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                    <exclusion><!-- 去除内嵌tomcat -->
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

     20200422回看后解析:

    Ctrl+鼠标左键 点击  <artifactId>spring-boot-starter-web</artifactId> 进入

     

     会发现“springboot Web 依赖”已包含了“spring-boot-starter-tomcat”,而我在第 2)步中可看到我又重复引入这个依赖一次,导致“springboot Web 依赖”里的“spring-boot-starter-tomcat”依赖不生效了,所以第3)步排除这个依赖属于多此一举了。

    2.改造启动类

    因为springboot 自己能认识自己的启动项,而外部tomcat是不认识的,所以添加启动类,从启动类中传入SpringBoot应用的主程序

    故新建启动类:com.nsoft.gkzp.ServletInitializer.java

    package com.nsoft.gkzp;
    
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    
    public class ServletInitializer extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            //传入SpringBoot应用的主程序
            return application.sources(com.nsoft.gkzp.GzyGkzpApplication.class);
        }
    
    }

    路径截图如下:

    3.过滤器修正

    在实际操作中,经过以上1、2步骤后,tomcat启动可正常运行,但过滤器不生效了。需在过滤器添加@Configuration 注解即可。但如果使用内置tomcat,不能添加@Configuration 注解,否则启动时报错。

    4.tomcat7版本修正

    tomcat是1.7的话启动时会报错误:Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager

    这是因为:tomcat提供的el-api 和项目里面的el-api.jar冲突;这时候你需要去找到自己本机上用的el-api的版本,copy到tomcat的lib目录下,覆盖原来的jar包

    参考:https://blog.csdn.net/qq_35668387/article/details/87287949

  • 相关阅读:
    蓝桥杯 矩阵翻硬币
    2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )
    HDU 3826 Squarefree number ( 唯一分解定理 )
    HDU 5727 Necklace ( 2016多校、二分图匹配 )
    HDU 5726 GCD (2016多校、二分、ST表处理区间GCD、数学)
    hihocoder 1457 后缀自动机四·重复旋律7 ( 多串连接处理技巧 )
    后缀自动机 ( SAM ) 模板
    2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )
    2018 焦作网络赛 G Give Candies ( 欧拉降幂 )
    蓝桥杯 买不到的数目 ( 裴蜀定理 )
  • 原文地址:https://www.cnblogs.com/zdyang/p/12015535.html
Copyright © 2020-2023  润新知