1. 程式人生 > >可單例開發、典型的教科書式的mvc構架----springmvc----day02(二)

可單例開發、典型的教科書式的mvc構架----springmvc----day02(二)

    6.異常處理
            6.1異常處理思路
                系統中異常包括兩類:預期異常和執行時異常RuntimeException,前者通過捕獲異常從而獲取異常資訊,後者主要通過規範程式碼開發、測試通過手段減少執行時異常的傳送。
                    系統的dao、service、controller出現都通過throws Exception向上丟擲,最後由springmvc前端控制器交由異常處理器進行異常處理。

                    springmvc提供全域性異常處理器(一個系統只有一個異常處理器)進行統一異常處理。

            6.2自定義異常類
                對不同的異常型別定義異常類,繼承Exception。
                public class CustomException extends Exception {
                    // 異常資訊
                    private String message;

                    public CustomException(String message) {
                        super();
                        this.message = message;
                    }

                    public String getMessage() {
                        return message;
                    }

                    public void setMessage(String message) {
                        this.message = message;
                    }

                }

            6.3全域性異常處理器
                思路:
                    系統遇到異常,在程式中手動丟擲,dao丟擲service、service給controller、controller拋給前端控制器,前端控制器呼叫全域性異常處理器。
                    全域性異常處理器處理思路:
                        解析出異常型別
                        如果該異常是系統自定義的異常,直接取出異常資訊,在錯誤頁面展示
                        如果該異常型別不是系統自定義的異常,構造一個自定義的異常型別(資訊為“未知錯誤”)

                springmvc提供一個HandlerExceptionResolver介面
                    @Override
                    public ModelAndView resolveException(HttpServletRequest request,
                            HttpServletResponse response, Object handler, Exception ex) {
                        //handler就是處理器介面卡要執行Handler物件(只有method)
                        
                //        解析出異常型別
                //        如果該 異常型別是系統 自定義的異常,直接取出異常資訊,在錯誤頁面展示
                //        String message = null;
                //        if(ex instanceof CustomException){
                //            message = ((CustomException)ex).getMessage();
                //        }else{
                ////            如果該 異常型別不是系統 自定義的異常,構造一個自定義的異常型別(資訊為“未知錯誤”)
                //            message="未知錯誤";
                //        }
                        
                        //上邊程式碼變為
                        CustomException customException = null;
                        if(ex instanceof CustomException){
                            customException = (CustomException)ex;
                        }else{
                            customException = new CustomException("未知錯誤");
                        }
                        
                        //錯誤資訊
                        String message = customException.getMessage();
                        
                        
                        ModelAndView modelAndView = new ModelAndView();
                        
                        //將錯誤資訊傳到頁面
                        modelAndView.addObject("message", message);
                        
                        //指向錯誤頁面
                        modelAndView.setViewName("error");

                        
                        return modelAndView;
                    }


            6.4錯誤頁面
                <%@ page language="java" contentType="text/html; charset=UTF-8"
                    pageEncoding="UTF-8"%>
                <!DOCTYPE html>
                <html>
                <head>
                <meta charset="UTF-8">
                <title>錯誤提示</title>
                </head>
                <body>
                    <h1>${message }</h1>
                </body>
                </html>