Java servlet va veb-konteynerlar. Servletlar. Servlet filtrlari haqida nimalarni bilasiz

Servletlar - bu veb-ilovaning server tomonida ishlaydigan Java dasturlari. Appletlar Web-brauzer funksiyalarini dinamik ravishda kengaytirganidek, servletlar ham Web-server funksiyalarini dinamik ravishda kengaytiradi. Servletlar har qanday so'rovga xizmat qilishi mumkin bo'lsa-da, ular odatda veb-serverlarni kengaytirish uchun ishlatiladi. Bunday ilovalar uchun Java Servlet texnologiyasi HTTP-ga xos servlet sinflarini belgilaydi. Javax.servlet va javax.servlet.http paketlari servletlar yaratish uchun interfeys va sinflarni taqdim etadi.

  • Veb-loyihaning tuzilishi qanday?

  • Servlet konteyneri nima? Servletning hayot aylanishi.

Servlet konteyneri - bu servletlarning hayot aylanishini boshqaradigan dastur.
Servlet hayotiy sikli: u servlet konteyneri tomonidan boshqariladi, servletga birinchi marta kirishda u xotiraga yuklanadi va init() usuli chaqiriladi. Ilova ishga tushganda, mijoz so'rovlarini qayta ishlash uchun service() usullari chaqiriladi. Ilova tugagach, destroy() usuli chaqiriladi va servlet xotiradan tushiriladi.

  • Servlet konteynerining vazifalari, funksionalligi qanday?

Servlet konteyneri to'liq mustaqil veb-server sifatida ishlashi, Apache kabi boshqa veb-serverga sahifalarni taqdim etishi yoki Java EE dastur serveriga integratsiyalashishi mumkin. Servlet va mijozlar o'rtasida ma'lumotlar almashinuvini ta'minlaydi, ishlaydigan servlet uchun dasturiy ta'minot muhitini yaratish, mijozlarni aniqlash va avtorizatsiya qilish, ularning har biri uchun seansni tashkil qilish kabi funktsiyalarni bajaradi.

  • sendRedirect() forward() dan qanday farq qiladi?

JSPga nisbiy yo'l orqali qo'ng'iroq qilish uchun forward() usulidan foydalaning; mutlaq yo'l yordamida JSPga kirish uchun sendRedirect() usulidan foydalaning. Bu usullar orasidagi farq shundan iboratki, mavjud so‘rov so‘rovi obyekti forward() usuli bilan uzatiladi va sendRedirect() usuli chaqirilganda yangi so‘rov hosil bo‘ladi. Ikkinchi holatda ma'lumot boshqa ob'ektlar bilan uzatilishi kerak. Bundan tashqari, forward() usuli tezroq.

  • Servlet filtrlari haqida nimalarni bilasiz?

