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