在Tomcat api中部署war文件后不起作用
Posted
技术标签:
【中文标题】在Tomcat api中部署war文件后不起作用【英文标题】:After deploying war file in Tomcat api not working 【发布时间】:2019-06-15 22:17:19 【问题描述】:我正在尝试在本地 tomcat 中部署应用程序,但遇到了一些问题。我使用:Tomcat 9、Spring boot、ReactJS 和 Webpack。当我运行嵌入式 Tomcat(在 Eclipse 中)时一切正常 - API 运行良好,但是当我构建 war 文件并将其粘贴到本地 Tomcat 时 - API 不工作,所有请求都失败了。
我如何构建战争文件:
运行 mvn“干净安装”; 将war文件粘贴到我的本地Tomcat目录“webapps”; 等待部署; 转到“http://localhost:8080/web_importer/#/importCandidates”。但是,当我在 Eclipse 中运行我的应用程序时,我使用了另一个路径:“http://localhost:8080/#/importCandidates”,API 使用此路径(示例)“http://localhost:8080/api/originator”,而不是“http://localhost:8080/web_importer/api/originator”。我怎样才能改变这条路?
application.properties:
server.port = 8080
management.server.port: 8995
management.server.address: 127.0.0.1
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
spring.http.encoding.force=true
OriginatorController.java:
@RequestMapping(value = "/api/originator", method = RequestMethod.GET)
public List<OriginatorModel> retrieveOriginators()
logger.info("Performing /api/originator GET request");
return originatorService.retrieveOriginators();
我的 pom.xml:
<groupId>com.kddb_web_importer</groupId>
<artifactId>web_importer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>web_importer</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>$project.artifactId</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
【问题讨论】:
答案可能在您的问题中未提供的应用程序部分(源代码+配置)中找到。请编辑您的问题以包含minimal reproducible example @Selaron,添加了据称可以提供帮助的所有内容。如果您调用其他具体需要添加的内容 - 我会添加。 Add context path to Spring Boot application的可能重复 【参考方案1】:当您从 Eclipse 启动应用程序时,它使用独立服务器,通过 localhost 直接访问,URL 为 http://localhost:8080/api/originator。
当您运行本地 tomcat 实例时,http://localhost:8080 是基本 tomcat URL。接下来是您的应用程序的名称,在本例中为 web_importer。所以 URL 变成了http://localhost:8080/web_importer/api/originator,这就是你得到 404 Not Found 的原因。
您的前端似乎直接在http://localhost:8080/api/originator 调用API。当您想要使用您的 API 的 tomcat 部署版本时,您需要在前端配置中更改您的基本 API URL。
【讨论】:
以上是关于在Tomcat api中部署war文件后不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat“Log4J”上的 Grails WAR 根本不起作用
使用 configureApplicationServer ANT 任务安装 WAR 文件在 Tomcat 上不起作用?