springboot项目在外部tomcat下可以启动但是无法访问的问题

首先要确定已经生成了正确的war包,具体操作如下:

在pom.​​xml​​中加入

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
  • 还需要在project标签下加入
<packaging>war</packaging>

在Application启动类中修改

  • 需要继承SpringBootServletInitializer类
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SecurityApplication.class);
}
@SpringBootApplication
public class SecurityApplication extends SpringBootServletInitializer{

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SecurityApplication.class);
}

public static void main(String[] args) {
SpringApplication.run(SecurityApplication.class, args);
}
}

运行clean package命令打包

  • 将项目打成war包放到tomcat的wabapps目录下运行tomcat
  • 我都做完了这些步骤后,tomcat可以正常启动,但却访问不到项目,访问项目时是404,找了半天原因,结果是在tomcat下访问时默认路径必须添加上项目名,然后我们项目是前后端分离的并且没有写项目名称,平时使用内置tomcat时直接访问localhost:8080就可以,但是转到外置的tomcat就不行了。几经周折找到了解决办法

修改tomcat的默认访问路径

  • 打开tomcat文件夹下的conf,修改server.xml文件,如下:
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">
//将path修改为""即可,
<Context path="" docBase="C:\Users\Administrator\Desktop\开发组件\apache-tomcat-8.0.52\webapps\myblog-1.0"> </Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

</Host>
  • 重启tomcat就可以使用localhost:8080来访问项目了!