Servlets 为什么一旦我们覆盖了service(),委托就永远无法到达doGet()?

Servlets 为什么一旦我们覆盖了service(),委托就永远无法到达doGet()?,servlets,Servlets,在我向下面的servlet发出GET请求后,编写了文本“In-service-method”,无法解释它。为什么呢 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MyServlet extends HttpServlet { public void service(HttpServletRequest req, HttpS

在我向下面的servlet发出GET请求后,编写了文本“In-service-method”,无法解释它。为什么呢

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class MyServlet extends HttpServlet {
   public void service(HttpServletRequest req,
                       HttpServletResponse resp) throws IOException {
      Writer out = resp.getWriter();
      out.write("In Service method");
   }

   public void doGet(HttpServletRequest req, HttpServletResponse resp) 
                                                        throws IOException {
      Writer out = resp.getWriter();
      out.write("In get method");
   }
}
阅读(第607行)中的代码将告诉您原因<代码>服务()负责委托给适当的doXXX方法

您可能想阅读关于plain(or)的内容,而不是关于HttpServlet子类的内容。您将在文档中看到,servlet是协议独立的,而HttpServlet肯定是协议依赖的。

阅读(第607行)中的代码将告诉您原因<代码>服务()负责委托给适当的doXXX方法


您可能想阅读关于plain(or)的内容,而不是关于HttpServlet子类的内容。您将在文档中看到,servlet是协议独立的,而HttpServlet肯定是协议依赖的。

的默认实现完成了这项工作。以下是其javadoc的摘录:

从公共服务方法接收标准HTTP请求,并将其分派到此类中定义的
doXXX
方法。此方法是
Servlet.service(javax.Servlet.ServletRequest,javax.Servlet.ServletResponse)
方法的HTTP特定版本。没有必要重写此方法

它根据HTTP方法委托给相应的servlet方法。例如,当
request.getMethod()
等于
“GET”
时,它将委托给
doGet()
。顺便问一下,你也读了最后一句吗

无论如何,你基本上应该自己做同样的工作

@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    Writer out = resp.getWriter();
    out.write("In Service method");

    if ("GET".equalsIgnoreCase(req.getMethod())) {
        doGet(req, resp);
    }
    // Check other methods as well!
}
或者只需调用
super
方法即可完成其工作

@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    Writer out = resp.getWriter();
    out.write("In Service method");
    super.service(req, resp);
}

或者根本不重写它。

的默认实现完成了该任务。以下是其javadoc的摘录:

从公共服务方法接收标准HTTP请求,并将其分派到此类中定义的
doXXX
方法。此方法是
Servlet.service(javax.Servlet.ServletRequest,javax.Servlet.ServletResponse)
方法的HTTP特定版本。没有必要重写此方法

它根据HTTP方法委托给相应的servlet方法。例如,当
request.getMethod()
等于
“GET”
时,它将委托给
doGet()
。顺便问一下,你也读了最后一句吗

无论如何,你基本上应该自己做同样的工作

@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    Writer out = resp.getWriter();
    out.write("In Service method");

    if ("GET".equalsIgnoreCase(req.getMethod())) {
        doGet(req, resp);
    }
    // Check other methods as well!
}
或者只需调用
super
方法即可完成其工作

@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    Writer out = resp.getWriter();
    out.write("In Service method");
    super.service(req, resp);
}

或者根本不重写它。

HttpServlet的服务方法实际上检查请求是GET还是POST。然后,它根据请求的类型调用适当的方法。

HttpServlet的服务方法实际上检查请求是GET还是POST。然后,它会根据请求的类型调用相应的方法。

最好的选择是不要覆盖服务方法。是的,HttpServlet中所说的永不覆盖服务()!最好的选择是不要重写服务方法。是的,在HttpServlet中所说的永远不会重写service()!