Servletlər. Daxil etdiyiniz məlumatların sosial şəbəkə istifadəçilərinə casusluq üçün servlet yazırıq

Java Servlet müştəridən siqnalları qəbul edən və ona cavablar göndərən eyni adlı proqramlaşdırma dilində yazılmış server tərəfi proqramdır. JSP, EJB, XML və digər əlaqəli texnologiyalardan əlavə, tipik Java EE-ni təşkil edən əsas elementdir. Tətbiq veb serverdə yerləşdirmək üçün WAR (Web AR chive) faylında paketlənə bilər. Java servletini işlədə bilən serverə konteyner deyilir. Belə bir serverdə işləyən proqram dinamik veb səhifələr yarada bilər.

Java Servlet Əsasları

Ən məşhur və geniş istifadə olunan konteynerlər Tomcat və JBoss-dur. Texniki baxımdan, Servlet Ümumi Müştəri/Server Protokolu və ya HTTP üçün genişlənməyə malik normal Java sinfidir. Praktikada o, müvafiq olaraq HttpServlet GET və POST ləğvetmələri vasitəsilə sorğuları emal etmək üçün istifadə olunur. Java Servlet konteyneri sorğu-cavab obyektləri olan Http.ServletRequest və Http.ServletResponse təmin edir. Və adətən dinamik məzmun yaratmaq üçün JSP ilə birlikdə istifadə olunur.

