10

我有一个在嵌入式服务器上完美运行的 Spring Boot Rest Web 应用程序。但是,按照博客https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file中提到的步骤进行操作后,出现 404 错误当我向服务器上的资源发送请求时的消息。我在本地使用了 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 [/]
4

6 回答 6

12

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

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

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 是我的应用服务器的,所以它可能对你的有一些变化。

如果您需要帮助,请发表评论。

于 2017-11-09T06:31:02.230 回答
3

检查是否

<build>
     <finalName>refms</finalName>
         ...
</build>

在 pom.xml 中对应的是

server.contextPath=/refms

在 application.properties 并检查

<Context path="/refms"/>

在 context.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

于 2017-11-14T15:50:28.147 回答
1

检查根包src/main/java,它应该与POM groupid中提到的包名相同,即。com.dbe.ref如果有任何不匹配,则会出现相同的问题。

于 2019-05-23T06:21:53.747 回答
0

确保您已将上下文路径添加到您的 Spring Boot 应用程序。通常它位于 src\main\resources 内的 application.properties 文件中。在该属性文件中,添加属性:

server.contextPath=/refms

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

于 2017-11-09T19:57:41.073 回答
0

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

由于您已将 finalName 放入 maven 构建部分,因此您的 war 文件应命名为:refms.war,因此您的应用程序将在以下条件下运行:

http://host:port/refms/

我的假设是,在将 war 文件复制到 tomcat 之前,您没有将其重命名为 ROOT.war,因此您的应用程序将不会以下位置运行:

http://主机:端口/

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

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

Mapping servlet: 'dispatcherServletRegistration' to [/refms/*]

这与应用程序的上下文根相关。因此,如果您没有重命名您的 war 文件,您收到 404 的身份验证端点可能会位于:

http://localhost:8080/refms/refms/api/account/authenticate
于 2017-11-14T10:34:13.407 回答
0

在您的评论中,您提到 /authenticate 给出了 404,这是因为您已将登录过程 URL 设置为“authenticate”。这是登录表单发布到的 URL。如果未指定,则默认为 /login。Spring Security 框架拦截该 URL 并获取登录名和密码参数。

于 2017-11-14T08:52:21.360 回答