创建从预定义的超类扩展的类

时间:2013-08-14 06:29:40

标签: java servlets

为什么java强制在创建任何servlet类时从HttpServlet扩展,即使它是一个没有任何抽象方法的抽象类?

4 个答案:

答案 0 :(得分:0)

根据servlet规范,它需要创建Servlet实例,因此它不能是抽象类

您可以选择使用servlet 3.0进行基于@WebServlet注释的配置

答案 1 :(得分:0)

这很简单,因为你的类需要是Servlet的子类型,以便servlet容器可以根据servlet规范使用该类。

作为服务器的servlet容器创建你的类的实例,如下所示

Servlet servlet=(Servlet)Class.forName("YourClassName").newInstance();

(这不是确切的代码,但代码将如上所述) 因此,如果您的类不是servlet的子类型,那么服务器将如何使用代码。

答案 2 :(得分:0)

虽然HttpServlet没有抽象方法,但它确实有实现非平凡功能的方法。这就是为什么需要课程的原因。在转换端HttpServlet需要扩展以实现特定于webapp的行为,因此这是使其成为abstract类的理由。

我猜他们可以设计API,以便有接口和抽象类,但在实践中不应该有任何区别。

此外,正如Jigar Joshi指出的那样,你可以使用注释代替从Servlet 3.0规范开始。


在批评像Servlet规范这样的规范时,有必要在原始Java语言的外观环境中考虑设计;例如没有注释,没有泛型类型,等等)。此外,您需要考虑维护向后兼容性的需求对规范演变的限制。

答案 3 :(得分:0)

  

为什么java强制在创建任何servlet类时从HttpServlet扩展,即使它是一个没有任何抽象方法的抽象类?

好吧,Java并没有强制你扩展HttpServlet,它只是为你提供扩展HttpServlet的工具,并使用你的web应用程序所需的基本功能。

HttpServlet提供了几乎每个Web应用程序所需的一些常用功能的实现。

如果要以自己的方式实现这些功能,可以通过绕过HttpServlet并扩展GenericServlet来实现这一功能。