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 ж.б. методдорго багытталат.

    // 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 суроолорду колдойт");
        }
    }
    
    // `HttpServlet`теги doXXX методунун мисалы
    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 методдору параллелдүү болушу мүмкүн.