Spring MVC 對Servlet默認容器錯誤頁面的定制化

2018-07-26 14:36 更新

當響應(yīng)的狀態(tài)碼被設(shè)置為錯誤狀態(tài)碼,并且響應(yīng)體中沒有內(nèi)容時,Servlet容器通常會渲染一個HTML錯誤頁。若需要定制容器默認提供的錯誤頁,你可以在web.xml中定義一個錯誤頁面<error-page>元素。在Servlet 3規(guī)范出來之前,該錯誤頁元素必須被顯式指定映射到一個具體的錯誤碼或一個異常類型。從Servlet 3開始,錯誤頁不再需要映射到其他信息了,這意味著,你指定的位置就是對Servlet容器默認錯誤頁的自定制了。

<error-page>
    <location>/error</location>
</error-page>

這里錯誤頁的位置所在可以是一個JSP頁面,或者其他的一些URL,只要它指定容器里任意一個@Controller控制器下的處理器方法:

寫回HttpServletResponse的錯誤信息和錯誤狀態(tài)碼可以在控制器中通過請求屬性來獲?。?/p>

@Controller
public class ErrorController {

    @RequestMapping(path = "/error", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ResponseBody
    public Map<String, Object> handle(HttpServletRequest request) {

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("status", request.getAttribute("javax.servlet.error.status_code"));
        map.put("reason", request.getAttribute("javax.servlet.error.message"));

        return map;
    }

}

或者在JSP中這么使用:

<%@ page contentType="application/json" pageEncoding="UTF-8"%>
{
    status:<%=request.getAttribute("javax.servlet.error.status_code") %>,
    reason:<%=request.getAttribute("javax.servlet.error.message") %>
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號