Agar istisno so'rov ko'rsatilishi paytida yoki so'rovni qayta ishlovchi (masalan, @Controller bilan annotatsiyalangan) koderator tomonidan chiqarilsa, DispatcherServlet istisnoni tanib olish va odatda xato xabari bo'lgan alternativ ishlov berishni ta'minlash uchun HandlerExceptionResolver zanjiriga vakolatlarni topshiradi.
Quyidagi jadvalda HandlerExceptionResolver ning mavjud o'rnatmalari keltirilgan:
HandlerExceptionResolver |
Tavsif |
|---|---|
|
|
Istisno sinflarining nomlari va xato ko'rinishlari nomlari orasidagi moslik. Bu brauzer ilovasida xato sahifalari ko'rsatilishi uchun ishlatiladi. |
| Spring MVC tomonidan chaqirilgan istisnolarni tanib olish va ularni HTTP holat kodlariga ko'rsatish. Shuningdek, alternativ |
|
|
|
|
|
|
|
Tanib oluvchilar zanjiri
Bir nechta HandlerExceptionResolver binlarni Spring konfiguratsiyasida e'lon qilib va ularning order xususiyatlarini kerakli tarzda sozlab istisno tanib oluvchilar zanjirini yarata olasiz. Qanchalik buyurtma xususiyati yuqori bo'lsa, istisno tanib oluvchi shunchalik uzoqda joylashgan.
HandlerExceptionResolver shartnomasi, u quyidagilarni qaytarishi mumkinligini belgilaydi:
-
Xato ko'rinishiga ishora qiluvchi
ModelAndView. -
Qayta ishlov beruvchi ichida istisno qayta ishlangan bo'lsa, bo'sh
ModelAndView. -
Agar istisno tanib olinmagan bo'lsa
null, keyingi urinishlar uchun tanib oluvchilar tomonidan qilinadi, lekin oxir-oqibat istisno qolsa, u servlet konteynerga qabul qilinadi.
MVC konfiguratsiyasi Spring MVC uchun istisno tanib oluvchilarni, @ResponseStatus bilan annotatsiyalangan istisnolarni va @ExceptionHandler bilan annotatsiyalangan metodlarni qo'llab-quvvatlash uchun avtomatik ravishda o'rnatadi. Bu ro'yxatni o'zgartirish yoki almashtirish mumkin.
Konteynerning xato sahifasi
Agar istisno biron-bir HandlerExceptionResolver tomonidan tanib olinmasa va shuning uchun davom etsa yoki javob holati xato (ya'ni 4xx, 5xx) holatiga o'rnatilsa, servlet konteynerlari HTML bo'yicha standart xato sahifasini ko'rsatishi mumkin. Konteynerning xato sahifasini sozlash uchun web.xml da xato sahifasi ko'rsatmasini e'lon qilish mumkin. Quyidagi misolda buni qanday qilish ko'rsatilgan:
<error-page>
<location>/error</location>
</error-page>
Yuqoridagi misolni hisobga olganda, agar istisno yuzaga kelsa yoki javob xato holatiga ega bo'lsa, servlet konteyner /error URL manzilini ichida ERROR yuboradi. Keyin bu barcha DispatcherServlet tomonidan ko'rsatilgan anotatsiyaga ko'ra, muqobil xato ko'rinishi nomini modeli bilan qaytarish uchun yoki JSON formatida javob chiqarish uchun amalga oshirilgan @Controller bilan amalga oshirilgan, quyidagi misolda ko'rsatilganidek:
@RestController
public class ErrorController {
@RequestMapping(path = "/error")
public Map<String, Object> handle(HttpServletRequest request) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("status", request.getAttribute("javax.servlet.error.status_code"));
map.put("reason", request.getAttribute("javax.servlet.error.message"));
return map;
}
}
@RestController
class ErrorController {
@RequestMapping(path = ["/error"])
fun handle(request: HttpServletRequest): Map<String, Any> {
val map = HashMap<String, Any>()
map["status"] = request.getAttribute("javax.servlet.error.status_code")
map["reason"] = request.getAttribute("javax.servlet.error.message")
return map
}
}
WebApplicationInitializer yoki oddiy
web.xml dan foydalanish mumkin.
GO TO FULL VERSION