2011-07-19 18 views

Respuesta

20

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.

+0

+1 gran respuesta como siempre. – Nishant

+0

La razón principal para declarar el resumen es forzar a todas las subclases a extender la clase HttpServlet y evitar crear el objeto directamente usando el nuevo operador – Stunner

0

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();

}

}

+0

Gracias por su respuesta. Tengo una duda más. ¿Qué nos impide anular el método de servicio? – satheesh

+0

Nada. Eres libre de anularlo. ¿Lo intentaste tú mismo? – BalusC

+0

No, señor, lo leí en book.i intentaré – satheesh

8

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.

-1

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.

+2

"Cómo sabes que la clase HttpServlet no tiene métodos de abstarct" - una mirada al Javadoc te dará esto información. –

0

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.

+3

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

0

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.

Cuestiones relacionadas