背景
今天遇到的问题是要将一个新项目打包部署到老机器上,(由于以java -jar 的方式运行jar包没有前端资源,故放弃研究),索性在老机器上安装了tomcat,以war包的形式运行。(在这里感谢现实工作中大哥的思路指导)
废话不多说了,直接上教程
先贴一张本项目结构图—(不规范导致出现问题,建议规范目录构建)
规范目录结构:
报错截图,接口状态是404
浏览器报错:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback
Tue Aug 20 17:54:56 CST 2024
There was an unexpected error (type=Not Found, status=404).
解决流程
- 在 pom.xml 文件的 中指定 packaging 为 war
<packaging>war</packaging>
- 新增config类ServletInitializer :确保 Spring Boot 正确配置为 WAR 部署。例如,SpringBootServletInitializer 应该被实现
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) {
return application.sources(SvcsApplication.class);
}
}
- web.xml 中配置了 Spring 的 DispatcherServlet,并映射了合适的 URL pattern
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- web.ml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- context.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
</Context>
- SpringBootApplication 类继承了 SpringBootServletInitializer
@SpringBootApplication
public class SvcsApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SvcsApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SvcsApplication.class, args);
}
}
- 开始打包
复制到tomcat的webapps文件,tomcat自动检测war包并解压
附上打包目录:
启动tomcat!!!
至此完结
若要部署其他机器,只需要复制其文件夹到webapps文件即可