在我們的應用程序中,我們想要將一個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