为什么HttpServlet类被声明为抽象?

时间:2011-07-19 05:10:32

标签: java servlets

为什么HttpServlet类被声明为抽象,即使该类中没有抽象方法?

6 个答案:

答案 0 :(得分:20)

这是因为它遵循Template Method设计模式。 doXxx()方法具有返回HTTP 405 方法未实现错误的所有默认行为。如果这些方法都是抽象的,那么即使您的业务需求根本不需要,您也会被迫全部覆盖它们。它只会导致样板代码和未指定/不直观的行为。

答案 1 :(得分:8)

它被声明为一个类而不是一个接口来实现设置servlet所需的大多数可用/可重复的代码。它被声明为abstract,因为实例化一个“裸骨”servlet是没有意义的,它只关注设置并且不包含任何自定义/用户定义的逻辑。

答案 2 :(得分:0)

可能是为了防止通过创建实例来直接实例化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();

}

}

答案 3 :(得分:0)

HttpServlet类的所有方法都是具体的,即使我们将此类声明为抽象,因为 1>任何类都可以有null或更抽象的方法以及具体的方法。 2&gt;总是通过扩展HttpServlet来创建我们的servlet。只有派生的servlet类才能生成对象。

答案 4 :(得分:0)

HttpServlet是一个没有任何抽象方法的抽象类,因为Web容器制造商通过将其声明为抽象来限制开发人员创建它的对象。

Web容器应该调用doGet()和doPost(),它应该处理Servlet的所有生命周期。

如果允许我们创建HttpServlet的对象,我们限制容器调用doGet()和doPost(),但这是容器本身的工作,它应该处理Servlet的所有生命周期。

所以,这就是为什么我们不应该创建一个HttpServlet的对象,所以这就是为什么它被标记为抽象类而没有任何抽象方法。

答案 5 :(得分:-1)

HttpServlet类被声明为抽象类,因为sun人们不想为HttpServlet类创建一个对象,因为它被声明为抽象。

你怎么知道HttpServlet类没有abstarct方法

公共类TestServlet扩展HttpServlet { } //如果我们能够编译那么编译上面的程序那么就没有抽象方法了   在我们需要过度使用的HttpServlet类中。