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