我有一些旧的Servlet覆盖服务方法,
仅在特定情况下,不应覆盖HttpServlet文档服务方法:
几乎没有理由要覆盖服务方法。服务通过将标准HTTP请求分配到每种HTTP请求类型的处理程序方法(上面列出的doXXX方法)来处理这些请求。
我发现了有关calls the do methods
的服务方法的几个答案对doGet(),doPost()和其他do方法的调用在HttpServlet类中
已完成by default,可以覆盖
由于您的servlet覆盖了service()方法并提供了不同的实现,因此不再这样做。相反,它可以执行...方法中的代码可以执行的操作。
并回答为什么not overide it
让servlet处理其他方法。
但是我没有任何合理的理由为什么要重写此方法,是否有任何情况?
似乎它可能与 DRY (不要重复自己)规则相对应,因此所有do方法都将执行相同的方法。
答案 0 :(得分:4)
如果您需要处理非标准的HTTP方法,即您尚未 覆盖service
,则该方法尚未被分配给doXxx
方法HttpServlet
。
正如RFC 2616 HTTP documentation所说:
下面定义了HTTP / 1.1的一组常用方法。尽管此集合可以扩展,但不能假定其他方法可以为单独扩展的客户端和服务器共享相同的语义。
您自己的报价甚至说的也一样,尽管只是隐含的:
几乎没有理由要覆盖
service
方法。service
通过将标准 HTTP请求分配到每种HTTP请求类型的处理程序方法(上面列出的doXXX
方法)来处理。
隐含的是必须通过重写方法来处理非标准请求。