无法访问 Tomcat 上部署的 WAR 文件 [英] Can not access deployed WAR file on Tomcat
问题描述
我有一个可在我的本地机器上运行的 Spring Boot Rest 服务项目.当我将应用程序作为Spring Boot App"运行时
I have a Spring boot rest service project which works on my local machine. When I run the application as "Spring Boot App"
我可以通过访问
http://127.0.0.1:8080/persons/all
并且它按预期返回 JSON.
and it returns JSON as it's supposed to.
我将 pom.xml 打包更改为 war,然后我通过转到 Run as -> Maven build in Spring 工具套件创建了一个 war.它创建一个战争文件.当我在 http://myserverip:8080/manager/ 上传战争文件时,我没有收到任何错误,它显示在应用程序下
I changed the pom.xml packaging to war, I then created a war by going to Run as -> Maven build in Spring tools suit. It creates a war file. When I upload the war file on http://myserverip:8080/manager/ I get no errors and it shows up under Applications
上传后war文件名为myapp-0.0.1-SNAPSHOT.war",我尝试访问
The war file name is "myapp-0.0.1-SNAPSHOT.war" after uploading it, I tried to access it by going to
http://myserverip:8080/myapp-0.0.1-SNAPSHOT/人/所有
但我收到 404 错误
But I get a 404 error
我在这里做错了什么?
我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myapp</name>
<description>myappapi</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<packaging>war</packaging>
</project>
当我构建应用程序时,我得到以下日志
When I build the application, I get the following logs
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myapp ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myapp ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ myapp ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-war-plugin:2.6:war (default-war) @ myapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [myapp] in [C:\Users\me\Documents\workspace-sts-3.8.2.RELEASE\myapp\target\myapp-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [586 msecs]
[INFO] Building war: C:\Users\me\Documents\workspace-sts-3.8.2.RELEASE\myapp\target\myapp-0.0.1-SNAPSHOT.war
[INFO]
[INFO] --- spring-boot-maven-plugin:1.4.2.RELEASE:repackage (default) @ myapp ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.300 s
[INFO] Finished at: 2016-11-21T10:12:03-05:00
[INFO] Final Memory: 20M/243M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "pom.xml" could not be activated because it does not exist.
我的 MyappApplication.java
my MyappApplication.java
package com.mycompany;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class MyappApplication {
public static void main(String[] args) {
SpringApplication.run(MyappApplication.class, args);
}
}
推荐答案
如评论中所述,您可以通过将 war 部署到独立的 tomcat 实例来传统地部署 spring boot 应用程序.您需要对具有 main()
方法的 MyappApplication.java
类进行一些更改.
As mentioned in comments, you can deploy spring boot application traditionally by deploying war to a standalone tomcat instance. You need to make some changes to your MyappApplication.java
class which has the main()
method.
使您的
MyappApplication
扩展SpringBootServletInitializer
并覆盖其configure()
方法,
Make your
MyappApplication
to extendSpringBootServletInitializer
and override itsconfigure()
method,
@SpringBootApplication
public class MyappApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(MyappApplication.class, args);
}
}
下一步是将打包为 war 而不是您已有的默认 jar.
The next step is to have packaging as war instead of the default jar which you already have.
最后在您的 pom.xml
中将嵌入的 tomcat 容器的范围更改为 provided
,以便在部署到单独的实例时不会发生冲突.
Finally in your pom.xml
change the embedded tomcat container's scope to provided
, so that it doesn't conflict when you deploy to a separate instance.
这篇关于无法访问 Tomcat 上部署的 WAR 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!