임베디드 Jetty 서버로 Angular 2의 PathLocationHandler를 지원하는 방법을 연구 중입니다. 이를 이해하기 위해 404 요청을 최상위 수준의 index.html 파일 (https://stackoverflow.com/a/34104534/797)Angty 2의 PathLocationHandler with Jetty (404 오류 페이지 사용)
으로 리디렉션해야합니다.이 작업을 수행하는 방법은 ContextHandler와 ErrorHandler가 모두 404를 리디렉션하도록하는 것입니다. 아래의 코드와 같이 /index.html에 다시 요청합니다 (사실 컨텍스트 XML 파일에서이 작업을 수행하고 있지만 개념적으로/디버그하기가 쉽습니다).
내가 보는 것은 내 오류 처리기가 완전히 무시된다는 것이며 그 문제를 해결하는 방법이나 대안으로 구성해야하는 방법을 잘 모르겠습니다. http://localhost:8080/context-path/some-file-which-is-not-present.html 같은 요청에 대한 부두 코드를 통해 스테핑
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
public class JettyTest {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setResourceBase("/tmp/directory-with-just-an-index.html-file");
ContextHandler contextHandler = new ContextHandler("/context-path");
ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
errorHandler.addErrorPage(404, "/index.html");
contextHandler.setHandler(resourceHandler);
contextHandler.setErrorHandler(errorHandler);
server.setHandler(contextHandler);
server.start();
System.out.println("Started!");
server.join();
}
}
는, 내가 볼 것은 ... 그것은 resourceBase, 그리고 다음 호출의 ResourceHandler이 일치하는 파일을 찾아 없다고
//no resource - try other handlers
super.handle(target, baseRequest, request, response);
return;
입니다. .. 우리는 ContextHandler를 버블 링하고 결국 HttpChannelOverHttp는 요청이 처리 된 것으로 간주되지 않기 때문에 404를 보냅니다.
if (!_response.isCommitted() && !_request.isHandled())
_response.sendError(404);
아마도 부두에서는 ResourceHandler가 404 오류를 다른 방법으로 알리 길 기대하고 있습니까? 아니면 내가 물건을 구성하는 방식으로 뭔가를 설명하지 못할 수도 있습니다.
잘못된 구성 힌트는 ResourceHandler "존재하지 않는 리소스에 대한 요청이 전달됩니다 (예 : 404가 아닙니다)."에 대한 언급이있을 수 있지만 그 다음에 '자신의 처리기 작성'이외에 어디로 가야할지 명확하지 않습니다. '나는 피하는 것을 선호한다.
모든 포인터가 많이 감사합니다!