Tipik model ssenarisi:

  • JSP istifadəçiyə məlumat giriş formasını təqdim edir.
  • Servlet girişi qəbul edir, emal edir və cavab göndərir.
  • Yüksək keyfiyyətli iş üçün o, xüsusi filtrlərdən istifadə edir.
  • Java Servlet Filtrləri sorğuları servletə göndərilməmişdən və kodu tamamlandıqdan sonra cavablandırılmamışdan və konteyner cavabı müştəriyə geri göndərməzdən əvvəl onları tutmaq və emal etmək üçün istifadə olunan Java plaginləridir.

    Filtrlərlə yerinə yetiriləcək ümumi vəzifələr:

  • Faylların qeydiyyatı üçün sorğu parametrlərinin qeydiyyatı.
  • Resurs sorğusunun autentifikasiyası və avtorizasiyası.
  • Servletə göndərməzdən əvvəl sorğunun gövdəsinin və ya başlığının formatlanması.
  • Müştəriyə göndərilən cavab məlumatlarının sıxılması.
  • Cavab dəyişdirildi, bəzi kukilər əlavə edildi.
  • Java Servlet başlıq məlumatı.
  • Filtrlər yerləşdirmə təsviri faylına (web.xml) daxil edilir və konfiqurasiya edilir. Servletlər və filtrlər bir-birindən xəbərsizdir, ona görə də sadəcə web.xml-ni redaktə etməklə filtri əlavə edə və ya silə bilərsiniz. Bir resurs üçün çoxlu filtrlərə və ya web.xml üçün zəncir filtrlərinə malik olmaq və ya javax.servlet.Filter interfeysini tətbiq etməklə Java Servlet filtrlərini işə salmaq məqbuldur.

    Serverə paralel sorğular, vebin vacib keyfiyyətlərini - multithreading və paralelliyi təmin edən iplər tərəfindən işlənir.

    Əsas funksiyalar:

  • Daşıma qabiliyyəti. Java platformadan müstəqil olduğu üçün eyni şey servletlər üçün də keçərlidir. Məsələn, onu Windows əməliyyat sistemində qurmaq mümkündür ki, GlassFish tərtibatçıları ondan veb server kimi istifadə etsinlər və sonra onu apache Java Servlet veb serveri ilə Unix, Linux kimi istənilən digər ƏS-də işlədə bilsinlər. Bu xüsusiyyət onu portativ edir və bu onun CGI-dən əsas üstünlüyüdür.
  • Səmərəlilik və miqyaslılıq. Servlet yerləşdirildikdən və veb serverə yükləndikdən sonra o, dərhal müştəri sorğularını yerinə yetirməyə başlaya bilər. O, yüngül iplə çağırılır, ona görə də Java-nın çoxillikli funksiyasından istifadə etməklə eyni vaxtda çoxsaylı müştəri sorğuları doldurula bilər. CGI-dən fərqli olaraq, server hər bir müştəri sorğusu üçün yeni bir proses başlatır.
  • Etibarlılıq. Zibilin toplanması, istisnaların idarə edilməsi, Java təhlükəsizlik meneceri və digərləri kimi ən yaxşı Java xüsusiyyətlərini miras alaraq, idarəetmə problemlərinə və yaddaş sızmalarına daha az meyllidir. Bu, proqramın inkişafını təhlükəsiz və səhvsiz edir.
  • Dinamik veb səhifələrə ehtiyac

    Bir biznesin tez dinamik veb səhifələr yaratmaq istəməsinin bir çox səbəbi var, məsələn, vebsaytdakı məlumatların tez-tez dəyişməsi. Xəbərlər və hava saytları adətən tərtibatçıların daimi diqqəti olmadan məzmunu təzə saxlamaq üçün CGI-yə etibar edirlər. Cari qiymətləri və səhm səviyyələrini sadalayan e-ticarət veb-səhifələri bu məzmunu şirkətin daxili infrastrukturundan əldə edərək, tələb olunduqda əldə etmək üçün CGI-dan istifadə edir.

    Bir çox istifadəçi CGI-əsaslı veb xidmətləri yaratmaq üçün Java texnologiyasından istifadə təcrübəsi var, lakin Java Servletləri ənənəvi CGI alternativlərindən daha səmərəli, güclü, istifadəsi asan və daha ucuzdur.

    Java Servletlərinin üstünlükləri:

  • Səmərəlilik. Ənənəvi CGI-də hər bir HTTP sorğusu yeni bir CGI prosesinə başlayır. Onun kodu yaxşı tətbiq olunsa belə, çox vaxt yalnız proses başlayanda deyil, həm də onun icrası zamanı əhəmiyyətli miqdarda əlavə xərclər olur. Servletlərdən istifadə edildikdə, JVM yaddaşda yüklü olaraq qalır və hər sorğu Java mövzusu ilə idarə olunur. Java Servletinə misal olaraq, ənənəvi CGI modelində X sayda paralel sorğu varsa, bu o deməkdir ki, proqram kodu X dəfə yaddaşa yüklənir. Bu, veb serverdə həddindən artıq yükə çevrilir. Bununla belə, servlet mühitində onun sinfinin yalnız bir nüsxəsinin işlədiyi X mövzular var. Bunun nəticəsi bir çox platformada səmərəliliyin və miqyasların artırılmasıdır.
  • Rahatlıq. Proqramdan istifadə edərkən sadəcə CGI funksiyalarını yerinə yetirmək üçün Perl kimi yeni bir dil öyrənməyin mənası yoxdur. Bundan əlavə, servletlər HTML ilə əlaqəli bir çox tapşırıqlar üçün zəngin infrastruktura malikdir və bu, inkişaf prosesini xeyli sürətləndirir.
  • Güc - Təəssüf ki, ənənəvi CGI skriptləri arzuolunan çox şey buraxır. Məsələn, onların adi proqramları birbaşa veb serverlərlə danışa bilməz, bu o deməkdir ki, bütün interfeys yaradılmalıdır. Servletlər məlumat anbarlarına birbaşa giriş tələb edən əməliyyatları asanlaşdıraraq birbaşa veb serverlərlə əlaqə saxlaya bilir. Onlar həm də unikaldırlar, çünki onlar digər servletlərlə əlaqə saxlaya bilir və sorğular arasında məlumat saxlaya bilir və sessiyanın izlənilməsini olduqca asanlaşdırır.
  • Java daşınması birbaşa servletlərə yayılır. Əslində, hazırda istifadə olunan demək olar ki, hər bir əsas veb server Java Servletlərini birbaşa və ya plagin vasitəsilə dəstəkləyir.
  • qənaətcillik. İnkişaf nöqteyi-nəzərindən servletlərin tətbiqi veb serverlərlə düzgün əlaqə saxlamaq üçün xüsusi kodlaşdırma tələb edən digər variantlardan daha ucuzdur. Java Servlet yönləndirməsi getməyə hazırdır və dinamik məzmunun üstünlüklərini itirmədən biznesin dəyərini mümkün qədər aşağı sala bilər.
  • Servlet veb proqramın server tərəfində işləyən java proqramıdır. Necə ki, appletlər Veb-brauzerin funksionallığını dinamik şəkildə genişləndirir, servletlər də Web serverin funksionallığını dinamik şəkildə genişləndirirlər.

    servlet"və aşağıdakı kimi təsvir edilə bilər: müştəridən sorğu daxil olduqda, Veb server xüsusi konfiqurasiya faylından istifadə edərək hansı servletin icra edilməli olduğunu müəyyən edə bilər. Bundan sonra Veb server JVM-i işə salır, o da öz növbəsində servleti icra edir. Servlet sorğunu emal edir və Veb serverin məzmununu ötürür (ehtimal ki, HTML səhifəsi şəklində) Veb server müştəriyə cavab (servlet tərəfindən yaradılan HTML səhifəsi) göndərir.

    WEB server mahiyyətcə yükləyən bir növ konteynerdir servlet"s, onları icra edir və nəticəni onlardan alaraq müştəriyə göndərir.

    Veb Proqram Arxitekturasında Servlet

    Gücü və elastikliyinə görə, servlet"s sistemin arxitekturasında mühüm rol oynaya bilər. Onlar orta təbəqə üçün nəzərdə tutulmuş tətbiq tapşırıqlarını yerinə yetirə, müştəri üçün proksi server rolunu oynaya və hətta yeni protokollar və protokollar üçün dəstək əlavə etməklə orta təbəqənin funksionallığını təkmilləşdirə bilər. digər funksiyalar.Orta təbəqə üç səviyyəli klient-server adlanan sistemdə proqram serveri kimi çıxış edir və Veb brauzer kimi "yüngül" müştəri ilə məlumat mənbəyi arasında yerləşir.

    Servlet proxy olaraq

    Appletləri dəstəkləmək üçün servletlər öz proxy serverləri kimi çıxış edə bilərlər. Bu vacib ola bilər, çünki Java təhlükəsizlik sistemi tətbiqetmələrə yalnız yükləndikləri serverə qoşulmağa imkan verir. Əgər applet başqa maşında yerləşən verilənlər bazası serverinə qoşulmalıdırsa, servlet applet üçün bu əlaqəni yarada bilər.

    Müvəqqəti və daimi servlet"s

    Servletlər hər bir müştəri sorğusu üçün işə salına və dayandırıla bilər. Onlar həmçinin Veb server işə salındıqda işə salına və dayandırılana qədər mövcud ola bilərlər. Müvəqqəti servlet"s tələb üzrə yüklənir və nadir hallarda istifadə olunan funksiyalar üçün server resurslarına qənaət etmək üçün yaxşı bir yol təklif edir. Davamlı servletlər Veb server işə salındıqda yüklənir və dayandırılana qədər davam edir. Servletlər serverə davamlı uzantılar kimi quraşdırılır, əgər başlanğıc dəyəri server tərəfində davamlı funksionallıq təklif edərsə (məsələn, RMI xidməti) və ya müştəri sorğularına mümkün qədər tez cavab verməli olduqları hallarda onlar çox yüksəkdir (məsələn, verilənlər bazası bağlantısı yaratmaq). Təyin etmək üçün xüsusi kod yoxdur servlet"lakin daimi və ya müvəqqəti; bu Veb serverin qurulması funksiyasıdır.

    Servletin həyat dövrü, javax.servlet.Servlet

    Servletlər Veb server platformasında Veb serverin özü ilə eyni prosesin bir hissəsi kimi işləyir. Veb server hər bir servlet instansiyasını işə salmaq, çağırmaq və məhv etmək üçün məsuliyyət daşıyır. Veb server servletlə sadə interfeys vasitəsilə qarşılıqlı əlaqədə olur: javax.servlet.Servlet.

    javax.servlet.Servlet interfeysinə üç əsas metod daxildir:

    • içində()
    • xidmət()
    • məhv()

    və iki köməkçi üsul:

    • getServletConfig()
    • getServletInfo()

    İnterfeyslər arasındakı oxşarlıqlar servlet"və Java tətbiqetməsi göz qabağındadır. O, belə tərtib edilmişdir! Java servletləri veb-serverlər üçün nədirsə, veb-brauzerlər üçün appletlərdir. Applet veb brauzerdə işləyir, xüsusi interfeys vasitəsilə onun tələbi üzrə hərəkətləri yerinə yetirir. Servlet də eyni şeyi edir. Veb serverdə işləyərkən.

    Servletin işə salınması, init() metodu

    Servlet ilk dəfə yüklənəndə init() metodu çağırılır. Bu, servletə faylları açmaq və ya serverləri ilə əlaqə yaratmaq kimi istənilən quraşdırma işlərini yerinə yetirməyə imkan verir. Servlet daimi olaraq serverdə quraşdırılıbsa, server işə salındıqda yüklənir. Əks halda, server həmin servletin təqdim etdiyi xidməti yerinə yetirmək üçün müştərinin ilk sorğusunda servleti işə salır.

    Bu üsul zəmanət verilir içində() metodu çağırmaq kimi servletə hər hansı digər çağırışdan əvvəl bitəcək xidmət(). qeyd edin ki içində() yalnız bir dəfə çağırılacaq; servlet boşalana və sonra yenidən server tərəfindən yüklənənə qədər çağırılmayacaq.

    Metod içində() bir arqument götürür - obyektə istinad ServletConfig, servleti işə salmaq üçün arqumentləri ehtiva edir. Bu obyektin metodu var getServletContext(), bir obyekti qaytarır ServletContext Servlet mühiti haqqında məlumatları ehtiva edən A.

    Servlet nüvəsi, xidmət() metodu

    Metod xidmət() servletin ürəyidir. Müştəridən gələn hər sorğu bir metod çağırışı ilə nəticələnir xidmət(). Bu üsul sorğunu oxuyur və ServletRequest və ServletResponse iki arqumentindən istifadə edərək cavab mesajı yaradır:

    Beləliklə, məlumatı müştəridən servletə ötürməyin iki yolu var. Birincisi, sorğu parametrlərində dəyərlərin ötürülməsidir. Parametr dəyərləri URL-ə daxil edilə bilər. Məlumatı müştəridən servletə ötürməyin ikinci yolu InputStream (və ya Reader) vasitəsilədir.

    Metod əməliyyatı xidmət() mahiyyətcə sadədir - serverdən ona ötürülən hər bir müştəri sorğusuna cavab yaradır. Bununla belə, eyni vaxtda bir neçə paralel sorğunun işlənə biləcəyini unutmayın. Əgər üsul xidmət() faylları, verilənlər bazası kimi hər hansı xarici resurs tələb edirsə, o zaman resurslara girişin iplə təhlükəsiz olmasını təmin etmək lazımdır.

    Servletin boşaldılması, məhv () üsulu

    Metod məhv() servlet boşalmazdan əvvəl bütün resursları (açıq fayllar və verilənlər bazası əlaqələri kimi) buraxmaq üçün çağırılır. Hər hansı son əməliyyatı yerinə yetirməyə ehtiyac yoxdursa, bu üsul boş ola bilər. Bir metodu çağırmadan əvvəl məhv() server ya bütün xidmət əməliyyatlarının tamamlanmasını, ya da müəyyən vaxtın bitməsini gözləyir. Bu üsul deməkdir məhv() istənilən uzun metodun icrası zamanı çağırıla bilər xidmət().

    Metodun rəsmiləşdirilməsi vacibdir məhv() bütün zənglərə qədər lazımi resursları bağlamaqdan qaçınmaq üçün xidmət() bitməyəcək.

    Servlet konfiqurasiyası, getServletConfig() metodu

    Metod getServletConfig() interfeysi həyata keçirən obyektə istinadı qaytarır ServletConfig. Bu obyekt servlet konfiqurasiya məlumatlarına girişi təmin edir, yəni. servletin başlanğıc parametrlərinə və servlet kontekst obyektinə giriş ServletContext, bu servletə və onun mühitinə giriş imkanı verir.

    Servlet məlumatı, getServletInfo() metodu

    Metod getServletInfo() servletin müəllifi və versiyası kimi servlet haqqında məlumatları ehtiva edən sətri qaytarmaq üçün servlet yaradan proqramçı tərəfindən müəyyən edilir.

    ServletRequest interfeysi

    ServletRequest servletə HTTP sorğu parametrləri haqqında müştəri məlumat verir, yəni. parametr adı və dəyərləri, atributları və giriş axını daxil olmaqla məlumatları təmin edir. Bu məlumat metoda ötürülür xidmət().

    Sonrakı servlet nümunəsi parametrdən məlumatın necə alınacağını göstərir xahişüsul xidmət():

    BufferedReader oxuyucusu; Sətir parametri1; string param2; ictimai etibarsız xidmət (ServletRequest sorğusu, ServletResponse cavabı) (oxuyucu = request.getReader(); param1 = request.getParameter("Birinci"); param2 = request.getParameter("İkinci"); )

    Sorğu haqqında əlavə məlumat servlet üçün üsullar vasitəsilə əldə edilə bilər, əsas olanlar aşağıdakı cədvəldə verilmişdir:

    getAttribute() Bu sorğunun müəyyən edilmiş atributunun dəyərini qaytarır.
    getContentLength() Əgər məlumdursa, ölçü tələb edin.
    getContentType() Sorğu orqanının MIME növünü qaytarır.
    getInputStream() Sorğu orqanından ikili verilənləri oxumaq üçün InputStream qaytarır.
    GetParameterNames() Bütün parametrlərin adları ilə sətirlər massivini qaytarır.
    getParameterValues() Göstərilən parametr üçün dəyərlər massivini qaytarır.
    getProtocol() Sorğu üçün protokol və versiyanı forma sətri kimi qaytarır /..
    getReader() Sorğu orqanından mətn almaq üçün BufferedReader qaytarır.
    getRealPath() Göstərilən virtual yol üçün real yolu qaytarır.
    getRemoteAddr() Bu sorğunu göndərən müştərinin IP ünvanı.
    getRemoteHost() Sorğunu göndərən müştəri maşınının host adı.
    getScheme() Bu sorğunun URL-də istifadə olunan sxemi qaytarır (məsələn, https, http, ftp və s.).
    getServerName() Bu sorğunu qəbul edən serverin host adı.
    getServerPort() Bu sorğunu qəbul etmək üçün istifadə edilən port nömrəsini qaytarır.

    ServletResponse interfeysi

    İnterfeys ServletResponse müştəriyə məlumat göndərmək üçün bir vasitədir. Bu alətin bütün üsulları məhz bu vəzifəyə xidmət edir:

    İctimai java.lang.String getCharacterEncoding() ictimai etibarsız setLocale(java.util.Locale loc) ictimai java.util.Locale getLocale()

    Birinci üsul məlumatın göstəriləcəyi MIME kodlaşdırma növünü (məsələn, UTF8) qaytarır. İkinci iki üsul da charset ilə işləyir. Onlar sənəddə istifadə olunan dili (məsələn, rus dilini) göstərirlər.

    İctimai ServletOutputStream getOutputStream() java.io.IOException atır

    getOutputStream metodu servlet üçün çıxış axını qaytarır. Bu axın, məsələn, ikili faylları çıxarmaq üçün istifadə olunur. Mətn məlumatları java.io.Writer istifadə edərək çıxarıla bilər:

    İctimai java.io.PrintWriter getWriter() java.io.IOException atır

    getWriter() metodu avtomatik olaraq sətirləri getCharacterEncoding() və getLocale() metodlarında göstərilən simvol dəstinə çevirir.

    ictimai boşluq dəstiContentLength(int len)

    setContentLength metodu "Content-Length" HTTP başlıq sahəsinin dəyərini təyin edir

    ictimai etibarsız setContentType(String növü)

    SetContentType metodu sənədin MIME məzmun növünü göndərmək üçün istifadə olunur. HTTP başlıq sahəsi "Məzmun növü".

    Çıxış axını tamponlanır. Bu o deməkdir ki, məlumatların bir hissəsi müştəriyə yalnız bufer dolduqdan sonra veriləcək.

    public void setBufferSize(int size) public int getBufferSize() public void flushBuffer() java.io.IOException public void resetBuffer() funksiyasını atır.

    Yuxarıdakı 4 üsul müvafiq olaraq göndərmə buferinin ölçüsünü təyin etməyə, ölçüsünü əldə etməyə, doldurulmasını gözləmədən buferin məzmununu müştəriyə göndərməyi inisiallaşdırmağa və bu buferi verilənlərdən təmizləməyə imkan verir.

    İctimai məntiqi Təhlükəlidir()

    isCommitted metodundan istifadə edərək, müştəriyə məlumatların göndərilməsinin artıq başlanılıb-başlanılmamasından asılı olmayaraq bir bayraq əldə edə bilərsiniz. HTTP cavab başlığı artıq göndərilibsə, bayraq müsbət olacaq.

    ictimai etibarsız sıfırlama()

    Əgər HTTP başlığı hələ göndərilməyibsə, sıfırlama metodu HTTP başlığını defolt dəyərlərinə "sıfırlayır".

    Servletlərdə JFreeChart Diaqramları

    JFreeChart qrafik kitabxanası servletlərdə diaqramlar yaratmaq və onları vebsayt səhifələrində şəkillər kimi göstərmək üçün istifadə edilə bilər. Servletlərdə JFreeChart istifadəsinin təsviri təfərrüatları və nümunələri verilmişdir.

    Chart.js qrafik kitabxanası olan servlet

    Servletdə JNI

    Bəzi hallarda sizə WEB proqramında JNI-dən istifadə etmək lazım gələ bilər. Servletlərdə JNI-dən istifadə nümunəsi təqdim olunur.

    Servletdəki JMS mesajları

    Servlet mübadiləsi üçün istifadə edilə bilər JMS proqramlar arasında mesajlar. JBoss konteynerində JMS mesajlarını göndərmək və oxumaq üçün servletdən istifadə nümunəsi verilmişdir.

    Servletlər veb proqramın server tərəfində işləyən Java proqramlarıdır. Necə ki, appletlər Veb-brauzerin funksionallığını dinamik şəkildə genişləndirir, servletlər də Web serverin funksionallığını dinamik şəkildə genişləndirirlər. Servletlər istənilən sorğuya xidmət edə bilsələr də, onlar adətən veb serverləri genişləndirmək üçün istifadə olunur. Bu cür proqramlar üçün Java Servlet texnologiyası HTTP-xüsusi servlet siniflərini müəyyən edir. javax.servlet və javax.servlet.http paketləri servlet qurmaq üçün interfeyslər və siniflər təqdim edir.

    • Veb layihəsinin strukturu nədir?

    • Servlet konteyneri nədir? Servletin həyat dövrü.

    Servlet konteyneri servletlərin həyat dövrünü idarə edən proqramdır.
    Servletin həyat dövrü: o, servlet konteyneri tərəfindən idarə olunur, servletə ilk dəfə daxil olanda o, yaddaşa yüklənir və init() metodu çağırılır. Tətbiq işlədikcə müştəri sorğularını emal etmək üçün service() metodları çağırılır. Tətbiq dayandırıldıqda, destroy() metodu çağırılır və servlet yaddaşdan boşaldılır.

    • Servlet konteynerinin vəzifələri, funksionallığı hansılardır?

    Servlet konteyneri tam müstəqil veb server kimi çıxış edə, Apache kimi başqa veb serverə səhifələr təqdim edə və ya Java EE proqram serverinə inteqrasiya edə bilər. Servlet və müştərilər arasında məlumat mübadiləsini təmin edir, fəaliyyət göstərən servlet üçün proqram təminatı mühitinin yaradılması, müştərilərin müəyyən edilməsi və avtorizasiyası, onların hər biri üçün sessiyanın təşkili kimi funksiyaları yerinə yetirir.

    • sendRedirect() forward()-dan nə ilə fərqlənir?

    Nisbi yoldan istifadə edərək JSP-yə zəng etmək üçün forward() metodundan istifadə edin; mütləq yoldan istifadə edərək JSP-yə daxil olmaq üçün sendRedirect() metodundan istifadə edin. Bu metodlar arasındakı fərq ondan ibarətdir ki, artıq mövcud olan sorğu sorğusu obyekti forward() metodu ilə ötürülür və sendRedirect() metodu çağırıldıqda yeni sorğu formalaşır. Sonuncu halda məlumat digər obyektlərlə ötürülməlidir. Bundan əlavə, forward() metodu daha sürətlidir.

    • Servlet filtrləri haqqında nə bilirsiniz?

    Filtr interfeysinin tətbiqi sorğunu kəsən, müştəri sorğusunun başlığını və məzmununu çevirə bilən obyekt yaratmağa imkan verir. Filtrlər sorğu və ya cavab yaratmır, ancaq onları dəyişdirir. Filtr servletə çatmazdan əvvəl sorğunu əvvəlcədən emal edir və sonra (lazım olduqda) servletdən cavabı emal edir. Filtr müxtəlif növ resurslarla, xüsusən də həm servletlər, həm də JSP səhifələri ilə qarşılıqlı əlaqədə ola bilər. Servlet filtrləri:

    • servlet başlamazdan əvvəl servletin başlanğıcını kəsin.
    • servlet işə salınmazdan əvvəl sorğunun məzmununu müəyyənləşdirin.
    • daxil olan sorğunun paketləndiyi başlıqları və sorğu məlumatlarını dəyişdirin.
    • alınan cavabın yığıldığı başlıqları və cavab məlumatlarını dəyişdirin.
    • servletə zəngdən sonra servletin işə salınmasına müdaxilə edin.

    Servlet filtri tək bir servlet və ya bir qrup servlet üzərində işləmək üçün konfiqurasiya edilə bilər. Filtrlərin formalaşması üçün əsas üç metodu həyata keçirən javax.servlet.Filter interfeysidir:

    • void init(FilterConfig config) ServletException atır;
    • void məhv ();
    • void doFilter(ServletRequest sorğusu, ServletResponse cavabı, FilterChain zənciri) IOException, ServletException atır;

    Filtr işə başlamazdan əvvəl init() metodu çağırılır və filtrin konfiqurasiya obyektini quraşdırır. doFilter metodu filtrin faktiki işini görür. Beləliklə, server filtri işə salmaq üçün init() funksiyasını bir dəfə çağırır və sonra birbaşa həmin filtrə edilən sorğular qədər doFilter() funksiyasını çağırır. Filtr öz işini bitirdikdən sonra destroy() metodu çağırılır.

    • Servletlərdə dinləyicilərə niyə ehtiyacımız var?

    Kontekst və sessiya dinləyiciləri kontekst və ya sessiyanın nə vaxt işə salındığını və ya onun nə vaxt məhv edilməli olduğunu və atributların kontekst və ya sessiyaya nə vaxt əlavə edildiyini və ya silindiyini izləyə bilən siniflərdir. Servlet 2.4 sorğunun necə yaradıldığını və məhv edildiyini və atributların servletə necə əlavə edildiyini və silindiyini izləmək üçün sorğu dinləyicisi modelini genişləndirir. Servlet 2.4 aşağıdakı sinifləri əlavə etdi:

    • ServletRequestListener
    • ServletRequestEvent
    • ServletRequestAttributeListener
    • ServletRequestAttributeEvent

    • Tətbiqdə başqa bir servlet tərəfindən atılan istisnaları necə idarə etmək olar?

    Brauzer yalnız HTML dilini başa düşdüyündən, proqram istisna atdıqda, servlet konteyneri istisnanı idarə edəcək və HTML cavabı yaradacaq. Bu, 404, 403 və s. kimi səhv kodları ilə baş verənlərə bənzəyir. Servlet API, yerləşdirmə deskriptorunda təyin edə biləcəyimiz istisnaları və səhvləri idarə etmək üçün yerli servletlərə dəstək verir. Bu cür servletlərin əsas vəzifəsi xətanı və ya istisnanı idarə etmək və istifadəçiyə insan tərəfindən oxuna bilən HTML cavabı göndərməkdir. Məsələn, siz əsas səhifəyə keçid, eləcə də xəta haqqında bəzi detalların təsvirini təqdim edə bilərsiniz.

    • Yerləşdirmə deskriptoru nədir?

    Yerləşdirmə deskriptoru servlet konteynerinə yerləşdiriləcək artefakt konfiqurasiya faylıdır. Java Platforması, Enterprise Edition spesifikasiyasında yerləşdirmə deskriptoru komponentin, modulun və ya proqramın (məsələn, veb və ya müəssisə proqramı kimi) necə yerləşdiriləcəyini təsvir edir.

    Bu konfiqurasiya faylı modul və ya proqram üçün xüsusi parametrlər, təhlükəsizlik seçimləri ilə yerləşdirmə seçimlərini müəyyən edir və xüsusi konfiqurasiya tələblərini təsvir edir. Yerləşdirmə deskriptor faylları üçün sintaksis XML-dir.

    • Tətbiqin işə salınması ilə servletin işə salınmasını necə həyata keçirmək olar?

    Servlet konteyneri adətən servleti müştərinin ilk sorğusu ilə yükləyir, lakin bəzən servleti birbaşa proqramın başlanğıcında yükləmək lazım gəlir (məsələn, əgər servlet böyükdürsə və yüklənməsi çox vaxt aparacaqsa). Bunu etmək üçün deskriptorda yüklənmə elementindən (və ya loadOnStartup annotasiyasından) istifadə etməlisiniz ki, bu da servletin başlanğıcda yüklənməsini göstərəcək.

    Dəyər int olmalıdır. Dəyər mənfi olarsa, servlet müştərinin tələbi ilə yüklənəcək və 0 və daha çox olarsa, tətbiqin başlanğıcında yüklənəcəkdir. Rəqəm nə qədər az olarsa, servlet bir o qədər tez yükləmə növbəsində olacaq.

    • ServletConfig obyekti nədir?

    javax.servlet.ServletConfig interfeysi konfiqurasiya məlumatını servletə ötürmək üçün istifadə olunur. Hər bir servletin özünün ServletConfig obyekti var, servlet konteynerinin yaradılmasına cavabdehdir. Konfiqurasiya parametrlərini təyin etmək üçün web.xml-də (və ya WebInitParam annotasiyalarında) başlanğıc parametrləri istifadə olunur. GetServletConfig() metodu bu servletin ServletConfig obyektini əldə etmək üçün istifadə olunur.

    • ServletContext obyekti nədir?

    javax.servlet.ServletContext interfeysi servletin servlet konteyneri ilə əlaqə saxlamaq üçün istifadə etdiyi, məsələn, faylın MIME növünü əldə etmək, sorğu göndərmək və ya jurnal faylına yazmaq kimi metodlar toplusunu müəyyən edir. ServletContext obyekti unikaldır və veb proqramdakı bütün servletlər üçün əlçatandır. Bir və ya bir neçə servletə veb tətbiqinin başlanğıc parametrlərinə giriş icazəsi verməli olduğumuz zaman ServletContext obyektindən istifadə edə bilərik. Bunu etmək üçün elementdən istifadə edin web.xml-də. ServletContext obyekti ServletConfig interfeysində getServletContext() metodundan istifadə etməklə əldə edilə bilər.

    Servlet konteynerləri həmçinin bir qrup servlet üçün unikal olan kontekst obyektlərini təmin edə bilər. Qrupların hər biri fərqli host yolu URL-ləri ilə əlaqələndiriləcək.

    ServletContext proqrama dinləyicilərin və filtrlərin proqramlı əlavə edilməsini təmin etmək üçün Servlet 3 spesifikasiyasında genişləndirilmişdir. Bu interfeys həmçinin getMimeType(), getResourceAsStream() və s. kimi bir çox faydalı metodlara malikdir.

    • ServletContext və ServletConfig arasındakı fərq nədir?

    Aşağıda bəzi fərqlər var:

    • ServletConfig hər servlet üçün unikaldır, ServletContext isə bütün tətbiqdə unikaldır.
    • ServletConfig servletin başlanğıc parametrlərini təmin etmək üçün istifadə olunur və ServletContext bütün servletlər üçün tətbiqin başlanğıc parametrlərini təmin etmək üçün istifadə olunur.
    • ServletConfig obyektində atributlar təyin etmək imkanımız yoxdur, halbuki biz ServletContext obyektində digər servletlər üçün əlçatan olacaq atributlar təyin edə bilərik.

    • ServletResponse interfeysi.

    ServletResponse interfeysi müştəriyə məlumat göndərmək üçün bir vasitədir. Bu alətin bütün üsulları bu məqsədə xidmət edir.

    • ServletRequest interfeysi.

    ServletRequest interfeysi HTTP sorğu parametrlərini əldə etmək üçün bir vasitədir. Bu interfeysdə ad və məqsəd baxımından ServletContext ilə eyni olan bəzi üsullar var.

    • Sorğu dispetçeri nədir?

    RequestDispatcher interfeysi sorğunu başqa resursa ötürmək üçün istifadə olunur (bu, HTML, JSP və ya eyni proqramdakı başqa servlet ola bilər). Bundan başqa resursun məzmununu cavaba əlavə etmək üçün istifadə edə bilərik. Bu interfeys eyni kontekstdə servletlər arasında daxili əlaqə üçün istifadə olunur. İnterfeys iki üsula malikdir:

    • void forward(ServletRequest var1, ServletResponse var2) - servletdən sorğunu serverdəki başqa resursa (servlet, JSP və ya HTML faylı) yönləndirir.
    • void daxildir(ServletRequest var1, ServletResponse var2) - cavabda resurs məzmununu (servlet, JSP və ya HTML səhifəsi) ehtiva edir.

    İnterfeys ServletContext getRequestDispatcher(String s) metodundan istifadə etməklə əldə edilə bilər. Yol kontekstin cari kök yoluna nisbətən şərh ediləcək / ilə başlamalıdır.

    • Servletdə kilid necə yaradıla bilər?

    Çıxmaz (çıxmaz), məsələn, doGet () metodunda doPost () metodunu çağırmaqla və doPost () metodunda doGet () çağırmaqla, ilmələnmiş metod çağırışını həyata keçirməklə əldə edilə bilər.

    • Servlet ünvanını serverdə necə əldə etmək olar?

    Serverdə servletin faktiki yolunu əldə etmək üçün bu konstruksiyadan istifadə edə bilərsiniz: getServletContext().getRealPath(request.getServletPath()).

    • Servletdən server məlumatını necə əldə etmək olar?

    Server məlumatı getServerInfo() metodundan istifadə etməklə ServletContext obyektindən istifadə etməklə əldə edilə bilər. Bunlar. getServletContext().getServerInfo().

    • Serverdə müştərinin IP ünvanını necə əldə etmək olar?

    Servletdə müştərinin IP-sini əldə etmək üçün request.getRemoteAddr() istifadə edin.

    • Servlet sarğı sinifləri haqqında nə bilirsiniz?

    Servlet HTTP API iki sarğı sinifini təmin edir, HttpServletRequestWrapper və HttpServletResponseWrapper. Onlar tərtibatçılara servletin sorğu və cavab növlərinin öz tətbiqlərini həyata keçirməyə kömək edir. Biz bu sinifləri genişləndirə və öz cavab və sorğu obyekt növlərimizi həyata keçirmək üçün yalnız zəruri metodları ləğv edə bilərik. Bu siniflər standart servlet proqramlaşdırmasında istifadə edilmir.

    Java-nın ən xoş xüsusiyyətlərindən biri onun çoxşaxəli olmasıdır. Əlbəttə ki, ənənəvi masa üstü və hətta mobil proqramların yaradılması əladır. Bəs siz yoldan çıxmaq və Java veb inkişaf ərazisinə daxil olmaq istəyirsinizsə nə olacaq? Sizin üçün yaxşı xəbər budur ki, bu dil sizə çox çətinlik çəkmədən möhkəm veb proqramları yaratmağa imkan verən tam Servlet API ilə gəlir.

    Servletlərlə Java Proqramlarının qurulması

    Beləliklə, biz artıq proqram konfiqurasiya fayllarını yaratmışıq. Ancaq indiki vəziyyətində sözün əsl mənasında heç nə etmir. Biz istəyirik ki, müştərilər HTML forması ilə qeydiyyatdan keçə bilsinlər, ona görə də etməli olduğumuz növbəti şey qeydiyyat uğurlu olduqdan sonra yuxarıdakı forma və müştəri təfərrüatlarını göstərəcək JSP faylları yaratmaqdır. İndi edəcəyimiz budur.

    Görünüş üzərində işləyir

    Tətbiqin görünüşü iki JSP faylı ilə müəyyən ediləcək - MVC kontekstində onlara baxışlar deyilir. Birincisi, qeydiyyat formasının və daxil edilmiş məlumatların təsdiqindən sonra yarana biləcək səhvlərin göstərilməsi üçün məsuliyyət daşıyacaq. İkincisi, qeydiyyat prosesi uğurla başa çatdıqdan sonra müştərinin daxil etdiyi məlumatları göstərəcək normal qarşılama səhifəsi olacaq.

    Budur ilk JSP faylı:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Qeydiyyat

    Qeydiyyat

    $(pozulma).