1. Klasifikasi Anomali
Pengecualian Java dibagi menjadi dua kategori: "Periksa" dan "non-periksa". Kata "periksa" berarti bahwa ketika kode dikompilasi, kompiler akan memeriksa apakah ada penanganan pengecualian (menangkap atau muntah). Untuk pengecualian yang diklasifikasikan perlu diperiksa, jika tidak diproses, kompilasi tidak akan dapat dilewati.
Ketika saya pemula, saya sering bertanya -tanya mengapa pengecualian harus ditangani dengan cara ini? Kemudian saya sedikit mengerti, hanya ada dua jenis kelainan: subyektif dan objektif. Satu dapat dihindari dalam banyak kasus dan yang lainnya tidak dapat dihindari dalam banyak kasus.
Pengecualian seperti NullpointerException sebagian besar terkait dengan kualitas programmer (dikembangkan dengan baik dan diuji, mereka pada dasarnya tidak akan muncul setelah sistem dijalankan). Mereka pada dasarnya dapat dihindari. Sintaks Java menggunakannya untuk kelas sebagai "pengecualian non-pemeriksaan", yang juga menyimpan programmer dan kompiler banyak masalah;
Pengecualian yang terkait dengan lingkungan eksternal seperti IOException hampir tidak dapat dihindari (jaringan akan menutup telepon suatu hari dan yang lainnya). Namun, ketika bertemu secara tak terduga, program ini masih perlu membuat perbedaan, sehingga kompiler perlu mendesak programmer untuk memeriksa dan melihat apakah kemungkinan pengecualian yang tidak terduga ini telah ditangani. Ketika objek pengecualian diteruskan ke node, program dapat melakukan beberapa langkah, seperti: mengembalikan prompt ke pengguna ("Sistem sibuk, silakan coba lagi"), mendorong pesan pengecualian ke platform pemantauan, dll.
2. Pemrosesan Pengembalian Terpadu dari Pengecualian
1. Pemrosesan Wadah
Berikut ini mencantumkan metode pemrosesan tomcat, konfigurasinya di bawah web.xml, dan tangani mereka sesuai dengan kode pengembalian HTTP atau jenis pengecualian:
<error-page> <cror-code> 404 </error-code> <cocion> /web-inf/views/error/404.jsp </cocion> </corror-page> <cror-page> <cror-page> <cror-code> 500 </error-code> <cocation> /web-page/views/ror-ror/500.jsps </location> <Ocation> /web-page/views/ror/500.jsps </location> <Ocation> </web--pages/views/ror/500.jsps </Location> </web-page> </Location> </Location> </webs--page/Views/ROROR/RORROR/RORPSP </500.jsp </ <Exception-Type> java.lang.throwable </cectrion-type> <location> /web-inf/views/error/throwable.jsp </cocion> </corror-page>
Kerugian: Tidak dapat menangani permintaan yang tidak perlu mengembalikan HTML, seperti AJAX;
2. Pemrosesan Kerangka
Berikut ini mencantumkan metode pemrosesan Spring MVC
(1) Gunakan SimpleMappingExceptionResolver, penangan pengecualian sederhana yang termasuk dalam MVC Musim Semi;
(2) mengimplementasikan handler pengecualian khusus antarmuka HandLerExceptionResolver; (Disarankan untuk menggunakannya, dan dapat mendukung Ajax dan ekstensi lainnya)
(3) Gunakan anotasi @ExceptionHandler untuk menerapkan penanganan pengecualian;
Ketik (1), konfigurasikan di bawah spring-mvc.xml
<!-Pergi ke pengecualian yang dilemparkan oleh pengontrol ke tampilan tertentu-> <bean> <name properti = "exceptionmappings"> <props> <!-Pengecualian yang berbeda melompat secara terpisah-> <!-Anda dapat menyesuaikan pengecualian yang berbeda-> <prop KEY = "com.test.myexception1">/error/e1 </por/props/com.test.myexception1 ">/error/e1 </pup> </com.test.myexception1">/error/e1 </exe. "com." <!-Jika Anda tidak ingin menyesuaikan pengecualian, cukup konfigurasikan yang berikut-> <prop key = "java.lang.throwable">/error/500 </prop> </props> </prop Property> </bean>
Kerugian: Tidak dapat menangani permintaan yang tidak perlu mengembalikan HTML;
Ketik (2), kelas implementasi antarmuka handerexceptionresolver khusus
/** * Penangan Pengecualian Kustom: Mendukung Ajax * @author wangxu * */kelas publik myExceptionHandler mengimplementasikan handleRexceptionResolver {public ModelAndView ResolveException (httpservletRequest, httpservletResponse ISaAxResponse, handler httpservletRequest, httpservletResponse response, Object handler, Exception ex) {/Exception Ex) {/ * request.getHeader ("X-requested-with")! = null && "xmlHttpRequest" .equals (request .getHeader ("X-requested-with"). ToString ()); 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/":/" " +" System Exception " +"/"}"; // struktur khusus dan foreground docking printwriter out = null; coba {out = response.getWriter (); request.setcharacterencoding ("UTF-8"); response.setContentType ("Teks/polos; charset = UTF-8"); out.print (jsonres); out.flush (); } catch (ioException e) {e.printstacktrace (); } akhirnya {out.close (); } return null; }}Dan daftarkan prosesor di bawah spring-mvc.xml
<bean id = "ExceptionHandler"/>
Keuntungan: Ini dapat menangani permintaan AJAX, dan juga nyaman untuk pengkodean untuk mengimplementasikan ekstensi fungsional, seperti pemantauan pengecualian, dll.
Ketik (3), anotasi @ExceptionHandler
@ControllerPublic kelas TestExceptionHandlerController {@ExceptionHandler ({myException1.class}) Public String Exception (myException1 e) {return "/error/e1"; } @RequestMapping ("/Mary") public void test () {lempar myException1 baru ("No Money!"); }}Kerugian: Metode @ExceptionHandler harus berada di bawah pengontrol yang sama dengan metode kemungkinan pelemparan pengecualian. (Tidak disarankan)
3. Kombinasi
Dalam proyek aktual, ketika menangani pengembalian pengecualian yang seragam, beberapa pengecualian atau ekstensi khusus akan diserahkan ke kerangka kerja, dan pemetaan kode pengembalian HTTP akan diserahkan ke wadah, karena kode pengembalian HTTP lebih banyak, beberapa tidak dapat mencapai kerangka kerja). Kerangka kerja berjalan di dalam wadah. Ketika kerangka kerja mengambil pengecualian terlebih dahulu dan mengembalikannya, wadah tidak akan lagi dipetakan.
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.