Java 我的角度+;部署在TomCat上时,Spring应用程序路由不起作用

Java 我的角度+;部署在TomCat上时,Spring应用程序路由不起作用,java,spring,angular,typescript,Java,Spring,Angular,Typescript,我对角形和弹簧非常陌生。我可能犯了一些愚蠢的错误。 我有Angular+Spring应用程序,它显示登录屏幕,然后显示菜单。 当未展开时(即,当角度和弹簧平行运行时),此功能非常有效 但当我在tomcat上部署应用程序时,它不会显示登录表单。 我按照以下步骤进行部署- ng build--base href=/ 将所有文件从angular dist文件夹复制到spring静态文件夹 在spring中创建.war文件并在tomcat中部署它 我的pom.xml <groupId>com

我对角形和弹簧非常陌生。我可能犯了一些愚蠢的错误。 我有Angular+Spring应用程序,它显示登录屏幕,然后显示菜单。 当未展开时(即,当角度和弹簧平行运行时),此功能非常有效 但当我在tomcat上部署应用程序时,它不会显示登录表单。 我按照以下步骤进行部署-

  • ng build--base href=/
  • 将所有文件从angular dist文件夹复制到spring静态文件夹
  • 在spring中创建.war文件并在tomcat中部署它
  • 我的pom.xml

    <groupId>com.techence</groupId>
            <artifactId>new</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>war</packaging>
    
            <name>LoginDemoBackend</name>
            <description>Demo project for Spring Boot</description>
    
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.0.4.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-test</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
    
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <scope>runtime</scope>
                </dependency>
    
    
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-jdbc</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-configuration-processor</artifactId>
                    <optional>true</optional>
                </dependency>
    
                    <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <version>1.5.7.RELEASE</version>
                    <scope>provided</scope>
                    </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    
                <dependency>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.1.0</version>
                    <type>maven-plugin</type>
                </dependency>
            </dependencies>
    
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
    
    
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                        <version>2.4</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>
        </project>
    

    请尝试在Spring启动代码中添加以下内容:

    @Bean
    public ErrorViewResolver customErrorViewResolver() {
        final ModelAndView redirectToIndexHtml = new ModelAndView("forward:/index.html", Collections.emptyMap(), HttpStatus.OK);
        return (request, status, model) -> status == HttpStatus.NOT_FOUND ? redirectToIndexHtml : null;
    }
    

    这对我来说是可行的,甚至角度布线也是可行的。我找到了。

    尝试在tomcat服务器地址之后添加
    /index.html
    。不起作用。它给出错误-无法找到此本地主机页尝试在Spring Boot
    application.properties
    文件中设置
    server.servlet.context path=/yourapp
    。然后尝试通过
    http://localhost:/yourapp
    。在项目的webapp目录中给定index.html文件,您应该能够访问该页面。如果将spring boot应用程序部署到外部tomcat webcontainer(非嵌入式!),它将在特定的contextpath下提供服务,因为单个tomcat实例可以承载在同一端口下提供的多个应用程序。使用Spring引导属性
    server.servlet.context path
    可以显式配置此contextpath。我尝试了application.properties设置,但遇到了相同的问题。这适用于tomcat 10和9。如果可能的话,我想听听解释。这样我才能理解背后的原因this@rahal-kanishka当您请求spring应用程序资源(在本例中为angular应用程序中的路径)时,spring没有该url的注册映射或静态文件,它将返回404错误
    ErrorViewResolver
    用于确定发生错误时应返回给您的内容(默认情况下,
    Whitelabel error Page
    带有一些消息)。解决方案的基础是,如果spring找不到某些东西,可能会将其放置在您的angular应用程序中。
    @Bean
    public ErrorViewResolver customErrorViewResolver() {
        final ModelAndView redirectToIndexHtml = new ModelAndView("forward:/index.html", Collections.emptyMap(), HttpStatus.OK);
        return (request, status, model) -> status == HttpStatus.NOT_FOUND ? redirectToIndexHtml : null;
    }