<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          springboot 自定義錯誤頁面

          共 6181字,需瀏覽 13分鐘

           ·

          2022-01-10 23:22

          Spring Boot 默認(rèn)使用嵌入式 Tomcat,默認(rèn)沒有頁面來處理404等常見錯誤。因此,為了給用戶最佳的使用體驗,404等常見錯誤需要我們自定義頁面來處理。

          在 springboot 2.0 之前用

          org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer

          類來實現(xiàn)該功能。

          使用 Java7 內(nèi)部類的實現(xiàn):

          @Bean
          public?EmbeddedServletContainerCustomizer?containerCustomizer()?{
          ????return?new?EmbeddedServletContainerCustomizer()?{
          ????????@Override
          ????????public?void?customize(ConfigurableEmbeddedServletContainer?container)?{
          ????????????ErrorPage?error401Page?=?new?ErrorPage(HttpStatus.UNAUTHORIZED,?"/401.html");
          ????????????ErrorPage?error404Page?=?new?ErrorPage(HttpStatus.NOT_FOUND,?"/404.html");
          ????????????ErrorPage?error500Page?=?new?ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,?"/500.html");
          ????????????container.addErrorPages(error401Page,?error404Page,?error500Page);
          ????????}
          ????};
          }

          Java8 的 lambda 表達(dá)式寫法:

          @Bean
          public?EmbeddedServletContainerCustomizer?containerCustomizer()?{
          ???return?(container?->?{
          ????????ErrorPage?error401Page?=?new?ErrorPage(HttpStatus.UNAUTHORIZED,?"/401.html");
          ????????ErrorPage?error404Page?=?new?ErrorPage(HttpStatus.NOT_FOUND,?"/404.html");
          ????????ErrorPage?error500Page?=?new?ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,?"/500.html");

          ????????container.addErrorPages(error401Page,?error404Page,?error500Page);
          ???});
          }

          在代碼中創(chuàng)建了三個 ErrorPage 實例來處理三個通用的 HTTP 錯誤狀態(tài)碼,并將他們添加到 container 當(dāng)中。ErrorPage 類是一個封裝了錯誤信息的類,它可以在 Jetty 和 Tomcat 環(huán)境下使用。

          錯誤頁面需要放在項目static內(nèi)容目錄下,它的默認(rèn)位置是:src/main/resources/static,如下圖所示:


          在Spring Boot2.0以上配置嵌入式Servlet容器時EmbeddedServletContainerCustomizer類不存在,被WebServerFactoryCustomizer替代

          使用WebServerFactoryCustomizer接口替換EmbeddedServletContainerCustomizer 組件完成對嵌入式Servlet容器的配置,示例代碼如下:

          @Bean
          public?WebServerFactoryCustomizer?webServerFactoryCustomizer(){ 
            return?(container?->?{
          ????  ErrorPage?error401Page?=?new?ErrorPage(HttpStatus.UNAUTHORIZED,?"/error/401.html");
          ????  ErrorPage?error404Page?=?new?ErrorPage(HttpStatus.NOT_FOUND,?"/error/404.html");
          ????  ErrorPage?error500Page?=?new?ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,?"/error/500.html");

          ????  container.addErrorPages(error401Page,?error404Page,?error500Page);
            });

          ?}

          在 WebServerFactoryCustomizer 接口中使用 ConfigurableWebServerFactory 對象實現(xiàn)對 customize() 方法的轉(zhuǎn)換,從而實現(xiàn)對嵌入式 servlet 容器的配置。

          附錄

          • springboot 1.x

          import?org.apache.catalina.connector.Connector;
          import?org.apache.coyote.ProtocolHandler;
          import?org.apache.coyote.http11.Http11NioProtocol;
          import?org.apache.tomcat.util.threads.ThreadPoolExecutor;
          import?org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
          import?org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
          import?org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
          import?org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
          import?org.springframework.boot.web.servlet.ErrorPage;
          import?org.springframework.context.annotation.Bean;
          import?org.springframework.context.annotation.Configuration;
          import?org.springframework.http.HttpStatus;
          import?org.springframework.stereotype.Component;

          @Component
          public?class?EmbeddedTomcatConfig?implements?EmbeddedServletContainerCustomizer{

          ????@Override
          ????public?void?customize(ConfigurableEmbeddedServletContainer?container)?{
          ????????TomcatEmbeddedServletContainerFactory?factory?=?(TomcatEmbeddedServletContainerFactory)container;
          ????????factory.addConnectorCustomizers(new?TomcatConnectorCustomizer()?{
          ????????????@Override
          ????????????public?void?customize(Connector?connector)?{
          ????????????????Http11NioProtocol?protocol?=?(Http11NioProtocol)?connector.getProtocolHandler();
          ????????????????protocol.setMaxConnections(200);
          ????????????????protocol.setMaxThreads(200);
          ????????????????protocol.setSelectorTimeout(3000);
          ????????????????protocol.setSessionTimeout(3000);
          ????????????????protocol.setConnectionTimeout(3000);
          ????????????}
          ????????});
          ????}
          }

          通過實現(xiàn)org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer的customize方法來實現(xiàn)自定義

          • springboot 2.x

          import?org.apache.catalina.connector.Connector;
          import?org.apache.coyote.ProtocolHandler;
          import?org.apache.coyote.http11.Http11NioProtocol;
          import?org.apache.tomcat.util.threads.ThreadPoolExecutor;
          import?org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
          import?org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
          import?org.springframework.boot.web.server.WebServerFactoryCustomizer;
          import?org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
          import?org.springframework.context.annotation.Bean;
          import?org.springframework.context.annotation.Configuration;
          import?org.springframework.core.Ordered;
          import?org.springframework.stereotype.Component;

          @Component
          public?class?EmbeddedTomcatConfig?implements?WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>?{
          ????@Override
          ????public?void?customize(ConfigurableServletWebServerFactory?factory)?{
          ??????((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new?TomcatConnectorCustomizer()?{
          ????????????@Override
          ????????????public?void?customize(Connector?connector)?{
          ????????????????Http11NioProtocol?protocol?=?(Http11NioProtocol)?connector.getProtocolHandler();
          ????????????????protocol.setMaxConnections(200);
          ????????????????protocol.setMaxThreads(200);
          ????????????????protocol.setSelectorTimeout(3000);
          ????????????????protocol.setSessionTimeout(3000);
          ????????????????protocol.setConnectionTimeout(3000);
          ????????????}
          ????????});
          ????}
          }


          在2.x版本改為實現(xiàn)org.springframework.boot.web.server.WebServerFactoryCustomizer接口的customize方法

          springboot1.x 相關(guān)類如下:

          org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer
          org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer
          org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer
          org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory

          springboot2.x 相關(guān)類如下:

          org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory
          org.springframework.boot.web.server.WebServerFactoryCustomizer
          org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer
          org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory

          喜歡,在看



          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产jk在线 | 午夜福利精品 | 俺去俺来也在线www色情网 | 国产免费观看高清完整版亚洲日本 | 亚洲九九九九九九 |