在我们的应用程序中,我们想要将一个angular2前端部署到一个spring引导后端(到src/main/resources/static中),但是要去掉urls中的#并使用angular2默认的PathLocationStrategy。如何在Spring Boot应用程序中使用Angular2 PathLocationStrategy?
1
A
回答
4
只是想分享我是如何做到的,希望它可以帮助别人: (SpringBoot 1.3.3,Angular2.beta15,angular2种子)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
return new Angular2PathLocationStrategyCustomizer();
}
private static class Angular2PathLocationStrategyCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container){
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/"));
}
}
}
1
这些都是你需要遵循三个步骤:
实现自己TomcatEmbeddedServletContainerFactory的bean,并成立了RewriteValve
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; ... import org.apache.catalina.valves.rewrite.RewriteValve; ... @Bean TomcatEmbeddedServletContainerFactory servletContainerFactory() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.setPort(8080); factory.addContextValves(new RewriteValve()); return factory; }
将rewrite.conf文件添加到应用程序的WEB-INF目录中,并指定重写规则。下面是一个rewrite.conf内容的示例,我在角度应用程序中使用它来利用角度的PathLocationStrategy(基本上我只是将所有内容都重定向到index.html,因为我们只是使用spring引导来提供静态Web内容):
RewriteCond %{REQUEST_URI} !^.*\.(bmp|css|gif|htc|html?|ico|jpe?g|js|pdf|png|swf|txt|xml|svg|eot|woff|woff2|ttf|map)$ RewriteRule ^(.*)$ /index.html [L]
摆脱useHash的(或将其设置为false)从你的路由声明:
RouterModule.forRoot(routes)
或
RouterModule.forRoot(routes, {useHash: false})
相关问题
- 1. 如何在Spring Boot应用程序中使用lombok.Data注释?
- 2. 如何在JUnitTests中使用ObjectMapper - Spring Boot应用程序
- 3. 如何在Spring Tool Suite中调试Spring Boot应用程序
- 4. 如何在Jelastic上使用PostgreSQL托管Spring Boot应用程序?
- 5. 如何在Spring Boot REST应用程序中重用类?
- 6. PathLocationStrategy VS HashLocationStrategy在Web应用程序
- 7. Nginx Angular2 html5mode PathLocationStrategy
- 8. 在Spring Boot中使用@ConfigurationProperties应用程序不起作用
- 9. 在WebSocketConfigurer中使用@PathParam(javax.websocket.server.PathParam)用于Spring Boot应用程序
- 10. Angular2-Dart PathLocationStrategy
- 11. Spring Boot应用程序中的SymmetricDS
- 12. 如何使用Swagger记录Spring Boot web应用程序的RestController?
- 13. 如何在Spring Boot应用程序中注册JavaEE筛选器?
- 14. 如何在Spring Boot应用程序中为Netty配置TLS?
- 15. 如何在Spring Boot应用程序中设置mina2 hl7Codec
- 16. 在Spring Boot应用程序中使用Rackspace时,Apache jclouds java.lang.NoSuchMethodError
- 17. 在spring boot vaadin应用程序中使用多个主题
- 18. Spring数据JPA使用Spring Boot应用程序问题
- 19. 使用Spring Boot构建Spring MVC应用程序
- 20. Spring-cloud-stream应用程序是否可以使用spring-boot?
- 21. 在spring-boot中,如何使用应用程序属性来记录MDC?
- 22. 如何在Spring Boot中使用WebSphere Runtime库作为站点应用程序
- 23. 多模块Spring Boot应用程序
- 24. Spring Boot web应用程序未启动
- 25. Spring Boot JNDI应用程序设置
- 26. Spring Boot应用程序。 SecurityContextHolder与HttpSession
- 27. Spring-Boot应用程序启动失败
- 28. 测试Spring Boot应用程序?
- 29. Spring Boot应用程序日志级别
- 30. 如何在Weblogic 12c(12.1.3)上部署Spring Boot应用程序?
你只是将所有内容重定向到'/',对吧? – drewmoore
jep,就像开发者快递服务器中间件一样:[require('connect-history-api-fallback')({index:'index.html'})] – Rob
我们为spring应用程序定义了另一个基本url,比如localhost :8080/mybase,但仍然有效 – Rob