网上的博客好多坑,还是要自己尝试解决下才可以呀!!!
这个文章很多,其中介绍了很多修改方式,我这里只写我遇到的坑。
一、修改pom文件
1、修改打包方式
2、设置打包文件名
3、修改依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
4、添加依赖:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
这里有人说可以用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
替换,我试了,不行,我这里启动会找不到启动类,我猜是因为没有找到SpringBootServletInitializer实现类
二、修改启动类
extends SpringBootServletInitializer,重写configure方法
package com.thc.myBlog; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cache.annotation.EnableCaching; @MapperScan("com.thc.myBlog.dao") @EnableCaching @SpringBootApplication public class MyBlogApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(MyBlogApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application){ return application.sources(MyBlogApplication.class); } }
三、打包,部署
1、使用maven命令打包 maven clean -U package (为了方便,也可以直接使用idea中的maven组件打包,双击就可以,超方便)
2、找到target文件夹下打包成功的blog.war包,复制到tomcat的webapp即可。
四、启动tomcat
看到spring启动标识才是真的应用部署成功。
================我遇到的问题:
开始我没有引入javax.servlet-api包,而是信了一篇博文,用引入pring-boot-starter-tomcat包代替,结果tomcat启动成功了,我的应用也部署成功了,但是却不能访问
我尝试了通过配置tomcat的conf/tomcat-users.xml文件登录应用管理界面查看应用,确认部署成功
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>
但是tomcat启动的时候并没有报错,我想到了之前看到有人引入了servlet-api的包,尝试下,确实是这样的。
引入javax.servlet-api包确实成功了,但是却不能访问login.html页面,view层我使用的是thymeleaf,报错是我用了他的内置对象的位置
<p class="mt-10 mb-3 font-weight-normal" >服务器端口号:
<font color="red" th:text="${#request.localPort}"></font></br>
sessionid:<font color="red" th:text="${session.id}"></font></p>
很奇怪,request前面要求必须添加#,session对象前面一定不能使用#。但其实我使用内置tomcat的时候两个对象前面我都加了#,可以正常读取。
具体原因我没有查文档,有时间可以看看官方文档怎么说的。
截图可以看到,sessionid根本就没有读到,
今天不想弄了,改天再看吧,搜了几篇很好的文章,可以看下
https://blog.csdn.net/liubin5620/article/details/80481848
https://my.oschina.net/GinkGo/blog/1501622