Sobes.tech
Middle

Ինչպես է սերվլետների կոնտեյները կառավարում սերվլետի կյանքի ցիկլը: Որ մեթոդները կանչվում են և երբ:

sobes.tech AI

Պատասխան AI-ից

Կոնտեյները կառավարում է սերվլետի կյանքի ցիկլը՝ օգտագործելով հետևյալ մեթոդների շարք. init, service, destroy.

  1. Սերվլետի դասի բեռնում: Երբ կոնտեյները ստանում է առաջին հարցումը սերվլետին կամ ծրագրի մեկնարկին (եթե այն կարգավորված է):

  2. Սերվլետի օրինակ ստեղծում: Կոնտեյները ստեղծում է սերվլետի դասի մեկ օրինակ ամբողջ ծրագրի համար:

  3. init() մեթոդի կանչում: Կոնտեյները մեկ անգամ կանչում է init(ServletConfig config) մեթոդը օրինակ ստեղծելուց հետո: Այս մեթոդում կարելի է կատարել ինիցիալիզացիա, բեռնել ռեսուրսներ և ստանալ սերվլետի կոնֆիգուրացիա: Այս մեթոդը չպետք է կրկնվի, մինչև սերվլետը ոչնչացվի և նորից ստեղծվի:

    // java
    public void init(ServletConfig config) throws ServletException {
        // Սերվլետի ինիցիալիզացիա
        this.config = config;
        // Ինիցիալիզացիոն պարամետրերի ստացում
        String param = config.getInitParameter("someParam");
    }
    
  4. service() մեթոդի կանչում: Ամեն ներգնա հարցման համար կոնտեյները կանչում է service(ServletRequest request, ServletResponse response) մեթոդը: Այս մեթոդը մշակել է հարցումը և ստեղծում պատասխան: Սովորաբար, այն ուղղորդում է HttpServlet-ի հատուկ մեթոդներին (doGet, doPost և այլն): service մեթոդը բազմամեղանոց է, և կոնտեյները կարող է միաժամանակ կանչել այն մի քանի հարցումների համար:

    // java
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        // Հարցման տիպի ստուգում և համապատասխան մեթոդի կանչում
        if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
            // ուղղորդում `HttpServlet`-ին
            super.service(request, response);
        } else {
            // այլ տիպի հարցումների մշակումը
            throw new ServletException("Նպաստվում են միայն HTTP հարցումներ");
        }
    }
    
    // օրինակ `doXXX` մեթոդի `HttpServlet`-ում
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // GET հարցման մշակումը
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Բարև</h1>");
    }
    
  5. destroy() մեթոդի կանչում: Կոնտեյները մեկ անգամ կանչում է destroy() մեթոդը նախքան սերվլետի օրինակն ոչնչացնելը: Դա տեղի է ունենում ծրագրի կանգառի ժամանակ կամ երբ սերվլետը հեռացվում է կոնտեյներից: Այս մեթոդում ազատվում են ռեսուրսները (օրինակ, փակվում են կապերը տվյալների բազայի կամ ֆայլերի հետ): destroy-ի կանչից հետո կոնտեյները կարող է կատարել աղբամուտի հավաքում սերվլետի օրինակով:

    // java
    public void destroy() {
        // Ռեսուրսների ազատում
        // Օրինակ, կապերի փակում
    }
    

Կայքի ցիկլը կարելի է ներկայացնել աղյուսակում:

Մեթոդ Կոչվում է Նպատակը
init() Միայն մեկ անգամ սերվլետի օրինակ ստեղծելուց հետո Ինիցիալիզացիա, ռեսուրսների բեռնում
service() Ամեն ներգնա հարցման համար Հարցման մշակումը, պատասխան ստեղծելը
destroy() Միայն մեկ անգամ սերվլետի օրինակ ոչնչացնելուց առաջ Ռեսուրսների ազատում, աշխատանքը ավարտել

Կոնտեյները ապահովում է, որ init-ը կանչվի service-ից առաջ, իսկ destroyվերջինservice-ից հետո: service` մեթոդները կարող են գործարկել միաժամանակ։