springmvc-異常處理

1.異常處理的思路html

系統中異常包括兩類:預期異常和運行時異常 RuntimeException,前者經過捕獲異常從而獲取異常信息,
後者主要經過規範代碼開發、測試經過手段減小運行時異常的發生。
系統的 dao、 service、 controller 出現都經過 throws Exception 向上拋出,最後由 springmvc 前端
控制器交由異常處理器進行異常處理,最終返回一個比較友好的錯誤提示頁面

 

 2.示例

頁面前端

index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h2>異常處理</h2>
    <a href="user/testException">測試異常處理</a>
</body>
</html>

success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>跳轉成功</h3>
</body>
</html>

控制器
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("testException")
    public String testException() throws Exception{
        System.out.println("run testException()...");
        //模擬異常
        int a = 10/0;
        return "success";
    }
}

沒有作異常處理,異常會一步一步往上拋,到了瀏覽器就會出現不友好的頁面,頁面直接顯示錯誤java

 

想要解決,上面說到,controller向上拋異常給前端控制器沒有問題,這裏就須要寫一個異常處理器組件,而且配置好spring

三個步驟瀏覽器

1.編寫異常類(作提示信息)mvc

public class MyException extends Exception{
    private String message;

    public MyException(String message) {
        this.message = message;
    }

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

    @Override
    public String getMessage() {
        return message;
    }
}

2.編寫異常處理類app

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        e.printStackTrace();
        MyException myException = null;
        //若是拋出的是自定義異常,則直接轉換
        if(e instanceof MyException){
            myException = (MyException) e;
        }else{
            //若是不是,則從新構造一個自定義異常
            myException = new MyException("系統正在維護...");
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg", myException.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

3.配置異常處理器,在springmvc.xml中配置jsp

    <!--配置自定義異常處理器-->
    <bean class="com.cong.exception.MyExceptionResolver" id="myExceptionResolver"></bean>

修改一下控制器ide

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("testException")
    public String testException() throws MyException{
        System.out.println("run testException()...");
        //模擬異常
        try {
            int a = 10/0;
        }catch (Exception e){
            //sprint exception message
            e.printStackTrace();
            //拋出異常
            throw new MyException("出現自定義異常...");
        }
        return "success";
    }
}

錯誤提示頁面測試

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>錯誤頁面</title>
</head>
<body>
    <h3>執行出錯</h3>
    ${errorMsg}
</body>
</html>

結果

相關文章
相關標籤/搜索