最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot多種自定義錯誤頁面方式小結

 更新時間:2021年11月29日 10:53:40   作者:IT_faquir  
這篇文章主要介紹了SpringBoot多種自定義錯誤頁面方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在項目中為了友好化,對于錯誤頁面,我們常常會使用自定義的頁面。SSM框架組合時代,我們通常通過攔截或者在web.xml中設置對于錯誤碼的錯誤頁面,然而到了SpringBoot,web.xml消失了,SpringBootServletInitializer初始化servlet代替了web.xml。難道要再把web.xml加回去?這樣雖然可以做到,但并不合理。

下面提供了多種在SpringBoot中實現(xiàn)自定義錯誤頁面的方法。

以前web.xml方式

先來看下在web.xml中配置錯誤頁面的方式:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
</error-page>

SpringBoot中實現(xiàn)方式

在SpringBoot后,可以通過如下幾種方式實現(xiàn)自定義錯誤頁面。

1.實現(xiàn)EmbeddedServletContainerCustomizer的bean

適合內嵌服務器,先在controller中定義我們的錯誤頁面Mapping,通過在配置類中實現(xiàn)EmbeddedServletContainerCustomizer的bean,加入對應狀態(tài)碼的錯誤頁面。注意這種方式在打成war后,供外部tomcat使用時,將會失效。

定義錯誤頁面:

   @RequestMapping(value = "/error/[code]")
    public String error(@PathVariable int code, Model model) {
        String pager = "/content/error-pager";
        switch (code) {
            case 404:
                model.addAttribute("code", 404);
                pager = "/content/error-pager";
                break;
            case 500:
                model.addAttribute("code", 500);
                pager = "/content/error-pager";
                break;
        }
        return pager;
    }

在配置類中加入EmbeddedServletContainerCustomizer:

  /**
     * 配置默認錯誤頁面(僅用于內嵌tomcat啟動時)
     * 使用這種方式,在打包為war后不起作用
     *
     * @return
     */  
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
        return container -> {
            ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
            ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
            container.addErrorPages(error404Page, error500Page);
        };

2.通過攔截器方式

適合內嵌Tomcat或者war方式。

/**
 * @author hgs
 * @version ErrorPageInterceptor.java, v 0.1 2018/03/04 20:52 hgs Exp $
 * <p>
 * 錯誤頁面攔截器
 * 替代EmbeddedServletContainerCustomizer在war中不起作用的方法
 */
@Component
public class ErrorPageInterceptor extends HandlerInterceptorAdapter {
    private List<Integer> errorCodeList = Arrays.asList(404, 403, 500, 501);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
        Exception {
       if (errorCodeList.contains(response.getStatus())) {
            response.sendRedirect("/error/" + response.getStatus());
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}

在配置類中添加攔截

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(errorPageInterceptor);//.addPathPatterns("/action/**", "/mine/**");默認所有
        super.addInterceptors(registry);
    }
}

3.自定義靜態(tài)error頁面方法

在resource/templates下添加error.html頁面,springBoot會自動找到該頁面作為錯誤頁面,適合內嵌Tomcat或者war方式。

SpringBoot錯誤視圖提供了以下錯誤屬性:

  • timestamp:錯誤發(fā)生時間;
  • status:HTTP狀態(tài)嗎;
  • error:錯誤原因;
  • exception:異常的類名;
  • message:異常消息(如果這個錯誤是由異常引起的);
  • errors:BindingResult異常里的各種錯誤(如果這個錯誤是由異常引起的);
  • trace:異常跟蹤信息(如果這個錯誤是由異常引起的);
  • path:錯誤發(fā)生時請求的URL路徑。

SpringBoot使用的前端框架模板不同,頁面的名稱也有所不同:

  • 實現(xiàn)Spring的View接口的Bean,其ID需要設置為error(由Spring的BeanNameViewResolver所解析);
  • 如果配置了Thymeleaf,則需命名為error.html的Thymeleaf模板;
  • 如果配置了FreeMarker,則需命名為error.ftl的FreeMarker模板;
  • 如果配置了Velocity,則需命名為error.vm的Velocity模板;
  • 如果是用JSP視圖,則需命名為error.jsp的JSP模板。

