2017-11-10 18 views
0

내 요구 사항은 요청에 어떤 경로가 설정되어 있는지에 관계없이 "index.html"을 제공하는 것입니다. 나는 Routing template format for undertow을 참조했지만 아무 소용이 없습니다. 그것은 사람들을 위해 일하는 것 같습니다. 핸들러는와일드 카드를 사용하여 라우팅 형식을 조정하십시오.

PathHandler path1 = Handlers.path() 
      .addPrefixPath("/*", new ResourceHandler(new FileResourceManager(new File(System.getProperty("user.dir")+"ed.jpg"), 100 * 1024)).setWelcomeFiles("index.html")); 

처럼 보인다 그리고 나뿐만 아니라 PathResourceManager를 사용하여 시도

server = Undertow 
        .builder() 
        .addHttpListener(serverConfig.getHttpPort(), serverConfig.getHost()) 
        .addAjpListener(serverConfig.getAjpPort(), serverConfig.getHost()) 
        .setHandler(path1) 
        .build(); 

같은 핸들러가 추가되고있다. 그건 작동하지 않습니다. 핸들러는 와일드 카드없이 경로를 완벽하게 일치시킬 수 있습니다. 와일드 카드 문자가있는 경우 만 실패하는 것 같습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

+0

제대로 이해하면 URL 경로가 무엇이든 상관없이 하나의 파일 (index.html) 만 제공하고 싶습니까? – aramaki

+0

@aramaki 맞습니다. 내가 백엔드에 대한 호출과 일치하는 다른 경로를 가지고 있으며, 그들은 잘 작동합니다. –

+0

내 답변에 설명 된 솔루션이 도움이됩니까? – aramaki

답변

1

PathHandler을 사용하고 싶지 않습니다.

대신, 다음과 같이 사용자 정의 핸들러에서 직접 ResourceManager에 사용하여 HTML 파일을 제공 :

ResourceManager rm = new PathResourceManager(Paths.get("/path/to/your/folder")); 
Resource r = rm.getResource("index.html"); 
Undertow.builder() 
    .addHttpListener(8080, "0.0.0.0") 
    .setHandler(Handlers.predicate(
     ex -> ex.getRequestMethod().equals(Methods.GET), 
     ex -> r.serve(ex.getResponseSender(), ex, IoCallback.END_EXCHANGE), 
     ResponseCodeHandler.HANDLE_405) 
    ).build().start(); 
는 는

: 나는에, 술어로 요청 동사/방법에 대한 간단한 검사를 추가했습니다 GET 요청 만 허용하고 간단한 405 응답으로 대체 할 수 있습니다.

참고 2 : HTML 파일을 처리하는 처리기를 작업자 스레드로 보내려는 경우가 있습니다.

+0

이것은 완벽하게 작동했습니다. –