JavaRush /Kurslar /All lectures for AZ purposes /Servlet’lərlə Tanışlıq

Servlet’lərlə Tanışlıq

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

1.1 interface Servlet

Bu gün yeni və maraqlı bir mövzuya başlayırıq — servletlər. Məhz servletlərin Java-ya əlavə edilməsi, Java-nın hazırda böyük server tətbiqləri üçün faktiki standart olmasına səbəb oldu. Dünyada bütün korporativ proqram təminatının 80%-i Java-da yazılır. Çin'də isə bu rəqəm hətta 100%-dir. Bəs servletlər nədir?

Servlet — bu məhz Java proqramını veb-servisə çevirən və müştəridən gələn sorğuları emal etməyə imkan verən bir vasitədir. Hər şey belə başladı...

90-cı illərdə, dünya şəbəkəsi yaranandan dərhal sonra, veb-müştərilər (brouzerlər) və veb-serverlər meydana gəldi. Veb-serverlər adətən sadəcə saxladıqları faylları internet vasitəsilə paylaşırdılar: html səhifələri, skriptlər, şəkillər və s.

Bir anda hər kəs qərara gəldi ki, hər iki tərəfi daha ağıllı etmək lazımdır. HTML səhifələrinə JavaScript əlavə etdilər və serverlərə pluginlər əlavə etdilər — təlimatlı skriptlər, müəyyən sorğulara cavab olaraq çağırılırdılar və serverin davranışını daha çevik və ağıllı etməyə imkan verdilər.

Belə ki, servlet — bu xüsusi bir Java-plugindir, hansı ki, Java veb-serverinə qoşulurdu və müəyyən səhifələrə sorğu gələndə Java kodunu yerinə yetirməyə imkan verirdi. Bu Java kodu isə, Servlet sinifindən törəmiş bir sinif tərəfindən təqdim edilirdi və bu kod onun yaradıcılarının nə düşündüysə onu edirdi.

Və artıq bildiyin kimi, ən populyar Java veb-server — Tomcatdir. Yeri gəlmişkən, adı "Tom və Jerry" cizgi filmindəki pişiyin Tom adına görə verilmişdir.

Bəs Tomcat servletlərlə necə qarşılıqlı əlaqədə olur? Əslində bu proses standartlaşdırılıb və buna servletin həyat dövrü deyilir. Burada servlet — yüklənə bilən obyekt, veb-server isə servletlərin konteyneridir.

Əgər servlet hələ yüklənməmişsə, o zaman:

  1. Servlet sinfi konteyner tərəfindən yüklənir.
  2. Konteyner sinifin nümunəsini (obyekt) yaradır.
  3. Konteyner servlet obyektinin init() metodunu çağırır. Bu metod yalnız bir dəfə çağırılır.

Standart iş dövrü — müştəri sorğusunun xidmət edilməsi :

  • Hər bir sorğu ayrı bir yivdə işlənilir.
  • Konteyner servletin service() metodunu çağırır və ora ServletRequest və ServletResponse obyektlərini ötürür.
  • Servlet işinin tamamlanması üçün servlet obyektinin destroy() metodu çağırılır. Bu metod yalnız bir dəfə çağırılır.

Servlet işinin tamamlanmasının bir çox səbəbi ola bilər:

  • Proqramçı veb-serveri yenidən işə salır, bütün servletlərin işini düzgün şəkildə tamamlamaq lazımdır.
  • Proqramçı servletin yeni versiyasını yükləyir, köhnəsini düzgün şəkildə boşaltmaq lazımdır.
  • Və s.

Əsasını yadda saxla: veb-server və onun servletləri illər boyunca, dəfələrlə yenidən yüklənmədən və xətasız işləməlidir, hər dəqiqə minlərlə sorğu xidmət edərək. Buna görə də servletin həm yükləmə, həm iş, həm də boşaltma kodu həmişə yüksək keyfiyyətli olmalıdır.

1.2 HttpServlet Sinfi

Servlet Sinfi servlet və konteyner arasında işin standartlaşması üçün mövcuddur. Proqramçılar bu siniflə birbaşa işləmirlər. Və ya çox nadir hallarda işləyirlər. Ən çox istifadə olunan Servlet'dən törədilmiş HttpServlet sinfidir.

Bu sinifdə bizə lazım olacaq bir neçə metod var. Bu metodlardan tez-tez istifadə edəcəksən:

Metod Təsvir
1 init() Servletin yüklənməsi zamanı bir dəfə çağırılır
2 destroy() Servletin boşaldılması zamanı bir dəfə çağırılır
3 service(HttpRequest, HttpResponse) Servletə hər yeni sorğu üçün çağırılır
4 doGet(HttpRequest, HttpResponse) Servletə hər yeni GET-sorğusu üçün çağırılır
5 doPost(HttpRequest, HttpResponse) Servletə hər yeni POST-sorğusu üçün çağırılır
6 doHead(HttpRequest, HttpResponse) Servletə hər yeni HEAD-sorğusu üçün çağırılır
7 doDelete(HttpRequest, HttpResponse) Servletə hər yeni DELETE-sorğusu üçün çağırılır
8 doPut(HttpRequest, HttpResponse) Servletə hər yeni PUT-sorğusu üçün çağırılır

init()destroy() metodları Servlet sinfindən miras alınır. Buna görə, öz servletində onları yenidən təyin etmək istəyirsənsə, onları əsas sinifdən də çağırmaq lazımdır. Bunun üçün super.metodAdı() əmri istifadə olunur.

Servlet nümunəsi:


public class FirstHttpServlet extends HttpServlet {
  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Sorğudan “secret” parametrini alırıq
        String secret = request.getParameter("secret");
 
        // “secret” parametrini Http-sessiyaya daxil edirik
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);
 
        // Brauzer üçün cavab olaraq HTML çap edirik
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Başlıq</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet nümunəsi "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 Metod service(HttpServletRequest, HttpServletResponse)

Müştəri sorğusunun işlənməsi servlet baxımından belə görünür:

Hər müştəri sorğusu üçün konteyner (veb-server) HttpServletRequestHttpServletResponse obyektlərini yaradır, sonra isə uyğun servletin service(HttpServletRequest request, HttpServletResponse response) metodunu çağırır. Bu obyektlər ora ötürülür ki, metod request-dən lazım olan məlumatları ala bilsin və işin nəticəsini response-a qoysun.

service() metodunun default olaraq bir implementasiyası var. Əgər onu yenidən tərtib etməsən, o icra olunacaq. Bu, belə işləyir:

service() metodu request’dən HTTP-metod növünü (GET, POST, ...) müəyyən edir və sorğuya uyğun metodu çağırır.

Metod Təsvir
1 service(HttpRequest, HttpResponse) Servletə hər yeni sorğu üçün çağırılır
2 doGet(HttpRequest, HttpResponse) Servletə hər yeni GET-sorğusu üçün çağırılır
3 doPost(HttpRequest, HttpResponse) Servletə hər yeni POST-sorğusu üçün çağırılır
4 doHead(HttpRequest, HttpResponse) Servletə hər yeni HEAD-sorğusu üçün çağırılır
5 doDelete(HttpRequest, HttpResponse) Servletə hər yeni DELETE-sorğusu üçün çağırılır
6 doPut(HttpRequest, HttpResponse) Servletə hər yeni PUT-sorğusu üçün çağırılır

Öz sinfində ya service() metodunun yalnız birini yenidən tərtib edə bilərsən, ya da onu heç toxunmadan, lazım olduqda doGet(), doPost() və s. metodlarını yenidən tərtib edə bilərsən.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION