Подтвердить что ты не робот

Почему класс HttpServlet объявляется абстрактным?

Почему класс HttpServlet объявлен как абстрактный, даже в этом классе нет абстрактного метода?

4b9b3361

Ответ 1

Это потому, что он следует за шаблоном дизайна Template Method. Методы doXxx() имеют все поведение по умолчанию, возвращающее ошибку HTTP 405 Not Implemented. Если бы эти методы были абстрактными, вы были бы вынуждены переопределить их всех, даже если ваши бизнес-требования вообще не нужны. Это приведет только к шаблону кода и неуказанному/неинтуитивному поведению.

Ответ 2

Он объявляется как класс вместо интерфейса для реализации большей части цикла/повторяемого кода, необходимого для настройки сервлета. Он объявлен как abstract, так как не имеет смысла создавать экземпляр сервлета "bare bones", который заботится только о настройке и не содержит в нем никакой пользовательской/пользовательской логики.

Ответ 3

Возможно, чтобы предотвратить непосредственное создание HttpServlet путем создания его экземпляра.

Другими словами, чтобы убедиться, что всякий раз, когда используется HttpServlet, он всегда расширяется подклассом.


Нет... Это можно переопределить. Вот пример из Herbert Shcildt Java 2: Полная ссылка

import java.io.*;

import javax.servlet.*;

public class HelloServlet extends GenericServlet

{

public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException

{

response.setContentType("text/html");

PrintWriter pw = response.getWriter();

pw.println("<B>Hello!");

pw.close();

}

}

Ответ 4

все методы класса HttpServlet являются конкретными, даже мы объявляем этот класс абстрактным, потому что 1 > любой класс может иметь нулевой или более абстрактный метод, а также конкретный метод. 2 > всегда мы делаем наш сервлет, расширяя HttpServlet.hence только производный класс сервлета может создавать объект.

Ответ 5

HttpServlet является абстрактным классом без абстрактного метода, потому что производитель веб-контейнера запрещает разработчику создавать его объект, объявляя его абстрактным.

Веб-контейнер должен вызывать doGet() и doPost(), и он должен обрабатывать весь жизненный цикл Servlet.

Если нам разрешено создавать объект HttpServlet, мы ограничиваем контейнер вызовом doGet() и doPost(), но это задача самого контейнера, он должен обрабатывать весь жизненный цикл Servlet.

Итак, поэтому мы не должны создавать объект HttpServlet, поэтому он помечен как абстрактный класс без абстрактного метода.

Ответ 6

Класс HttpServlet объявляется абстрактным классом, потому что люди солнца не хотят создавать объект для класса HttpServlet, поэтому он объявляется абстрактным.

Как вы знаете, что класс HttpServlet не имеет методов abstarct

Открытый класс TestServlet расширяет HttpServlet { } // скомпилируем указанную выше программу, если мы сможем ее компилировать, тогда нет абстрактных методов в классе HttpServlet, который нам нужно преодолевать.