代码如下
public class HttpServletTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doGet(req, resp); 需要去掉,否则会报错
super.doGet(req, resp);
System.out.println("进入HttpServletTest doGet() ");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp); 需要去掉,否则会报错
super.doPost(req, resp);
this.doGet(req, resp);
}
}
查看 super.doGet(req,resp)的源码
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_get_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
这是因为,显示调用父类的super.doGet(req,resp)方法,且先执行完,就等于已经响应了一次,然后又去跳转又去响应,就会报错重复提交。所以去掉super.doGet(req,resp);