¿Por qué la clase HttpServlet
se declara como abstracta incluso si no hay un método abstracto en esa clase?¿Por qué la clase HttpServlet se declara como abstracta?
Respuesta
Es porque sigue el patrón de diseño Template Method. Los métodos doXxx()
tienen todos los comportamientos predeterminados de devolver un error HTTP 405 Método no implementado. Si esos métodos fueran todos abstractos, se vería obligado a anularlos a todos, aunque sus requisitos comerciales no los necesiten. Solo daría como resultado un código repetitivo y un comportamiento no especificado/no intuitivo.
Probablemente, para evitar la creación de instancias directas de HttpServlet creando su instancia.
En otras palabras, para asegurarse de que siempre que se utiliza HttpServlet, siempre se extiende por la subclase.
No ... Se puede anular. Aquí está el ejemplo de Herbert Shcildt Java 2: The Complete Reference
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();
}
}
Se declara como una clase en lugar de una interfaz para implementar la mayor parte del código repetible/repetible requerido para configurar un servlet. Se declara como abstract
, ya que no tendría sentido crear una instancia de un servlet "básico" que se ocupe solo de la configuración y no contenga ninguna lógica personalizada/definida por el usuario.
La clase HttpServlet se declara como clase abstracta porque porque la gente del sol no quiere crear un objeto para la clase HttpServlet por esta razón se declara como abstracto.
¿Cómo sabe que HttpServlet clase no cuentan con métodos abstarct
TestServlet clase pública se extiende HttpServlet {} // compilar el programa anterior, si somos capaces de compilar entonces no hay métodos abstractos de la clase HttpServlet que necesitamos sobrepasar.
"Cómo sabes que la clase HttpServlet no tiene métodos de abstarct" - una mirada al Javadoc te dará esto información. –
todos los métodos de la clase HttpServlet son concretos, incluso declaramos esta clase como abstracta porque 1> cualquier clase puede tener un método nulo o más abstracto, así como el método concreto. 2> siempre hacemos nuestro servlet extendiendo HttpServlet.hence solo la clase de servlet derivada puede hacer objeto.
Bienvenido a stackoverflow. Este hilo es bastante viejo. En general, es mejor evitar la resucitación de hilos obsoletos a menos que la respuesta contribuya con algo significativo sobre las respuestas anteriores. – Leigh
HttpServlet es una clase abstracta sin ningún método abstracto porque el fabricante del contenedor web restringe al desarrollador para crear un objeto al declararlo abstracto.
El contenedor web debe llamar a doGet() y doPost() y debe manejar todo el ciclo de vida de Servlet.
Si se nos permite crear un objeto de HttpServlet, estamos restringiendo el contenedor para llamar a doGet() y doPost(), pero ese es el trabajo del contenedor en sí, debe manejar todo el ciclo de vida de Servlet.
Por eso, no deberíamos crear un objeto de HttpServlet, por eso es una clase abstracta marcada sin tener ningún método abstracto.
- 1. ¿Cómo comprobar si una clase Delphi se declara abstracta?
- 2. ¿Por qué EnumSet se implementa como clase abstracta y EnumMap se implementa como clase concreta?
- 3. ¿Por qué la estructura GUID se declara tal como es?
- 4. ¿Por qué HttpServlet implementa Serializable?
- 5. ¿Por qué NullPointerException no se declara como una excepción marcada?
- 6. ¿Por qué HttpServlet en Java implementa serializable?
- 7. ¿Por qué no se declara NULL?
- 8. ¿Por qué declarar una interfaz como abstracta?
- 9. ¿Por qué existen tanto la clase abstracta como la interfaz en C#?
- 10. ¿Qué es la clase abstracta en php?
- 11. Uso de Windows Form como clase abstracta: ¿qué patrón usar?
- 12. ¿Por qué un delegado de .NET no se declara estático?
- 13. ¿Por qué el comparador declara iguales?
- 14. ¿Por qué System.in se declara como nullInputStream() en lugar de nulo?
- 15. ¿Se puede usar una clase abstracta como tipo de referencia?
- 16. C# declara la subclase como tipo superclase
- 17. php clase abstracta extendiendo otra clase abstracta
- 18. Clase base abstracta vs. Clase concreta como SuperTipo
- 19. ¿En qué se diferencia la clase abstracta de la clase concreta?
- 20. Derivar clase abstracta de la clase no abstracta
- 21. referencia a la clase abstracta
- 22. ¿Implementar clase abstracta como una clase local? pros y contras
- 23. ¿Por qué se declara este evento con un delegado anónimo?
- 24. ¿Por qué debe especificarse la clase base antes de las interfaces cuando se declara una clase derivada?
- 25. ¿Dónde se declara cout?
- 26. Extender la clase Singleton abstracta
- 27. ¿Por qué este campo se declara como privado y también de solo lectura?
- 28. Si una clase se declara como final es necesario declarar los métodos como finales
- 29. Etiqueta de estructura y nombre, ¿por qué se declara una variable local como compilación de nombre?
- 30. C# Interfaz implementada por clase abstracta vacía
Porque así es como lo diseñaron. No constructivo – EJP