Thymeleaf實例:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${title}"></title>
</head>
<body class="layout">
<div class="wrap">
    <!-- S top -->
    <div th:include="/header/module-header::module-header"></div>
    <!-- S 內容 -->
    <div class="panel-l container clearfix">
        <div class="error">
            <p class="title"><span class="code" th:text="${status}"></span>非常抱歉,沒有找到您要查看的頁面</p>
            <a href="/" rel="external nofollow"  class="btn-back common-button">返回首頁
                <img class="logo-back" src="/img/back.png">
            </a>
            <div class="common-hint-word">
                <div th:text="${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}"></div>
                <div th:text="${messages}"></div>
                <div th:text="${error}"></div>
            </div>
        </div>
    </div>
</div>
</div>
</body>
</html>

對于外部Tomcat第三中方案是比較推薦的一種實現(xiàn)方式,但不夠靈活,我們不好定義自己的屬性,如果想對其做相應修改,可以參見源碼BasicErrorController,通過繼承AbstractErrorController,并重寫errorHtml方法,達到自己想要的效果。在內嵌Tomcat時,第一種推薦使用,更具靈活性。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java創(chuàng)建線程的五種寫法總結

    Java創(chuàng)建線程的五種寫法總結

    本文主要為大家詳細介紹一下Java實現(xiàn)線程創(chuàng)建的五種寫法,文中的示例代碼講解詳細,對我們學習有一定的幫助,感興趣的可以跟隨小編學習一下
    2022-08-08
  • Java?SWT中常見彈出框實例總結

    Java?SWT中常見彈出框實例總結

    剛開始寫Java工具的小伙伴可能不知道怎么寫消息對話框,在這里總結一些常用的幾種消息彈出框,下面這篇文章主要給大家介紹了關于Java?SWT中常見彈出框的相關資料,需要的朋友可以參考下
    2023-01-01
  • springMVC使用ajaxFailUpload上傳圖片的方法

    springMVC使用ajaxFailUpload上傳圖片的方法

    這篇文章主要介紹了springMVC使用ajaxFailUpload上傳圖片的相關知識,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Java8中CompletableFuture使用場景與實現(xiàn)原理

    Java8中CompletableFuture使用場景與實現(xiàn)原理

    CompletableFuture是java8引入的新類,該類實現(xiàn)了Future接口和 CompletionStage接口,封裝了future、forkjoin相關類來執(zhí)行異步,這篇文章主要給大家介紹了關于Java8中CompletableFuture使用場景與實現(xiàn)原理的相關資料,需要的朋友可以參考下
    2022-02-02
  • JVM系列之:JIT中的Virtual Call接口操作

    JVM系列之:JIT中的Virtual Call接口操作

    這篇文章主要介紹了JVM系列之:JIT中的Virtual Call接口操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java使用easyExcel實現(xiàn)導入功能

    Java使用easyExcel實現(xiàn)導入功能

    這篇文章介紹了Java使用easyExcel實現(xiàn)導入功能的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Java判斷中英文符號、標點的實現(xiàn)

    Java判斷中英文符號、標點的實現(xiàn)

    本篇文章主要介紹了Java判斷中英文符號、標點的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • mybatis通過XML的方式拼接動態(tài)sql

    mybatis通過XML的方式拼接動態(tài)sql

    動態(tài)SQL是一種在運行時構造和執(zhí)行SQL語句的技術,這篇文章主要為大家介紹了mybatis如何通過XML的方式拼接動態(tài)sql,有需要的小伙伴可以參考一下
    2024-12-12
  • SpringBoot實現(xiàn)redis緩存菜單列表

    SpringBoot實現(xiàn)redis緩存菜單列表

    本文主要介紹了SpringBoot實現(xiàn)redis緩存菜單列表,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • java文件上傳(單文件 多文件)與刪除

    java文件上傳(單文件 多文件)與刪除

    本文主要分享了java文件上傳(單文件 多文件)與刪除的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論

达拉特旗| 印江| 绵竹市| 红桥区| 和顺县| 隆德县| 奉新县| 石渠县| 常山县| 永宁县| 咸阳市| 文成县| 桐柏县| 大新县| 泰安市| 武乡县| 英山县| 吴桥县| 那坡县| 丹东市| 石林| 黄冈市| 饶河县| 申扎县| 锦州市| 临高县| 德令哈市| 博野县| 吴堡县| 花莲市| 嘉黎县| 南开区| 无锡市| 新巴尔虎左旗| 金华市| 湖南省| 巴中市| 玉龙| 天镇县| 兖州市| 新丰县|