스프링 부트 단일 페이지 응용 프로그램 - 모든 요청을 index.html로 전송합니다.
Spring Boot(v1.3.6) 싱글 페이지 애플리케이션(angular2)을 사용하고 있으며 모든 요청을index.html
.
http://localhost:8080/index.html에 대한 요구는 동작하고 있지만(200으로 index.html을 취득합니다) http://localhost:8080/home은 동작하지 않습니다(404).
Runner.class
@SpringBootApplication
@ComponentScan({"packagea.packageb"})
@EnableAutoConfiguration
public class Runner {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext run = SpringApplication.run(Runner.class, args);
}
}
WebAppConfig.class
@Configuration
@EnableScheduling
@EnableAsync
public class WebAppConfig extends WebMvcConfigurationSupport {
private static final int CACHE_PERIOD_ONE_YEAR = 31536000;
private static final int CACHE_PERIOD_NO_CACHE = 0;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.setOrder(-1);
registry.addResourceHandler("/styles.css").addResourceLocations("/styles.css").setCachePeriod(CACHE_PERIOD_ONE_YEAR);
registry.addResourceHandler("/app/third-party/**").addResourceLocations("/node_modules/").setCachePeriod(CACHE_PERIOD_ONE_YEAR);
registry.addResourceHandler("/app/**").addResourceLocations("/app/").setCachePeriod(CACHE_PERIOD_NO_CACHE);
registry.addResourceHandler("/systemjs.config.js").addResourceLocations("/systemjs.config.js").setCachePeriod(CACHE_PERIOD_NO_CACHE);
registry.addResourceHandler("/**").addResourceLocations("/index.html").setCachePeriod(CACHE_PERIOD_NO_CACHE);
}
}
styles.css
,/app/third-party/xyz/xyz.js
,..는 동작하고 있습니다(200과 올바른 파일을 입수했습니다).오직./**
로.index.html
동작하지 않습니다.
다음과 같이 전송 컨트롤러를 추가할 수도 있습니다.
@Controller
public class ForwardingController {
@RequestMapping("/{path:[^\\.]+}/**")
public String forward() {
return "forward:/";
}
}
첫 번째 부분{path:[^\\.]+}
1개 또는 여러 개의 문자와 일치합니다..
.이것에 의해, 확실히 요구됩니다.file.ext
는 이 RequestMapping에서 처리되지 않습니다.서브패스 전송도 지원해야 하는 경우/**
을 벗어나서{...}
.
이건 나한테 안 통했어
return "forward:/";
Spring MVC @RestController 및 리다이렉트 덕분에 제대로 작동하는 솔루션을 찾을 수 있었습니다.
@RequestMapping(value = "/{[path:[^\\.]*}")
public void redirect(HttpServletResponse response) throws IOException {
response.sendRedirect("/");
}
로그를 보지 않고는 왜 올바르게 매핑되지 않는지 알 수 없지만 URL을 뷰(HTML)에 매핑하려면viewController
메커니즘 스프링은 http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-config-view-controller를 제공합니다.
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
}
(상기 링크된 스프링 문서에서 가져온 것입니다.이것은 스태틱리소스의 매핑을 재연결하는 것이 아니라 뷰에 URL을 매핑하는 방법입니다).
리소스 매핑에 대한 접미사 필터링이 있는지 잘 모르겠습니다(예:어떻게 봄철에 요청을 매핑할지 모르겠어요.ResourceHttpRequestHandler
- http://localhost:8080/home.http:201Amps와 같은 것을 시도(확인 또는 거부)한 적이 있습니까?
Spring-Boot의 기본 홈페이지 동작으로 인해 위에서 정의한html 매핑이 무시되고 index.http://https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ResourceProperties.java#L108 에서 index.http://https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ResourceProperties.java#L108 가 동작하고 있을 가능성도 있습니다.
저도 같은 문제가 있었고, 다음과 같은 문제가 있었습니다.html 파일은 src/main/resources/static/app 내에 있습니다.
중요한 것은 @EnableWebMvc를 삭제하고 "classpath:/static/app/"를 addResourceLocations에 추가하는 것이었습니다.이게 도움이 됐으면 좋겠다.
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/","classpath:/static/app/", "classpath:/public/" };
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(
CLASSPATH_RESOURCE_LOCATIONS);
}
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// forward requests to /admin and /user to their index.html
registry.addViewController("/portal").setViewName(
"forward:/app/index.html");
}
};
}
언급URL : https://stackoverflow.com/questions/38783773/spring-boot-single-page-application-forward-every-request-to-index-html
'programing' 카테고리의 다른 글
태그를 사용하여 경로를 따라가면 React-Router가 새로 고침 페이지입니다. (0) | 2023.03.18 |
---|---|
[객체]에서 "객체"를 두 번 언급하는 이유는 무엇입니까? (0) | 2023.03.18 |
React.js - 재렌더 시 입력이 초점을 잃음 (0) | 2023.03.18 |
ORA-38104: ON 절에서 참조되는 열은 업데이트할 수 없습니다. (0) | 2023.03.18 |
woocommerce 함수로 작성된 함수를 덮어쓰려고 합니다.php 파일 (0) | 2023.03.18 |