Angular 2のPathLocationHandlerを組み込みJettyサーバーでサポートする方法を試しています。私はそれを理解し、それをするために、私はAngty 2のPathLocationHandlerとJettyのサポート(404エラーページを使用)
(https://stackoverflow.com/a/34104534/797)トップレベルのindex.htmlファイルに任意の404の要求をリダイレクトする必要があり、私はそれを行うための方法は、すべての404リダイレクトのContextHandlerとのErrorHandlerを与えることだった考え出し以下のようなコードで/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();
}
}
、私が見ることResourceHandlerはresourceBaseだし、その後...
//no resource - try other handlers
super.handle(target, baseRequest, request, response);
return;
呼び出し、それに一致するファイルが見つからないということです。その後、我々はContextHandlerからバブルアップし、最終的にHttpChannelOverHttpは要求が処理されたと見なされないため404を送信します。
if (!_response.isCommitted() && !_request.isHandled())
_response.sendError(404);
おそらく、JettyはResourceHandlerが何らかの別の方法で404エラーを通知することを期待していますか?あるいは、私は物事を構成する方法で何かを説明することに失敗しています。
誤った設定のヒントは、ResourceHandler "存在しないリソースの要求が許可されている(例:404)"ということに言及している可能性がありますが、それは自分のハンドラを書き込む以外'私は避けることを好むでしょう。