[英]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.