Spring Boot休息控制器部署在外部Tomcat 9服务器上时返回404



我有一个Spring Boot REST Web应用程序,该应用程序在嵌入式服务器上完美工作。但是,在遵循IS博客中提到的步骤之后消息whan我将重新设置为服务器上的资源。我在本地使用了Java 1.8.0_212并使用Java 1.8.0_131,并在服务器上的Tomcat 9上部署了我的应用程序。令我困惑的一件事是,可以访问扩展Crudrepository的存储库。以下是我应用程序的入口点。

@SpringBootApplication
@ComponentScan(basePackages = "com.dbe.ref")
public class RefmsApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(RefmsApplication.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(RefmsApplication.class, args);
    }

以及我的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.dbe.ref</groupId>
    <artifactId>refms</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>refms</name>
    <description>project for Rural electrification fund</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>LATEST</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>
        <start-class>com.RefmsApplication</start-class>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>angularjs</artifactId>
            <version>1.4.10</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.4</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>font-awesome</artifactId>
            <version>4.7.0</version>
        </dependency>
        <dependency>
            <groupId>eu.michael-simons</groupId>
            <artifactId>wro4j-spring-boot-starter</artifactId>
            <version>0.3.4</version>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.dynamicreports</groupId>
            <artifactId>dynamicreports-core</artifactId>
            <version>5.0.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>refms</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

这是日志的一部分:

2017-09-19 10:38:20.564  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'errorPageFilter' to: [/*]
2017-09-19 10:38:20.565  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-09-19 10:38:20.566  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-09-19 10:38:20.568  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-09-19 10:38:20.568  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2017-09-19 10:38:20.571  INFO 6660 --- [           main] .s.DelegatingFilterProxyRegistrationBean : Mapping filter: 'springSecurityFilterChain' to: [/*]
2017-09-19 10:38:20.571  INFO 6660 --- [           main] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'configurableWroFilter' to urls: [/wro4j/*]
2017-09-19 10:38:20.572  INFO 6660 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServletRegistration' to [/refms/*]
2017-09-19 10:38:20.573  INFO 6660 --- [           main] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]

默认情况下在嵌入式服务器和外部服务器上部署应用程序时有一点区别。

使用嵌入式服务器,您可以使用以下方式访问您的应用程序:

http://localhost:<port>/<resourceName>

当您在另一个容器中部署war,则需要添加具有以下版本的应用程序名称:

http://localhost:<port>/<applicationNameWithVersion>/<resourceName>

例如,如果您部署了此示例,则嵌入式服务器的URL为:

http://localhost:8080/greeting

和用于外部部署应用程序的URL,如果有:

http://localhost:8999/gs-rest-service-0.1.0/greeting

注意:此URL是我的应用程序服务器的,因此它可能对您的应用程序进行一些更改。

如果您需要帮助。

检查

是否
<build>
     <finalName>refms</finalName>
         ...
</build>

在pom.xml中与

相对应
server.contextPath=/refms

在应用程序中。

<Context path="/refms"/>

在上下文中。xml。也许您的根源在tomcat中部署不同之后。

此外,更改此依赖性

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency>

通过这个

<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>

对于外部tomcat

检查 src/main/java中的根软件包,它应该与pom groupId IE中提到的软件包名称相同。 com.dbe.ref如果发生任何不匹配,则发生了同一问题。

确保已在Spring Boot应用程序中添加了上下文路径。通常是在application.properties文件中,src main resources中的文件。在该属性文件中,添加属性:

server.contextPath=/refms

您应该能够使用Bellow链接访问您的应用程序 localhost:8080/refms/api/account/authenticatelocalhost:8080/refms-xxxx/api/account/authenticate(其中XXXX是您的伪影版本)

在您提到/身份验证的评论中提供404,这是因为您将登录过程URL设置为"身份验证"。这是登录表格发布到的URL。如果未指定,则默认为/登录。弹簧安全框架截取URL并获取登录和密码参数。

当您将应用程序部署到tomcat中时,URL取决于应用程序部署的上下文路径。在大多数情况下,这与您在Tomcat" WebApps"目录中放入的战争文件的名称完全匹配。您可以通过查看" WebApps"目录来查看名称。现在,您的战争文件也可能已经到达目录。

由于您已在Maven构建部分中放置了一个名称,因此您的战争文件应命名: refms.war ,因此您的应用程序将在:

下运行

http://主机:port/refms/

我的假设是您 not 将战争文件重命名为root.war。在将其复制到tomcat中之前,因此您的应用程序将>>>>>>>>>>P>

http://主机:port/

如果您这样做,您的应用程序将运行类似于嵌入式的tomcat实例;在根上下文上。

从您的日志文件中,我可以看到您的身份验证端点是在/refms/

上映射的
Mapping servlet: 'dispatcherServletRegistration' to [/refms/*]

这是相对于应用程序的上下文根的。因此,如果您没有重命名战争文件,则您收到404的身份验证端点可能会在:

http://localhost:8080/refms/refms/api/account/authenticate

最新更新