0

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

4

4 回答 4

0

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

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

于 2013-08-14T06:33:25.043 回答
0

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

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

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

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

于 2013-08-14T06:42:01.347 回答
0

虽然HttpServlet没有抽象方法,但它确实有实现非平凡功能的方法。这就是为什么需要一个类。另一方面,HttpServlet需要扩展以实现特定于 webapp 的行为,这就是将其设为abstract类的理由。

我猜他们可能已经设计了 API,以便同时存在接口和抽象类,但在实践中应该没有任何区别。

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


当批评像 Servlet 规范这样的规范时,有必要在原始 Java 语言的上下文中考虑设计;例如没有注释,没有泛型类型,等等)。此外,您需要通过保持向后兼容性来考虑对规范演变的限制。

于 2013-08-14T06:47:12.960 回答
0

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

好吧,Java 并不强制您扩展 HttpServlet,它只是为您提供了扩展 HttpServlet 并使用 Web 应用程序所需的基本功能的工具。

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

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

于 2013-08-14T07:02:17.597 回答