繁体   English   中英

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

[英]creating class extending from predefined Superclass

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

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

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

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

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

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

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

尽管HttpServlet没有抽象方法,但它确实具有实现非平凡功能的方法。 这就是为什么需要一堂课。 在另一方面,需要扩展HttpServlet来实现特定于Webapp的行为,因此这是使其成为abstract类的理由。

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

而且,正如Jigar Joshi指出的那样,您可以使用注释代替Servlet 3.0规范。


在对诸如Servlet规范之类的规范进行批判时,有必要在原始Java语言外观的上下文中考虑设计。 例如,没有注释,没有泛型类型,等等。 另外,您需要通过保持向后兼容性来考虑对规范发展的限制。

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

好的,Java不会强迫您扩展HttpServlet,它只是为您提供了扩展HttpServlet并使用Web应用程序所需的基本功能的便利。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM