Java servlet如何始终执行相同的任务?

Java servlet如何始终执行相同的任务?,java,servlets,Java,Servlets,我希望Servlet始终执行相同的任务。不管是GET还是POST。 目前,我只是从doPost打电话给doGet,效果很好 然后我尝试重写服务方法,我认为它也会以同样的方式工作。但事实并非如此 代码以某种方式执行,但响应不会生成网页: response.getWriter(); response.println(string); 此代码适用于doGet/doPost方法,但不适用于服务。为什么? Servlet: class MyWebServlet extends HttpServlet

我希望Servlet始终执行相同的任务。不管是GET还是POST。 目前,我只是从doPost打电话给doGet,效果很好

然后我尝试重写服务方法,我认为它也会以同样的方式工作。但事实并非如此

代码以某种方式执行,但响应不会生成网页:

response.getWriter();
response.println(string); 
此代码适用于doGet/doPost方法,但不适用于服务。为什么?

Servlet:

class MyWebServlet extends HttpServlet {
    @Override
    public void service(ServletRequest request, ServletResponse response) {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String string = "teststring";
        out.println(string);
    }
}

您重写了错误的方法

既然你写了@Override注释,为什么你的编译器没有抱怨

实际上,servlet继承了两个服务方法,但没有相同的参数=>method重载

public void serviceServletRequest、ServletResponse响应由GenericServlet类实现,这意味着servlet的第一个父类

public void serviceHttpServletRequest请求,HttpServletResponse响应由HttpServlet类实现。 你需要覆盖的就是这个

您可以有效地覆盖第一个,但是您会失去http进程,并且不会向浏览器写入任何内容。它解释了你的问题


GenericServlet定义了一个与协议无关的通用servlet,因此与http协议没有直接关系。

您重写了错误的方法

既然你写了@Override注释,为什么你的编译器没有抱怨

实际上,servlet继承了两个服务方法,但没有相同的参数=>method重载

public void serviceServletRequest、ServletResponse响应由GenericServlet类实现,这意味着servlet的第一个父类

public void serviceHttpServletRequest请求,HttpServletResponse响应由HttpServlet类实现。 你需要覆盖的就是这个

您可以有效地覆盖第一个,但是您会失去http进程,并且不会向浏览器写入任何内容。它解释了你的问题

GenericServlet定义了一个与协议无关的通用servlet,因此与http协议没有直接关系。

将public void serviceServletRequest请求、ServletResponse响应更改为public void serviceServletRequest请求,HttpServletResponse响应,它应该工作。

将public void serviceServletRequest请求、ServletResponse响应更改为public void serviceServletRequest请求、HttpServletResponse响应,它应该工作

看看下面的例子。 当用户执行GET时,将调用doGet,如果他们执行Post,它将调用doPost,实习生将其称为doGet

看看下面的例子。 当用户执行GET时,将调用doGet,如果他们执行Post,它将调用doPost,实习生将其称为doGet


您是否重写或重载了服务方法?@override,无重载。我应该吗?你能准确地发布你的Servlet代码吗?上面更新了。此代码片段在服务中不起作用,但在doGet中起作用。您是否重写或重载了服务方法?@override,no重载。我应该吗?你能准确地发布你的Servlet代码吗?上面更新了。这个代码片段在服务中不起作用,但在doGet中起作用。是的,否则它只是一个重载:这解释了它的问题。是的,否则它只是一个重载:这解释了它的问题。这正是我在最初的帖子中写的:目前我只是从doPost调用doGet,这正是我在第一篇博文中写的:目前我只是从doPost打电话给doGet,效果很好。
   //Sample Code:
    @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      PrintWriter writer = resp.getWriter();
      writer.println("Hello World");
      writer.close();
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
   }