Spring 3 MVC異常処理
2853 ワード
Spring 3 MVC異常処理
Spring 3.0における異常な処理方法は全部で2つ提供されています.一つはHandlerException Resoliverインターフェースを使用しています.一つは、Controller類の内部で@Exception Handlerを使用します.最初の方法を使用してグローバル異常制御を実現し、Springはデフォルトの実装クラスSimpleMappingException Resoloverを提供しました.第二の方式を使うと、Controller内部でよりパーソナライズされた点異常処理方式が実現でき、柔軟性がより高い.一般的に、プロジェクトの中では最初の方式を採用すればいいです.一人一人が異常な表現方式を定義しています.個性的すぎて、統一されていません.
現在の調査結果から見ると、この2つの方法は共存できないので、未来のバージョンが彼らを一つにすることができるかどうかは分かりません.HandlerException Resoloverインターフェースに基づく異常処理:
このような方法を使うには、resoloveException方法だけが必要であり、この方法はModelAndViewオブジェクトに戻り、方法の内部で異常なタイプを判断し、よくある適切なModelAndViewオブジェクトが必要であり、この方法がnullに戻ったら、Springは他のHandlerException Resoliverインターフェースを実現したBeanを探し続けます.言い換えれば、Springは、その環境に登録されたすべてのデバイスを検索して、HandlerException ResolaverインターフェースのBeanを実現し、ModelAndViewオブジェクトに戻るまで一つ一つ実行します.ノードだけを使って声明すればいいです.例は以下の通りです.
サンプルコード:
Spring 3.0における異常な処理方法は全部で2つ提供されています.一つはHandlerException Resoliverインターフェースを使用しています.一つは、Controller類の内部で@Exception Handlerを使用します.最初の方法を使用してグローバル異常制御を実現し、Springはデフォルトの実装クラスSimpleMappingException Resoloverを提供しました.第二の方式を使うと、Controller内部でよりパーソナライズされた点異常処理方式が実現でき、柔軟性がより高い.一般的に、プロジェクトの中では最初の方式を採用すればいいです.一人一人が異常な表現方式を定義しています.個性的すぎて、統一されていません.
現在の調査結果から見ると、この2つの方法は共存できないので、未来のバージョンが彼らを一つにすることができるかどうかは分かりません.HandlerException Resoloverインターフェースに基づく異常処理:
このような方法を使うには、resoloveException方法だけが必要であり、この方法はModelAndViewオブジェクトに戻り、方法の内部で異常なタイプを判断し、よくある適切なModelAndViewオブジェクトが必要であり、この方法がnullに戻ったら、Springは他のHandlerException Resoliverインターフェースを実現したBeanを探し続けます.言い換えれば、Springは、その環境に登録されたすべてのデバイスを検索して、HandlerException ResolaverインターフェースのBeanを実現し、ModelAndViewオブジェクトに戻るまで一つ一つ実行します.
**
* HandlerExceptionResolver
*/
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if(exception instanceof IOException){
return new ModelAndView("ioexp");
}else if(exception instanceof SQLException){
return new ModelAndView("sqlexp");
}
return null;
}
}
このクラスはSpringに宣言して、Springに管理させて、@Componentタグを使ってもいいです.簡単な異常処理のために、SpringはSimpleMappingException Resolover類を提供しています.このクラスはHandlerException Resoliverインターフェースを実現しています.必要な時は<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- , -->
<property name="defaultErrorView" value="error"></property>
<!-- , exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- , key, -->
<property name="exceptionMappings">
<props>
<prop key="IOException">error/ioexp</prop>
<prop key="java.sql.SQLException">error/sqlexp</prop>
</props>
</property>
</bean>
@Exception Handlerの異常処理に基づいて、この方法はController内部で定義され、そして一つの方法を作成し、@Exception Handlerで注釈を修飾して異常を処理する必要があります.この方法は基本的に@Request Mapping修飾の方法と似ています.ただし、一つのタイプはExceptionのパラメータです.空であれば、すべての異常タイプのエラーがトリガされると思います.サンプルコード:
/**
* @ExceptionHandler
*/
@Controller
public class ExceptionHandlerController {
@ExceptionHandler(value={IOException.class,SQLException.class})
public String exp(Exception ex,HttpServletRequest request) {
request.setAttribute("ex", ex);
return "/error.jsp";
}
}