Spring Boot自定義錯誤轉(zhuǎn)發(fā)頁面

引言

????????沒有完美的程序啤覆,只有不斷的追求完美,我們才能進步和成長宅楞,程序的運行不可能是一帆風順的针姿,當出現(xiàn)一些錯誤時,比如500服務(wù)器內(nèi)部錯誤厌衙,404用戶訪問錯誤的URL距淫,405用戶無此權(quán)限........針對這些問題Spring Boot給我們提供了一些錯誤的信息頁面提示。

Spring Boot提供的404錯誤頁面

????????作為開發(fā)人員我們一眼就能看懂婶希,但是如果給用戶看這種頁面榕暇,不知情的用戶還以為我們的系統(tǒng)怎么了,造成用戶體驗度非常不好喻杈,針對這些問題我們應(yīng)該給用戶友好的提示拐揭,一般我們都需要定制一些錯誤的頁面。

自定義錯誤頁面:

1.靜態(tài)資源的方式:

????????1.在resources目錄下創(chuàng)建public/error目錄奕塑,編寫錯誤頁面堂污。

創(chuàng)建public/error目錄,編寫錯誤頁面

2.訪問測試:

2.動態(tài)方式:

1.使用IDEA建立一個Spring Boot項目龄砰,在pom.xml文件中添加和配置如下內(nèi)容:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

2.在src/main/下創(chuàng)建webapp/view/error/目錄盟猖,并在下面定義錯誤頁面:

創(chuàng)建目錄并定義錯誤頁面

3.在application.yml文件中配置Spring MVC視圖解析器:

配置Spring MVC視圖解析器

4.編寫ErrorConfiguration配置類:

(1)編寫代碼之間我們先普及一下小知識:
????????我們使用基于java容器配置的方式,在Spring 3.0中引入了基于java容器的配置换棚,SpringJava容器配置支持中的中心工件是 @Configuration注解用于注釋類和@Bean 用于注釋方法式镐,對于熟悉SpringXML配置中<beans/>配置的開發(fā)人員,@Bean注釋與<bean/>元素的作用相同固蚤。
????????EmbeddedServletContainerCustomizer接口可以自定義嵌入式servlet容器的策略界面娘汞。這種類型的bean將在容器本身啟動之前與容器工廠進行回調(diào),因此我們可以設(shè)置端口夕玩,地址你弦,錯誤頁面等惊豺。
????????通過查看API發(fā)現(xiàn)此接口只有一個方法customize,此方法需要傳遞ConfigurableEmeddedServletContainer的實現(xiàn)類對象禽作。

????????ConfigurableEmeddedServletContainer是一個接口尸昧,閱讀API文檔得知此接口繼承了ErrorPageRegistry接口。

????????閱讀API文檔得知ErrorPageRegistry接口中只有一個addErrorPage方法旷偿,此方法需要傳遞ErrorPage對象烹俗。

????????閱讀API文檔得知ErrorPage類表示簡單和容器無關(guān)的servlet錯誤頁面抽象,此類相當于web.xml中的<error-page>萍程,ErrorPage提供了三種構(gòu)造方法幢妄,我們只使用public ErrorPage(org.springframework.http.HttpStatus status,String path)構(gòu)造茫负,指出一個錯誤類型(org.springframework.http.HttpStatus是一個枚舉類型磁浇,里面提供了http狀態(tài)碼
),并傳遞一個錯誤呈現(xiàn)的路徑即可朽褪。

ErrorPage類中三個構(gòu)造中其中一個也就是我們要使用的那個

(2)知識普及完了開始編寫編寫ErrorConfiguration配置類:

@Configuration
public class ErrorConfiguration {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer(){
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/error/400.html"));
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404.html"));      
                container.addErrorPages(newErrorPage(HttpStatus.METHOD_NOT_ALLOWED,"/error/405.html"));
                container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500.html"));  
            }
        };
    }

5.編寫ErrorController前端控制器:

