我希望Servlet始终执行相同的任务。不管它是GET还是POST。目前,我只是从doPost()调用doGet(),它工作得很好。
然后我试着重写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);
}
}发布于 2012-09-28 17:31:38
将public void service(ServletRequest request, ServletResponse response)更改为public void service(HttpServletRequest request,HttpServletResponse response),它应该可以工作。
发布于 2012-09-28 17:24:36
您重写了错误的方法。
那么,为什么你的编译器在你写了@注解之后没有抱怨呢?
实际上,您的servlet继承了两个服务方法,但没有相同的参数=>方法重载。
public void service(ServletRequest request, ServletResponse response)是由GenericServlet类实现的,这意味着servlet的第一个父class.public void service(HttpServletRequest request, HttpServletResponse response)是由HttpServlet类实现的。您需要覆盖的就是这个。
您可以有效地覆盖第一个,但您将丢失http进程,并且不会向您的浏览器写入任何内容。它解释了你的问题。
GenericServlet定义了一个通用的、独立于协议的servlet,因此与http协议没有直接关系。
发布于 2012-09-28 17:36:43
请看下面的示例。当用户执行GET时,doGet将被调用,如果他们执行Post,它将调用实习生调用doGet的doPost。
//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);
}https://stackoverflow.com/questions/12637084
复制相似问题