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

时间:2012-09-28 09:17:55

标签: java servlets

我希望Servlet始终执行相同的任务。无论是GET还是POST。 目前我只是从doGet()拨打doPost(),效果很好。

然后我尝试重写service()方法,我认为它的工作方式相同。但事实并非如此!

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

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);
    }
}

3 个答案:

答案 0 :(得分:3)

public void service(ServletRequest request, ServletResponse response)更改为public void service(HttpServletRequest request,HttpServletResponse response),它应该有效。

答案 1 :(得分:2)

你克服了错误的方法。

那么为什么编写@Override注释后你的编译器没有抱怨?

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

  • public void service(ServletRequest request, ServletResponse response)GenericServlet类实现,这意味着您的servlet的第一个父类。

  • public void service(HttpServletRequest request, HttpServletResponse response)由HttpServlet班级实施 这是你需要覆盖的那个。

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

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

答案 2 :(得分:-1)

  

请看下面的例子。   当用户执行GET时,将调用doGet,如果他们执行Post,它将调用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);
   }