springMVC3學習(八)--全域性的異常處理
阿新 • • 發佈:2018-11-09
在springMVC的配置檔案中:
[html] view plain copy
- <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
- <
- <value>/error</value><!-- 表示當丟擲異常但沒有在exceptionMappings裡面找到對應的異常時 返回名叫error的檢視-->
- </property>
- <
- <property name="statusCodes"><!-- 定義在發生異常時檢視跟返回碼的對應關係 -->
- <
- <!-- 表示在發生NumberFormatException時返回檢視number,然後這裡定義發生異常時檢視number對應的HttpServletResponse的返回碼是500 -->
- <prop key="number">500</prop>
- <prop key="null">503</prop>
- </props>
- </property>
- <property name="exceptionMappings">
- <props>
- <prop key="NumberFormatException">number</prop><!-- 表示當丟擲NumberFormatException的時候就返回名叫number的檢視-->
- <prop key="NullPointerException">null</prop>
- </props>
- </property>
- </bean>
這裡主要的類是SimpleMappingExceptionResolver類,和他的父類AbstractHandlerExceptionResolver類。
你也可以實現HandlerExceptionResolver介面,寫一個自己的異常處理程式.
通過SimpleMappingExceptionResolver我們可以將不同的異常對映到不同的jsp頁面(通過exceptionMappings屬性的配置)。
同時我們也可以為所有的異常指定一個預設的異常提示頁面(通過defaultErrorView屬性的配置),
如果所丟擲的異常在exceptionMappings中沒有對應的對映,則spring將用此預設配置顯示異常資訊。
Login.Java測試類
[java] view plain copy
- import java.io.File;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- @Controller
- public class Login {
- @RequestMapping("/null")
- public void testNullPointerException() {
- File file = null;
- // 空指標異常,返回定義在SpringMVC配置檔案中的null檢視
- System.out.println(file.getName());
- }
- @RequestMapping("/number")
- public void testNumberFormatException() {
- // NumberFormatException,返回定義在SpringMVC配置檔案中的number檢視
- Integer.parseInt("abc");
- }
- @RequestMapping("/default")
- public void testDefaultException() {
- if (1 == 1)
- // 由於該異常型別在SpringMVC的配置檔案中沒有指定,所以就會返回預設的exception檢視
- throw new RuntimeException("Error!");
- }
- }
顯示錯誤的jsp頁面(已error.jsp為例)
[html] view plain copy
- <body>
- <%
- Exception e = (Exception)request.getAttribute("exception");
- out.print(e.getMessage());
- %>
- </body>
測試URL: http://localhost:8080/spring_exception/null
http://localhost:8080/spring_exception/number
http://localhost:8080/spring_exception/default