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

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

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

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

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

pw.close();

}

}

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

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

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

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

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

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

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

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