目录:

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

springboot+内置改为外置tomcat的更多相关文章

  1. log4j日志相对路径,Tomcat(第三方和Springboot内置)参数catalina.home和catalina.base的设置

    关于Log4j日志相对路径的配置请看:log4j 产生的日志位置设置 和 catalina.home.catalina.base . 由于我们在Log4j的配置中引入了系统属性${catalina.b ...

  2. springboot内置tomcat验证授权回调页面域名

    springboot内置tomcat验证公众号授权回调页面域名 解决方法: 网上下载一个tomcat,在server.xml文件中修改端口为springboot内置tomcat的端口号,复制验证文件到 ...

  3. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  4. Spring-Boot 内置静态资源文件地址修改

    Spring-Boot 内置MVC静态文件地址修改 Why:1.Spring-Boot修改内置SpringMVC静态资源路径,提高项目目录结构的安全性.2.配置拦截路径时可以剔除静态文件拦截How:1 ...

  5. SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五) 温 ...

  6. SpringBoot内置生命周期事件详解 SpringBoot源码(十)

    SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringBoot事件监听 ...

  7. 如何SpringBoot项目改为外置Tomcat启动

    正常情况下,我们开发 SpringBoot 项目,由于内置了Tomcat,所以项目可以直接启动,部署到服务器的时候,直接打成 jar 包,就可以运行了 (使用内置 Tomcat 的话,可以在 appl ...

  8. 使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中

    前言:本项目基于maven构建 spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行: spring-boot项目需要部署在外部容器中的时候,spring ...

  9. SpringBoot内置tomcat启动原理

    前言          不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springb ...

随机推荐

  1. Django Flatpage设置

    参考链接:https://docs.djangoproject.com/en/1.11/ref/contrib/flatpages/ 知识点: 通过django.site数据库记录表,对应域名和请求站 ...

  2. 洛谷 P1801 黑匣子_NOI导刊2010提高(06) 题解

    昨晚恶补了一下二叉堆的内容 然后就找了几个二叉堆的题来做awa 然后发现用二叉堆做这题复杂度是O(nlogn) 但是有O(n)的解法 (某大佬这么说) 思路大概就是: 利用一个大根堆一个小根堆来维护第 ...

  3. 凤翔中学高三数学[备课&作业]

    #tab{ font-size:22px ;font-family:楷体;text-align:center;} a:link { text-decoration: none;} 凤中2020届高三文 ...

  4. K8s容器资源限制

    在K8s中定义Pod中运行容器有两个维度的限制: 1. 资源需求:即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod. 如: Pod运行至少需要2G内存,1核CPU    2. 资源限额: ...

  5. String.format()的详细用法

    问题 在开发的时候一段字符串的中间某一部分是需要可变的 比如一个Textview需要显示”XXX用户来自 上海 年龄 21 性别 男” 其中的 XXX 是用户名 每个用户也是不一样的 地区 上海 为可 ...

  6. R包的安装 卸载 加载 移除等

    R包的安装 1)使用 Rstudio 手动安装 Rstudio的窗口默认为四个,在右下角的窗口的 packages 下会显示所有安装的 R 包 点击 Install -> 输入R 包名 -> ...

  7. 【Gamma阶段】第七次Scrum Meeting

    冰多多团队-Gamma阶段第七次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 语音输入shell应用:基于pytorch ...

  8. Xcode一个project多个target

    project添加target https://blog.csdn.net/vbirdbest/article/details/53466009 https://www.cnblogs.com/Bob ...

  9. Lab3:虚拟内存管理

    前言 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要 ...

  10. vim文本编辑器的使用

    1.简介 vim是vi发展过来的一款文本编辑器,功能非常强大. 2.vim的工作模式 vim有三种工作模式,分别为命令模式.编辑模式.末行模式: 1)命令模式:打开文件之后,默认进入命令模式: 2)编 ...