Filtr interfeysini amalga oshirish so'rovni to'xtatuvchi, mijoz so'rovining sarlavhasi va mazmunini o'zgartira oladigan ob'ektni yaratishga imkon beradi. Filtrlar so'rov yoki javob yaratmaydi, faqat ularni o'zgartiradi. Filtr so'rovni servletga tushishidan oldin qayta ishlaydi va keyin (agar kerak bo'lsa) servletdan javobni qayta ishlaydi. Filtr turli xil manbalar bilan, xususan, servletlar va JSP sahifalari bilan o'zaro ta'sir qilishi mumkin. Servlet filtrlari:

  • servlet ishga tushishidan oldin servlet boshlanishini to'xtating.
  • servlet chaqirilishidan oldin so'rovning mazmunini aniqlang.
  • kiruvchi so'rov paketlangan sarlavhalar va so'rov ma'lumotlarini o'zgartirish.
  • qabul qilingan javob to'plangan sarlavhalar va javob ma'lumotlarini o'zgartirish.
  • servletga qo'ng'iroq qilingandan so'ng servletni ishga tushirishni to'xtatish.

Servlet filtri bitta servlet yoki servletlar guruhida ishlash uchun sozlanishi mumkin. Filtrlarni shakllantirish uchun asos javax.servlet.Filter interfeysi bo'lib, u uchta usulni amalga oshiradi:

  • void init(FilterConfig config) ServletException-ni tashlaydi;
  • void destroy();
  • void doFilter(ServletRequest so'rovi, ServletResponse javobi, FilterChain zanjiri) IOException, ServletExceptionni tashlaydi;

Init() usuli filtr ishga tushishidan oldin chaqiriladi va filtrning konfiguratsiya ob'ektini o'rnatadi. doFilter usuli filtrning haqiqiy ishini bajaradi. Shunday qilib, server filtrni ishga tushirish uchun init() ni bir marta chaqiradi, so'ngra to'g'ridan-to'g'ri filtrga qilingan so'rovlar qancha bo'lsa, shuncha marta doFilter() ni chaqiradi. Filtr o'z ishini tugatgandan so'ng, destroy() usuli chaqiriladi.

  • Nima uchun bizga servletlarda tinglovchilar kerak?

Kontekst va seans tinglovchilari kontekst yoki seans qachon ishga tushirilganligini yoki qachon yo'q qilinishi kerakligini va kontekst yoki sessiyaga atributlar qachon qo'shilgan yoki o'chirilganligini kuzatishi mumkin bo'lgan sinflardir. Servlet 2.4 so'rov qanday yaratilishi va yo'q qilinishi hamda atributlar servletga qo'shilishi va o'chirilishini kuzatish uchun so'rov tinglovchi modelini kengaytiradi. Servlet 2.4 quyidagi sinflarni qo'shdi:

  • ServletRequestListener
  • ServletRequestEvent
  • ServletRequestAttributeListener
  • ServletRequestAttributeEvent

  • Ilovada boshqa servlet tomonidan chiqarilgan istisnolarni qanday hal qilish kerak?

Brauzer faqat HTML tilini tushunganligi sababli, dastur istisno qilganda, servlet konteyneri istisno bilan ishlaydi va HTML javobini yaratadi. Bu 404, 403 va boshqalar kabi xato kodlari bilan sodir bo'ladigan narsaga o'xshaydi. Servlet API biz o'rnatish deskriptorida o'rnatishimiz mumkin bo'lgan istisnolar va xatolarni hal qilish uchun mahalliy servletlarni qo'llab-quvvatlaydi. Bunday servletlarning asosiy vazifasi xato yoki istisnolarni hal qilish va foydalanuvchiga inson o'qiy oladigan HTML javobini yuborishdir. Misol uchun, siz asosiy sahifaga havolani, shuningdek, xato haqidagi ba'zi tafsilotlarning tavsifini taqdim etishingiz mumkin.

  • Joylashtirish deskriptori nima?

Joylashtirish deskriptori servlet konteyneriga joylashtiriladigan artefakt konfiguratsiya faylidir. Java Platformasi, Enterprise Edition spetsifikatsiyasida joylashtirish deskriptori komponent, modul yoki dastur (masalan, veb yoki korxona ilovasi) qanday joylashtirilishini tasvirlaydi.

Ushbu konfiguratsiya fayli modul yoki ilova uchun maxsus sozlamalar, xavfsizlik opsiyalari bilan joylashtirish imkoniyatlarini belgilaydi va maxsus konfiguratsiya talablarini tavsiflaydi. Joylashtirish deskriptor fayllari sintaksisi XML.

  • Ilovani ishga tushirish bilan servletni ishga tushirishni qanday amalga oshirish mumkin?

Servlet konteyneri odatda mijozning birinchi soʻrovi boʻyicha servletni yuklaydi, lekin baʼzida servletni dastur boshidayoq yuklash kerak boʻladi (masalan, agar servlet katta boʻlsa va uni yuklash uchun uzoq vaqt kerak boʻlsa). Buning uchun identifikatordagi yuklash elementidan (yoki loadOnStartup izohidan) foydalanishingiz kerak, bu esa ishga tushirish vaqtida servlet yuklanishi kerakligini bildiradi.

Qiymat int bo'lishi kerak. Agar qiymat manfiy bo'lsa, u holda servlet mijozning iltimosiga binoan yuklanadi va agar 0 va undan yuqori bo'lsa, u dastur boshida yuklanadi. Raqam qancha past bo'lsa, servlet shunchalik erta yuklab olish navbatda bo'ladi.

  • ServletConfig obyekti nima?

Javax.servlet.ServletConfig interfeysi konfiguratsiya ma'lumotlarini servletga o'tkazish uchun ishlatiladi. Har bir servlet o'zining ServletConfig ob'ektiga ega bo'lib, uni yaratish uchun servlet konteyneri mas'uldir. Web.xml (yoki WebInitParam izohlari) dagi Init parametrlari konfiguratsiya parametrlarini o'rnatish uchun ishlatiladi. getServletConfig() usuli ushbu servletning ServletConfig obyektini olish uchun ishlatiladi.

  • ServletContext obyekti nima?

Javax.servlet.ServletContext interfeysi servlet o'z servlet konteyneri bilan bog'lanish uchun foydalanadigan usullar to'plamini belgilaydi, masalan, faylning MIME turini olish, so'rovlarni jo'natish yoki jurnal fayliga yozish. ServletContext obyekti noyob va veb-ilovadagi barcha servletlar uchun mavjud. Veb-ilovaning ishga tushirilgan parametrlariga bir yoki bir nechta servletlarga kirish huquqini berish kerak bo'lganda biz ServletContext obyektidan foydalanishimiz mumkin. Buning uchun elementdan foydalaning web.xml ichida. ServletContext obyektini ServletConfig interfeysida getServletContext() usuli yordamida olish mumkin.

Servlet konteynerlari servletlar guruhiga xos bo'lgan kontekst ob'ektlarini ham taqdim etishi mumkin. Guruhlarning har biri boshqa xost yo'li URL manzillari bilan bog'lanadi.

ServletContext ilovaga tinglovchilar va filtrlarni dasturiy qo'shishni ta'minlash uchun Servlet 3 spetsifikatsiyasida kengaytirilgan. Ushbu interfeysda getMimeType(), getResourceAsStream() va boshqalar kabi ko'plab foydali usullar mavjud.

  • ServletContext va ServletConfig o'rtasidagi farq nima?

Quyida ba'zi farqlar keltirilgan:

  • ServletConfig har bir servlet uchun noyobdir, ServletContext esa butun ilovada yagonadir.
  • ServletConfig servletni ishga tushirish parametrlarini ta'minlash uchun ishlatiladi va ServletContext barcha servletlar uchun dasturni ishga tushirish parametrlarini ta'minlash uchun ishlatiladi.
  • Bizda ServletConfig obyektida atributlarni o‘rnatish imkoni yo‘q, shu bilan birga biz boshqa servletlar uchun mavjud bo‘ladigan ServletContext obyektiga atributlarni o‘rnatishimiz mumkin.

  • ServletResponse interfeysi.

ServletResponse interfeysi mijozga ma'lumotlarni yuborish uchun vositadir. Ushbu vositaning barcha usullari shu maqsadga xizmat qiladi.

  • ServletRequest interfeysi.

ServletRequest interfeysi HTTP so'rov parametrlarini olish uchun vositadir. Ushbu interfeys nomi va maqsadi bo'yicha ServletContext bilan bir xil bo'lgan ba'zi usullarga ega.

  • So'rov dispetcheri nima?

RequestDispatcher interfeysi so'rovni boshqa resursga o'tkazish uchun ishlatiladi (u HTML, JSP yoki bir xil ilovadagi boshqa servlet bo'lishi mumkin). Bundan javobga boshqa resurs tarkibini qo'shish uchun foydalanishimiz mumkin. Ushbu interfeys bir xil kontekstdagi servletlar o'rtasidagi ichki aloqa uchun ishlatiladi. Interfeys ikkita usulga ega:

  • void forward(ServletRequest var1, ServletResponse var2) - servletdan so'rovni serverdagi boshqa resursga (servlet, JSP yoki HTML fayli) yo'naltiradi.
  • void include(ServletRequest var1, ServletResponse var2) - javobda resurs tarkibini (servlet, JSP yoki HTML sahifasi) o'z ichiga oladi.

Interfeysga ServletContext getRequestDispatcher(String s) usuli yordamida kirish mumkin. Yo'l / bilan boshlanishi kerak, bu kontekstning joriy ildiz yo'liga nisbatan izohlanadi.

  • Servletda qanday qilib blokirovka qilish mumkin?

O'lik qulfni (tuhfani) halqali usul chaqiruvini amalga oshirish orqali olish mumkin, masalan, doGet () usulida doPost () usulini chaqirish va doPost () usulida doGet () ni chaqirish.

  • Serverda servlet manzilini qanday olish mumkin?

Serverdagi servletning haqiqiy yo'lini olish uchun siz ushbu konstruktsiyadan foydalanishingiz mumkin: getServletContext().getRealPath(request.getServletPath()).

  • Servletdan server ma'lumotlarini qanday olish mumkin?

Server ma'lumotlarini getServerInfo() usuli yordamida ServletContext obyekti yordamida olish mumkin. Bular. getServletContext().getServerInfo().

  • Serverda mijozning IP manzilini qanday olish mumkin?

Servletdagi mijozning IP-manzilini olish uchun request.getRemoteAddr() dan foydalaning.

  • Servlet o'rash sinflari haqida nimalarni bilasiz?

Servlet HTTP API ikkita o'rash sinfini taqdim etadi, HttpServletRequestWrapper va HttpServletResponseWrapper. Ular ishlab chiquvchilarga servlet so'rovi va javob turlarining o'z ilovalarini amalga oshirishda yordam beradi. Biz ushbu sinflarni kengaytira olamiz va o'z javobimizni va so'rov ob'ekt turlarini amalga oshirish uchun faqat kerakli usullarni bekor qilishimiz mumkin. Bu sinflar standart servlet dasturlashda ishlatilmaydi.

Java-ning eng yoqimli xususiyatlaridan biri uning ko'p qirraliligidir. Albatta, an'anaviy ish stoli va hatto mobil ilovalarni yaratish juda yaxshi. Ammo, agar siz jasur yo'ldan tushib, Java veb-ishlab chiqish hududiga kirmoqchi bo'lsangiz-chi? Siz uchun yaxshi yangilik shundaki, bu til to'liq Servlet API bilan birga keladi, bu sizga juda ko'p qiyinchiliksiz mustahkam veb-ilovalarni yaratish imkonini beradi.

Servletlar yordamida Java dasturlarini yaratish

Shunday qilib, biz allaqachon dastur konfiguratsiya fayllarini yaratdik. Biroq, hozirgi holatida, u tom ma'noda hech narsa qilmaydi. Mijozlar HTML formasi yordamida roʻyxatdan oʻtishlarini istaymiz, shuning uchun biz qilishimiz kerak boʻlgan navbatdagi narsa roʻyxatdan oʻtish muvaffaqiyatli boʻlgach, yuqoridagi shakl va mijoz maʼlumotlarini koʻrsatadigan JSP fayllarini yaratishdir. Biz hozir shunday qilamiz.

Ko'rinish ustida ishlash

Ilovaning ko'rinishi ikkita JSP fayli bilan belgilanadi - MVC kontekstida ular ko'rinishlar deb ataladi. Birinchisi, ro'yxatga olish shaklini va kiritilgan ma'lumotlarni tekshirishdan keyin yuzaga kelishi mumkin bo'lgan xatolarni ko'rsatish uchun javobgar bo'ladi. Ikkinchisi, ro'yxatdan o'tish jarayoni muvaffaqiyatli yakunlanganidan keyin mijoz tomonidan kiritilgan ma'lumotlarni ko'rsatadigan oddiy xush kelibsiz sahifa bo'ladi.

Mana birinchi JSP fayli:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Roʻyxatdan oʻtish

Roʻyxatdan oʻtish

$(buzilish).

Maqola yoqdimi? Do'stlar bilan baham ko'rish uchun: