どのようなプロジェクトを行っているかに関係なく、例外処理は非常に必要であり、プログラマのみが理解できる一部のエラーコードをユーザーにスローすることはできません。そのため、現時点では、統一された例外処理を実行して、よりわかりやすいエラーページを表示する必要があります。他の MVC フレームワークと同様に、springMVC にも独自の例外処理メカニズムがあります。 springMVC が提供する例外を処理するには、主に 2 つの方法があります。1 つは、独自の HandlerExceptionResolver を直接実装する方法で、もう 1 つは、Spring が提供する SimpleMappingExceptionResolver と DefaultHandlerExceptionResolver を使用する方法です。例外を処理する ExceptionHandler。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
public class ExceptionHandler implements HandlerExceptionResolver {
@Override public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) { // TODO Auto-generated method stub return new ModelAndView("exception");
}
}
public class ExceptionHandler implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // TODO Auto-generated method stub if (ex instanceof NumberFormatException) { //doSomething... return new ModelAndView("number"); } else if (ex instanceof NullPointerException) { //doSomething... return new ModelAndView("null"); } return new ModelAndView("exception"); } }このような例外ハンドラを定義した後、次のように applicationContext でそのような Bean オブジェクトを定義する必要があります:
以下は簡単な例です:
(1) SpringMVCのサーブレット設定ファイルでSimpleMappingExceptionResolver Beanを宣言し、プロパティExceptionMappingsとdefaultExceptionViewを設定して例外とビューの対応関係を指定します
Xml代码
<bean>
<property>
<props>
<prop>number</prop><!-- 表示当抛出NumberFormatException的时候就返回名叫number的视图 -->
<prop>null</prop>
</props>
</property>
<property></property><!-- 表示当抛出异常但没有在exceptionMappings里面找到对应的异常时 返回名叫exception的视图-->
<property><!-- 定义在发生异常时视图跟返回码的对应关系 -->
<props>
<prop>500</prop><!-- 表示在发生NumberFormatException时返回视图number,然后这里定义发生异常时视图number对应的HttpServletResponse的返回码是500 -->
<prop>503</prop>
</props>
</property>
<property></property><!-- 表示在发生异常时默认的HttpServletResponse的返回码是多少,默认是200 -->
</bean>
@Controller @RequestMapping("/test") public class TestController { @RequestMapping("/null") public void testNullPointerException() { Blog blog = null; //这里就会发生空指针异常,然后就会返回定义在SpringMVC配置文件中的null视图 System.out.println(blog.getId()); } @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!"); } }
nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <base>"> <title>My JSP 'number.jsp' starting page</title> <meta> <meta> <meta> <meta> <meta> <!-- <link rel="stylesheet" type="text/css" href="styles.css?1.1.11"> --> NumberFormatException. <br> <br> <br><span><!-- 这是JSP中的内置对象exception --></span> <br><span><!-- 这是SpringMVC放在返回的Model中的异常对象 --></span> <span><!-- HttpServletResponse返回的错误码信息,因为前面已经配置了NumberFormatException的错误码返回值为888,所以这里应该显示888 --></span>
以上がspringMVC による例外処理のサポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。