亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何更改它以用 html 頁面替換 404 頁面錯誤?

我如何更改它以用 html 頁面替換 404 頁面錯誤?

慕無忌1623718 2022-12-21 16:43:02
我必須使用我的 html 文件中的自定義頁面更改 404 錯誤頁面。我寫了這段代碼,但它不起作用,和/或我不知道如何使用它。public static void main(String[] args) throws Exception {        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);        context.setContextPath("/rac");        Server jettyServer = new Server(8080);        context.setWelcomeFiles(new String[] { "./src/main/resources/index.html" });        ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();        errorHandler.addErrorPage(HttpStatus.NOT_FOUND_404, "./src/main/resources/error.html");        context.setErrorHandler(errorHandler);        // HTML        DefaultServlet defaultServlet = new DefaultServlet();        ServletHolder holderPwd = new ServletHolder("default", defaultServlet);        holderPwd.setInitParameter("resourceBase", "./src/main/resources/index.html");        context.addServlet(holderPwd, "/*");        // SERVICES        ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class,                "/ajax/*");        jerseyServlet.setInitOrder(0);        jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",                DiskServiceWS.class.getCanonicalName() + "," + RamServiceWS.class.getCanonicalName() + ","                        + CpuServiceWS.class.getCanonicalName());        jettyServer.setHandler(context);        try {            jettyServer.start();            jettyServer.join();        } finally {            jettyServer.destroy();        }    }
查看完整描述

1 回答

?
largeQ

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


查看完整回答
反對 回復 2022-12-21
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號