当前位置: 首页 > 知识库问答 >
问题:

带Spring靴

盛柏
2023-03-14

我有两个项目。我用Angular2 cli构建的Angular2应用程序和只为Angular2应用程序服务的Spring Boot应用程序。我用ng build构建Angular2应用程序,它会生成一个dist文件夹。然后,我将dist文件夹的内容放在Spring Boot应用程序的src/main/resources/static中。

我的Spring启动应用程序有两个文件。

Spring Boot应用程序类:

@SpringBootApplication
public class SpringBoot extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SpringBoot.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBoot.class, args);
    }
}

及其应用。属性文件:

server.contextPath=/
server.port=80

它工作得很好,但是如果我转到一个url并点击刷新按钮,我会看到白标签错误页面。我知道这是因为URL没有提供索引。html当它们与资源文件不匹配时。

我如何配置我的Spring Boot应用程序来提供索引。html如果url与资源文件不匹配?

共有2个答案

宋嘉懿
2023-03-14

在这里你可以找到我的Spring Boot 2和Angular 6入门项目。

Spring Boot应用程序是使用Spring Initializer创建的,Angular应用程序是使用Angular CLI创建的。

梁丘亦
2023-03-14

你的索引是正确的。对于Spring未知的endpoint,需要返回html。然后安排Angular应用程序管理未知路线。

我使用WebMVCConfigureAdapter处理这种情况。还可以将静态内容文件类型放在这里。

添加一个config目录,并在其中添加一个包含以下内容的Java文件WebMvcConfig(例如):

package com.yourdomain.yourapp.config;

import org.springframework.boot.autoconfigure.web.ResourceProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.resource.PathResourceResolver;

import java.io.IOException;
import javax.inject.Inject;

@Configuration
@EnableConfigurationProperties({ ResourceProperties.class })
public class WebMvcConfig extends WebMvcConfigurerAdapter {

  @Inject
  private ResourceProperties resourceProperties = new ResourceProperties();

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    Integer cachePeriod = resourceProperties.getCachePeriod();

    final String[] staticLocations = resourceProperties.getStaticLocations();
    final String[] indexLocations = new String[staticLocations.length];
    for (int i = 0; i < staticLocations.length; i++) {
      indexLocations[i] = staticLocations[i] + "index.html";
    }
    registry.addResourceHandler(
      "/**/*.css",
      "/**/*.html",
      "/**/*.js",
      "/**/*.json",
      "/**/*.bmp",
      "/**/*.jpeg",
      "/**/*.jpg",
      "/**/*.gif",
      "/**/*.ico",
      "/**/*.png",
      "/**/*.ttf",
      "/**/*.wav",
      "/**/*.mp3",
      "/**/*.eot",
      "/**/*.svg",
      "/**/*.woff",
      "/**/*.woff2",
      "/**/*.map"
    )
      .addResourceLocations(staticLocations)
      .setCachePeriod(cachePeriod);

    registry.addResourceHandler("/**")
      .addResourceLocations(indexLocations)
      .setCachePeriod(cachePeriod)
      .resourceChain(true)
      .addResolver(new PathResourceResolver() {
        @Override
        protected Resource getResource(String resourcePath, Resource location) throws IOException {
          return location.exists() && location.isReadable() ? location : null;
        }
      });
  }
}

我想你还必须指定组件扫描的配置包。也许先试试不,看看它是否有效。

@SpringBootApplication
@ComponentScan( basePackages = { "com.yourdomain.yourapp.config" })
public class SpringBoot extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(SpringBoot.class);
  }

  public static void main(String[] args) throws Exception {
    SpringApplication.run(SpringBoot.class, args);
  }
}

以防你失去依赖。这就是我的构建中的内容。格雷德尔

dependencies {
  compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
  compile group: 'javax.inject', name: 'javax.inject', version: '1'

  optional group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'

  providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat'

  testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test'
}

希望这有帮助:-)

 类似资料:
  • 我有一个Spring Boot项目,使用Jersey作为我的REST服务,并使用AngularJS进行我的前端开发。当我在不使用任何控制器的情况下运行它并转到index.html(位于resource/statig/index.html中)时,它运行得很好。当我添加一个控制器时,它呈现给出字符串“index.html”作为输出。Spring Boot配置: 球衣配置: 控制器类:

  • 3)引用了mongeez.location={myDir}/db中的位置 我在启动应用程序时处于异常之下 由:com.mongodb.mongoCommandException引起:命令失败,错误为59(CommandNotFound):“在服务器本地主机:27017上没有这样的命令:'$eval'.完整的响应是{“ok”:0.0,“errmsg”:“no suck command:'$eval'

  • 我是Spring Boot和MongoDb的新手。尝试使用Mongo存储库和Spring Boot的一些示例。但在浏览了一些文档后发现,Mongo模板是一个更好的选择。无法使用Mongo模板示例获得正确的Spring Boot。 > 有人能帮我举个同样的例子吗? 在尝试Mongo模板时,我们是否需要创建用户定义的存储库界面并扩展存储库或CRUD存储库?

  • 我正在使用jasypt spring boot starter:1.14和spring-boot-2.0.0。M2 如果application.properties在类路径(src/main/资源)中可用,它工作得非常好 即使应用程序运行正常,Spring boot也能正常工作。属性放在运行spring boot jar的文件夹中(默认情况下,它在当前文件夹中查找application.prope

  • 我想在我的应用程序中使用LDAP,以便进行身份验证 在前面的配置中,我使用数据库进行身份验证 不,我想使用ldap进行身份验证 我修改了security-app-context.xml 但是当我测试时,我有这样一个错误: LDAP://192.168.0.88:389 基本DN DC=部长,DC=FR 身份验证搜索筛选器 (&(objectclass=person)(mail=@email_add

  • 我正在尝试理解Spring boot中的松散绑定我已经查看了https://docs . Spring . io/Spring-boot/docs/current/reference/html/boot-features-external-config . html # boot-features-external-config-relaxed-binding但是我认为我缺少了一些东西如果我有一个