1。異常分類
Javaの例外は、「チェック」と「非チェック」の2つのカテゴリに分かれています。 「チェック」という言葉は、コードがコンパイルされたときに、コンパイラが例外処理(キャッチまたはスローアップ)があるかどうかを確認することを意味します。チェックする必要があると分類された例外のために、それらが処理されていない場合、コンパイルを渡すことはできません。
私が初心者だったとき、なぜこのように例外を処理する必要があるのか疑問に思うことがよくありますか?後で少し理解しましたが、異常には2種類しかありません。主観的で客観的です。 1つはほとんどの場合避けることができ、もう1つはほとんどの場合に避けることができません。
nullpointerexceptionのような例外は、ほとんどがプログラマーの品質にリンクされています(よく開発およびテストされているため、基本的にシステムが実行された後にポップアップしません)。彼らは基本的に避けることができます。 Java構文は、それらを「非チェックの例外」として分類するために使用しました。これにより、プログラマーやコンパイラが多くのトラブルを節約しました。
IOExceptionなどの外部環境に関連する例外はほとんど避けられません(ネットワークはいつか、もう1つは切れます)。ただし、予期せずに遭遇した場合、プログラムは依然として違いを生む必要があるため、コンパイラはプログラマーに、これらの予期しない例外が処理されているかどうかを確認して確認する必要があります。例外オブジェクトがノードに渡されると、プログラムは次のようないくつかのメジャーを実行できます。ユーザーにプロンプトを返す(「システムはビジーです、もう一度やり直してください」)、監視プラットフォームに例外メッセージをプッシュするなど。
2。例外の統一された返品処理
1。コンテナ処理
以下には、Tomcatの処理方法をリストし、Web.xmlでそれらを構成し、HTTP戻りコードまたは例外タイプに従ってそれらを処理します。
<エラーページ> <エラーコード> 404 </error-code> <location> /web-inf/views/error/404.jsp </location-page> <error-page> <error-page> <error-code> 500 </error-code> <location> /web-inf/views/error/500.jsp </location </location> <erirpage> <エラーページ> <エラーページ> <例外タイプ> java.lang.throwable </excepurt-type> <location> /web-inf/views/error/throwable.jsp </location> </error-page>
短所: ajaxなどのHTMLを返す必要のないリクエストを処理できません。
2。フレームワーク処理
以下には、スプリングMVCの処理方法をリストします
(1)Spring MVCに含まれる単純な例外ハンドラーであるSimpleMappingExceptionResolverを使用します。
(2)インターフェイスHandLerexceptionResolverカスタム例外ハンドラーを実装する。 (それを使用することをお勧めし、Ajaxやその他の拡張機能をサポートできます)
(3)@exceptionhandlerアノテーションを使用して、例外処理を実装します。
タイプ(1)、Spring-MVC.xmlで構成します
<! - コントローラーによって特定のビューにスローされた例外に移動します - > <bean> <プロパティ名= "excepsualmappings"> <props> <! - 別の例外がジャンプします - > <! - あなたは異なる例外をカスタマイズできます - > <prop key = "com.test.myexception1">/error/e1 </prop = "com.test.myexception2"例外をカスタマイズするには、次のものを構成するだけです - > <prop key = "java.lang.throwable">/error/500 </prop> </props> </property> </bean>
短所: HTMLを返す必要のないリクエストを処理できません。
タイプ(2)、カスタムHandLerexceptionResolverインターフェイスの実装クラス
/** *カスタム例外ハンドラー:ajax * @author wangxu * * */public class myexceptionhandlerは、handlerexceptionResolver {publicandview resolveexception(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドラー、例外ex){/ */ * ajax */boolean isax = hisax = httpsertresponse response request) request.getheader( "x-requested with") if(!isajax){if(ex instanceof com.test.myexception1){return new ModelandView( "/error/e1"); } else if(ex instanceof com.test.myexception1){return new ModelandView( "/error/e2"); } else {return new ModelandView( "/error/500"); }} string jsonres = "{/" message/":/" " +"システム例外 " +"/"}"; //カスタム構造と前景ドッキングprintwriter out = null; try {out = response.getWriter(); request.setcharacterencoding( "utf-8"); Response.setContentType( "Text/Plain; charset = utf-8"); out.print(jsonres); out.flush(); } catch(ioexception e){e.printstacktrace(); }最後に{out.close(); } nullを返します。 }}Spring-MVC.xmlの下でプロセッサを登録します
<bean id = "ExceptionHandler"/>
利点: AJAXリクエストを処理できます。また、例外監視などの機能的な拡張機能を実装するためにエンコードするのにも便利です。
タイプ(3)、@exceptionhandler annotation
@controllerpublic class testexceptionhandlercontroller {@exceptionhandler({myexception1.class})public string exception(myexception1 e){return "/error/e1"; } @RequestMapping( "/mary")public void test(){throw new MyException1( "No Money!"); }}短所: @exceptionHandlerの方法は、例外を投げる可能性のある方法と同じコントローラーの下にある必要があります。 (お勧めしません)
3。組み合わせ
実際のプロジェクトでは、例外の均一な返品を処理する場合、いくつかのカスタム例外または拡張機能がフレームワークに引き渡され、HTTPリターンコードのマッピングがコンテナに引き渡されます。フレームワークはコンテナ内で実行されます。フレームワークが最初に例外を取り、それを返す場合、コンテナはマッピングされなくなります。
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。