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)-ро даъват мекунад. Ин метод дархостро коркард мекунад ва ҷавобро тавлид мекунад. Одатан, он ба методҳои HTTP (doGet, doPost ва ғайра) дар синфи HttpServlet равона мекунад.

    // 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 метавонанд параллелӣ даъват шаванд.