我希望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);
}
}
答案 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);
}