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");
}
}