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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM