1 回答

TA貢獻2039條經驗 獲得超8個贊
您還沒有指出您收到的是哪種 404 錯誤。
如果 404 來自 Jetty 本身(不是上下文的一部分),則由Serverlevel控制ErrorHandler。(例如http://<machine>/foo/bar您場景中的 GET 請求,因為“/foo”不是您的“/wac”上下文的一部分)
如果 404 來自流回的錯誤ServletContextHandler,那么您現有ErrorPageErrorHandler的大部分是正確的。
第二個參數addErrorPage是 URL 路徑(相對于您聲明的基礎資源),而不是文件系統路徑。
示例(假設/error.html可通過網絡 GET 請求訪問):
ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
errorHandler.addErrorPage(HttpStatus.NOT_FOUND_404, "/error.html");
context.setErrorHandler(errorHandler);
注意:URL 路徑可以指向一個 Servlet(你的,一個 jsp,一個 jersey 端點等),如果你愿意的話,它不一定是 HTML。
如果 404 來自 JAX-RS/Jersey 請求,則 JAX-RS/Jersey 中有特定處理以根據傳入請求詳細信息生成有效的 404 錯誤響應。
一個示例是請求 JSON 資源的 REST 客戶端,而 Jersey 生成 404 響應,其中包含指示錯誤詳細信息的 JSON 正文。
其他注意事項...
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holderPwd = new ServletHolder("default", defaultServlet);
holderPwd.setInitParameter("resourceBase", "./src/main/resources/index.html");
不要在你的身上聲明你的,resourceBase在你的DefaultServlet身上聲明它ServletContextHandler。
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/rac");
context.setBaseResource(Resource.newResource("/path/to/my/base/directory"));
此外,aresourceBase是完全限定的目錄路徑(或 URI),絕不是文件或相對路徑。
如果setWelcomeFiles傳入的 GET 請求指向目錄資源,則使用文件名或路徑相對 URL 位置。
例子:
context.setWelcomeFiles(new String[] { "index.html", "welcome.html", "index.jsp" });
因此,對 say 的請求http://<machine>/wac/將導致實際服務http://<machine>/wac/index.html(如果存在)。
這也適用于深層目錄請求,例如http://<machine>/wac/app/deps/scripts/jquery/會導致提供內容http://<machine>/wac/app/deps/scripts/jquery/index.html
添加回答
舉報