java.lang.StackOverflowError: null
at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:77) ~[na:1.8.0_144]
at sun.nio.cs.UTF_8.access$200(UTF_8.java:57) ~[na:1.8.0_144]
at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:636) ~[na:1.8.0_144]
at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:691) ~[na:1.8.0_144]
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579) ~[na:1.8.0_144]
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271) ~[na:1.8.0_144]
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) ~[na:1.8.0_144]
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207) ~[na:1.8.0_144]
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129) ~[na:1.8.0_144]
......
代码段如下:
//处理get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get");
this.doGet(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post");
resp.getWriter().write("Hello MyServlet");
}
执行时,后台报错,页面没输出。改了很久,后来才发现doGet方法调用了自身,递归导致内存溢出。补一点内容:
具体调用哪个方法由网页的提交方式决定,不过在编程时不用考虑它调用哪个方法。你可以在doget方法里调用dopost方法,然所有的处理写在dopost方法里。这样不管调用的是doget方法还是dopost方法都可以处理。
修改后,运行正常。
public class MyServlet extends HttpServlet {
//处理get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello MyServlet");
}
}