1. Классификация аномалий
Исключения Java делятся на две категории: «проверьте» и «не проверенный». Слово «проверка» означает, что когда код будет скомпилирован, компилятор проверит, есть ли какая -либо обработка исключений (ловушка или бросок). Для исключений, классифицированных как необходимость быть проверенным, если они не обработаны, компиляция не сможет быть передана.
Когда я был новичком, я часто задаюсь вопросом, почему исключения следует обрабатывать таким образом? Позже я немного понял, есть только два типа аномалий: субъективные и объективные. Один можно избежать в большинстве случаев, а в большинстве случаев нельзя избежать.
Исключения, такие как NullPointerException, в основном связаны с качествами программистов (хорошо разработанные и проверенные, они в основном не будут всплыть после запуска системы). Их в основном можно избежать. Синтаксис Java использовал их для класса как «не проверенные исключения», что также спасало программистов и компиляторы много проблем;
Исключения, связанные с внешними средами, такими как ioException, почти неизбежны (сеть будет вешать одну день, а другой). Однако при неожиданном столкновении программа все еще должна изменить ситуацию, поэтому компилятор должен призвать программиста проверить и посмотреть, были ли обработаны эти возможные неожиданные исключения. Когда объект исключения передается в узел, программа может выполнить некоторые меры, такие как: возврат подсказки пользователю («Система занята, попробуйте еще раз»), выдвижение сообщения исключения на платформу мониторинга и т. Д.
2. Единая обработка возврата исключений
1. Обработка контейнера
В следующем перечислены методы обработки Tomcat, настраивайте их в соответствии с Web.xml и обрабатывайте их в соответствии с кодом возврата HTTP или типом исключений:
<error-page> <error-code>404</error-code> <location>/WEB-INF/views/error/404.jsp</location> </error-page> <error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/views/error/500.jsp</location> </error-page> <error-page> <Exception-type> java.lang.throwable </exception-type> <ditic> /web-inf/views/error/throwable.jsp </location> </error-page>
Недостатки: не могут обрабатывать запросы, которые не должны возвращать HTML, такие как Ajax;
2. Обработка структуры
В следующем перечислены методы обработки Spring MVC
(1) использовать SimpleMappingExceptionResolver, простой обработчик исключений, включенный в Spring MVC;
(2) реализовать интерфейс handlerexceptionResolver пользовательский обработчик исключений; (Рекомендуется использовать его и может поддерживать Ajax и другие расширения)
(3) использовать аннотацию @ExceptionHandler для реализации обработки исключений;
Тип (1), настройка под пружиной-mvc.xml
<!-Перейдите к исключению, поднятую контроллером в определенную точку зрения-> <Bean> <name = "exceptionMappings"> <Props> <!-разные исключения прыгают отдельно-> <!-Вы можете настроить различные исключения-> <prop key = "com.test.myexception1">/e1 </rop> <prop = "com.test.myexception1">/e1 </prop> <prop = " Не хочу настроить исключения, просто настройте следующее -> <prop key = "java.lang.throwable">/error/500 </prop> </props> </property> </bean>
Недостатки: не может обрабатывать запросы, которые не должны возвращать HTML;
Тип (2), класс реализации пользовательского интерфейса handlerexceptionResolver
/** * * * * request.getheader ("x-requested-with")! = null && "xmlhttprequest" .equals (request .getheader ("x-requested-with"). toString ()); if (! isajax) {if (ex exantemof com.test.myexception1) {return new ModelAndView ("/error/e1"); } else if (ex exantemof com.test.myexception1) {return new ModelAndView ("/error/e2"); } else {return new ModelAndView ("/error/500"); }} String jsonres = "{/" message/":/" " +" Exception " +"/"}"; // Пользовательская структура и док. 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 (); } return null; }}И зарегистрировать процессор в соответствии с Spring-Mvc.xml
<bean id = "ExceptionHandler"/>
Преимущества: он может обрабатывать запросы AJAX, и это также удобно для кодирования для реализации функциональных расширений, таких как мониторинг исключений и т. Д.
Тип (3), аннотация @ExceptionHandler
@Controllerpublic class testexceptionHandlerController {@ExceptionHandler ({myException1.class}) открытая строка исключение (myException1 e) {return "/error/e1"; } @Requestmapping ("/mary") public void test () {бросить новое myexception1 ("без денег!"); }}Недостатки: метод @ExceptionHandler должен находиться под тем же контроллером, что и метод возможных исключений для броска. (Не рекомендуется)
3. Комбинация
В реальных проектах при обработке единообразных возвращений исключений некоторые пользовательские исключения или расширения будут переданы в рамку, а отображение кода возврата HTTP будет передано контейнеру, поскольку код возврата HTTP является более внешним, некоторые не могут достичь структуры, а некоторые не являются исключением из рамки (такие как 404 и Spring MVC). Фреймворк работает в контейнере. Когда структура сначала займет исключение и возвращает его, контейнер больше не будет отображаться.
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.