何时使用 GenericServlet 而不是 HttpServlet?

6
我知道GenericServlet是协议无关的抽象类。那么我的问题是,什么情况下会选择使用GenericServlet呢?你有没有想到过使用GenericServlet的具体示例?
我一直将Servlet与HTTP协议及其响应和请求相关联。我无法想象Servlet如何在除HTTP之外的协议中有用。这并不意味着它不能被使用。其他协议的选项可能过去没有被利用,现在也不需要了。或者可能是因为我对此不了解足够多。

从Javadoc中:GenericServlet使编写servlet更加容易。它提供了init和destroy生命周期方法的简单版本,以及ServletConfig接口中的方法。GenericServlet还实现了在ServletContext接口中声明的log方法。 - Sotirios Delimanolis
@SotiriosDelimanolis 谢谢。我知道生命周期方法的简单版本已经实现了。但是,您不需要在代码中处理httprequest和httpresponse吗?或者GenericServlet会处理它们? - sheidaei
1
首先,你不能拥有一个GenericServlet对象。这个类是抽象的。其次,Servlet的入口点是它的service()方法。你需要创建一个实现该方法的实现类。HttpServletdoXXX方法是从HttpServletservice方法中调用的。 - Sotirios Delimanolis
这是我不理解Javadoc的地方,它说使编写servlet变得更容易。您必须编写自己的service()方法。但如果使用HttpServlet,则有doXXX模式。这样做如何更方便呢? - sheidaei
2
如果你的类继承自GenericServlet,那么有一些样板代码是不需要编写的。正如你所说的,“doXXX”范式只与HTTP相关,因此只适用于HttpServlet及其子类。如果你想创建一个用于流媒体音乐(或其他内容)的Servlet,你不会使用GET、POST等方法。GenericServlet实际上就像任何通用的abstract类一样,添加了一些非常基本的信息,可以供你重复使用。 - Sotirios Delimanolis
2个回答

9
您的问题的简短答案是“从实际应用角度来看永远不需要”。长的答案是GenericServlet是一个抽象的(无法实例化的)协议无关的servlet,它是可以通过网络进行访问的终端,比如Web。 GenericServlet提供了一些基本的生命周期管理,但你必须扩展它才能使其有用。 HttpServletGenericServlet的一种实现,它处理HTTP协议的许多低级细节,如头文件、分块、cookie等。就实际操作而言,这是业界唯一关心的实现。我想,理论上可能会有人扩展GenericServlet来实现其他协议,如FTP或SMTP,但为什么要费这个劲呢?希望这可以帮到您。

5
你的意思是为什么要使用FTP和SMTP? - Sotirios Delimanolis

1
通用Servlet并没有实现所有10个HTTP协议请求(get post put delete head trace connect options等)。因此,如果您扩展通用Servlet,则所有请求都将调用service()方法。 作为解决方案,HttpServlet实现了它们,因此您可以根据收到的请求执行不同的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接