(1)腦補一下:
????????Spring4.3中引進了@GetMapping置吓、@PostMapping@PutMapping缔赠、@DeleteMapping衍锚、@PatchMapping,來幫助簡化常用的HTTP方法的映射嗤堰,并更好地表達被注解方法的語義戴质。
????????@GetMapping是一個組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫踢匣,該注解將http get請求映射到特定的處理方法上告匠,其余的那幾個大家舉一反三也就明白了吧。

(2)編寫代碼:

@Controller
@RequestMapping(value = "error")
public class ErrorController {
/**
 * 配置400錯誤轉(zhuǎn)發(fā)
 * @return
 */
@GetMapping(value = "400.html")
public String badequest() {
    return "error/400";
}
/**
 * 配置404錯誤轉(zhuǎn)發(fā)
 * @return
 */
@GetMapping(value = "404.html")
public String notFound() {
    return "error/404";
}
/**
 * 配置405錯誤轉(zhuǎn)發(fā)
 * @return
 */
@GetMapping(value = "405.html")
public String merthodNotAllowed() {
    return "error/405";
}
/**
 * 配置500錯誤轉(zhuǎn)發(fā)
 * @return
 */
@GetMapping(value = "500.html")
public String serverError() {
    return "error/500";
 }
}

6.訪問測試:

總結(jié)

????????這兩種方式我這里都進行了配置离唬,我想證明一下兩種方式如果同時存將會使用哪種方式呢后专,通過實踐證明,當靜態(tài)資源配置和動態(tài)配置同時存在時動態(tài)資源配置生效输莺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戚哎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嫂用,更是在濱河造成了極大的恐慌型凳,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘱函,死亡現(xiàn)場離奇詭異甘畅,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門疏唾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓄氧,“玉大人,你說我怎么就攤上這事荸实。” “怎么了缴淋?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵准给,是天一觀的道長。 經(jīng)常有香客問我重抖,道長露氮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任钟沛,我火速辦了婚禮畔规,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恨统。我一直安慰自己叁扫,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布畜埋。 她就那樣靜靜地躺著莫绣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悠鞍。 梳的紋絲不亂的頭發(fā)上对室,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音咖祭,去河邊找鬼掩宜。 笑死,一個胖子當著我的面吹牛么翰,可吹牛的內(nèi)容都是我干的牺汤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼浩嫌,長吁一口氣:“原來是場噩夢啊……” “哼慧瘤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起固该,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锅减,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后伐坏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怔匣,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了每瞒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片金闽。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剿骨,靈堂內(nèi)的尸體忽然破棺而出代芜,到底是詐尸還是另有隱情,我是刑警寧澤浓利,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布挤庇,位于F島的核電站,受9級特大地震影響贷掖,放射性物質(zhì)發(fā)生泄漏嫡秕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一苹威、第九天 我趴在偏房一處隱蔽的房頂上張望昆咽。 院中可真熱鬧,春花似錦牙甫、人聲如沸掷酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汇在。三九已至,卻和暖如春脏答,著一層夾襖步出監(jiān)牢的瞬間糕殉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工殖告, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阿蝶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓黄绩,卻偏偏與公主長得像羡洁,于是被迫代替她去往敵國和親袜炕。 傳聞我的和親對象是個殘疾皇子召耘,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理奴潘,服務(wù)發(fā)現(xiàn)呻粹,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,857評論 6 342
  • 什么是Spring Spring是一個開源的Java EE開發(fā)框架蟀苛。Spring框架的核心功能可以應(yīng)用在任何Jav...
    jemmm閱讀 16,475評論 1 133
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,172評論 2 7
  • 記憶中小時候的夏天并不像現(xiàn)在一樣账劲,動輒“高溫預警”“防汛預警”“干旱預警”漏健,小時候的夏天是最快樂的初澎。 那時我們家還...
    哈哈哈哈哈嘍啊閱讀 190評論 2 0